K8S安装
·
1. 系统前置准备(所有节点)
这部分是所有节点都需要执行的准备工作,确保系统满足K8s的运行要求。
-
设置主机名与hosts解析:为每个节点设置一个唯一的主机名,并配置
/etc/hosts文件,让节点之间能通过主机名互相访问-1。
# 在Master节点执行
sudo hostnamectl set-hostname k8s-master
# 在Worker节点执行
sudo hostnamectl set-hostname k8s-worker-1
# 在所有节点执行,将下面的IP和主机名换成你的实际信息
cat <<EOF | sudo tee -a /etc/hosts
192.168.1.10 k8s-master
192.168.1.11 k8s-worker-1
EOF
关闭Swap:Kubernetes要求必须禁用Swap分区-1-9。
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab
配置内核模块与参数:加载overlay和br_netfilter模块,并设置网络转发参数-1-9。
# 加载内核模块
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
overlay
br_netfilter
EOF
sudo modprobe overlay
sudo modprobe br_netfilter
# 设置内核参数
cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system
配置防火墙:Rocky Linux默认启用firewalld,需要开放K8s集群所需的端口-1。以下命令在Master节点执行:
sudo firewall-cmd --permanent --add-port=6443/tcp
sudo firewall-cmd --permanent --add-port=2379-2380/tcp
sudo firewall-cmd --permanent --add-port=10250/tcp
sudo firewall-cmd --permanent --add-port=10251/tcp
sudo firewall-cmd --permanent --add-port=10252/tcp
sudo firewall-cmd --reload
在Worker节点执行:
sudo firewall-cmd --permanent --add-port=10250/tcp
sudo firewall-cmd --permanent --add-port=30000-32767/tcp # NodePort端口范围
sudo firewall-cmd --reload
2. 安装容器运行时(所有节点)
Kubernetes需要一个容器运行时来运行Pod。这里我们使用官方推荐的containerd-1-9。
# 安装 yum-utils 并添加 Docker CE 仓库(containerd.io 在此仓库中)
sudo dnf install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
# 安装 containerd.io
sudo dnf install -y containerd.io
# 生成默认配置并修改为使用 systemd cgroup 驱动(避免启动失败)
sudo mkdir -p /etc/containerd
sudo containerd config default | sudo tee /etc/containerd/config.toml > /dev/null
sudo sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml
# 启动 containerd 并设置开机自启
sudo systemctl enable --now containerd
注意:请勿安装docker-ce,否则K8s可能会自动检测到Docker而非Containerd作为运行时,从而引发配置冲突。只需要安装containerd.io即可。
3. 添加 Kubernetes YUM 源并安装组件
为简化安装过程,建议配置国内镜像源以提高下载速度3:
cat <<EOF > kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=0
repo_gpgcheck=0
gpgkey=https://mirrors.aliyun.com/kubernetes/yum/doc/yum-key.gpg https://mirrors.aliyun.com/kubernetes/yum/doc/rpm-package-key.gpg
EOF
mv kubernetes.repo /etc/yum.repos.d/
安装
sudo dnf install -y kubelet-1.35.3 kubeadm-1.35.3 kubectl-1.35.3 --disableexcludes=kubernetes
设置 kubelet 开机自启(此时会反复重启,待集群初始化后会稳定)
sudo systemctl enable kubelet
初始化 Master 节点(仅在 Master 执行)
sudo kubeadm init \
--pod-network-cidr=192.168.0.0/16 \
--apiserver-advertise-address=192.168.174.129 \
--kubernetes-version=v1.35.0 \
--cri-socket=unix:///var/run/containerd/containerd.sock \
--image-repository=registry.aliyuncs.com/google_containers
初始化成功后,配置 kubectl 访问权限
mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
sudo chown $(id -u):$(id -g) $HOME/.kube/config
💡 保存好 init 命令输出的 kubeadm join 命令,稍后你需要用它来添加Worker节点。如果忘记了,可以在Master上使用 kubeadm token create --print-join-command 重新生成。
如:
kubeadm join 192.168.174.129:6443 --token e7yk5i.k7yjm8os4mdpagrz \
--discovery-token-ca-cert-hash sha256:9a06c44eee40e549f7763668ef489b02f932d6d1779dc316444387331eb5910e
终极解决方案:直接跳过网络插件,使用 host-local 和 bridge 插件(无需外部镜像)所有节点
Kubernetes 自带的 bridge 插件不需要拉取任何外部镜像,直接使用 kubelet 内置的 CNI 插件。
步骤 1:创建 CNI 配置文件
# 创建 CNI 配置目录
sudo mkdir -p /etc/cni/net.d
# 创建 bridge 网络配置(无需拉取任何镜像)
cat > /etc/cni/net.d/10-bridge.conf << 'EOF'
{
"cniVersion": "0.3.1",
"name": "bridge",
"type": "bridge",
"bridge": "cni0",
"isGateway": true,
"ipMasq": true,
"ipam": {
"type": "host-local",
"ranges": [
[{"subnet": "192.168.0.0/16"}]
],
"routes": [{"dst": "0.0.0.0/0"}]
}
}
EOF
# 创建 loopback 配置
cat > /etc/cni/net.d/99-loopback.conf << 'EOF'
{
"cniVersion": "0.3.1",
"type": "loopback"
}
EOF
# 重启 kubelet
systemctl restart kubelet
步骤 2:重启 kubelet 并检查节点状态
# 重启 kubelet
systemctl restart kubelet
# 等待 10 秒
sleep 10
# 查看节点状态
kubectl get nodes
# 查看 Pod 状态
kubectl get pods -n kube-system
可见成功了
[root@k8s-master ~]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-bbdc5fdf6-44w48 1/1 Running 0 89m
coredns-bbdc5fdf6-f8zjj 1/1 Running 0 89m
etcd-k8s-master 1/1 Running 1 89m
kube-apiserver-k8s-master 1/1 Running 2 89m
kube-controller-manager-k8s-master 1/1 Running 1 89m
kube-proxy-jrxnv 1/1 Running 0 89m
kube-scheduler-k8s-master 1/1 Running 1 89m
[root@k8s-master ~]# kubectl get pods -n kube-system
NAME READY STATUS RESTARTS AGE
coredns-bbdc5fdf6-44w48 1/1 Running 0 90m
coredns-bbdc5fdf6-f8zjj 1/1 Running 0 90m
etcd-k8s-master 1/1 Running 1 90m
kube-apiserver-k8s-master 1/1 Running 2 90m
kube-controller-manager-k8s-master 1/1 Running 1 90m
kube-proxy-jrxnv 1/1 Running 0 90m
kube-scheduler-k8s-master 1/1 Running 1 90m
[root@k8s-master ~]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
k8s-master Ready control-plane 97m v1.35.3
[root@k8s-master ~]#

6. 加入 Worker 节点(仅在 Worker 执行)
在Worker节点上,使用第4步保存的kubeadm join命令加入集群。
kubeadm join 192.168.174.129:6443 --token e7yk5i.k7yjm8os4mdpagrz \
--discovery-token-ca-cert-hash sha256:9a06c44eee40e549f7763668ef489b02f932d6d1779dc316444387331eb5910e
✅ 验证集群
在Master节点执行 kubectl get nodes,如果所有节点状态都是Ready,就说明集群安装成功了。
更多推荐
所有评论(0)