K8s集群多MasterKubeadm安装部署运维实操
技术栈:kubeadm v1.32.13 + Kubernetes v1.32.13 + Rocky Linux 8.6 + Containerd 1.7.x + Calico
操作环境 / 对接原理 / 详细步骤 / 完整命令 / 配置文件 / 验证流程 / 排错方案
K8s集群多MasterKubeadm安装部署运维实操
操作环境
K8s 集群版本 v1.32.13,kubeadm 初始化
操作系统 Rocky Linux 8.6,内核 4.18.x
容器运行时 Containerd 1.7.13,已配置 systemd cgroup
3 Master + 3 Worker,高可用架构
网络插件 Calico v3.27.x,Pod CIDR 10.244.0.0/16
离线镜像仓库 Harbor,已预加载 K8s 组件镜像
root 权限,主机名解析正常,时间同步
对接原理
kubeadm 是官方推荐的 K8s 集群部署工具,通过 init/join/upgrade/reset 等子命令管理集群生命周期。kubeadm init 在 Master 节点生成证书(CA/apiserver/etcd/front-proxy)、静态 Pod 清单(apiserver/controller-manager/scheduler/etcd)、kubeconfig 文件(admin/controller-manager/scheduler/kubelet)、ConfigMap(kubeadm-config/kubelet-config),并启动控制平面。kubeadm join 通过 bootstrap token 向 apiserver 认证,获取集群信息,配置 kubelet 并加入集群。高可用部署需外部 etcd 或堆叠 etcd + 负载均衡(HAProxy/Keepalived),apiserver 指向 VIP。证书默认有效期1年,可用 kubeadm certs renew 续期,CA 证书10年。升级流程:kubeadm upgrade plan 检查 -> kubeadm upgrade apply(Master)-> kubeadm upgrade node(Worker)-> 升级 kubelet/kubectl。
详细步骤
1. 系统初始化
# 关闭防火墙 systemctl stop firewalld && systemctl disable firewalld # 关闭SELinux setenforce 0 sed -i 's/^SELINUX=enforcing$/SELINUX=permissive/' /etc/selinux/config # 关闭Swap swapoff -a sed -i '/swap/d' /etc/fstab # 内核参数 cat > /etc/sysctl.d/k8s.conf << 'EOF' net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF sysctl --system # 加载ipvs模块 cat > /etc/sysconfig/modules/ipvs.modules << 'EOF' #!/bin/bash modprobe -- ip_vs modprobe -- ip_vs_rr modprobe -- ip_vs_wrr modprobe -- ip_vs_sh modprobe -- nf_conntrack EOF chmod 755 /etc/sysconfig/modules/ipvs.modules bash /etc/sysconfig/modules/ipvs.modules # 时间同步 yum install -y chrony systemctl enable --now chronyd
2. 安装Containerd和kubeadm
# 安装Containerd yum install -y yum-utils yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo yum install -y containerd.io containerd config default > /etc/containerd/config.toml sed -i 's/SystemdCgroup = false/SystemdCgroup = true/' /etc/containerd/config.toml sed -i 's#registry.k8s.io#harbor.example.com/k8s#' /etc/containerd/config.toml systemctl enable --now containerd # 安装kubeadm/kubelet/kubectl cat > /etc/yum.repos.d/kubernetes.repo << 'EOF' [kubernetes] name=Kubernetes baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/ enabled=1 gpgcheck=0 repo_gpgcheck=0 EOF yum install -y kubelet-1.32.13 kubeadm-1.32.13 kubectl-1.32.13 systemctl enable kubelet # 配置crictl crictl config runtime-endpoint unix:///run/containerd/containerd.sock
3. kubeadm init初始化集群
# 预拉取镜像 kubeadm config images pull --image-repository harbor.example.com/k8s --kubernetes-version v1.32.13 # 初始化集群 kubeadm init \ --kubernetes-version v1.32.13 \ --apiserver-advertise-address=10.0.0.10 \ --control-plane-endpoint=10.0.0.100:6443 \ --pod-network-cidr=10.244.0.0/16 \ --service-cidr=10.96.0.0/12 \ --image-repository harbor.example.com/k8s \ --cri-socket=unix:///run/containerd/containerd.sock \ --upload-certs # 配置kubectl mkdir -p $HOME/.kube cp -i /etc/kubernetes/admin.conf $HOME/.kube/config chown $(id -u):$(id -g) $HOME/.kube/config # 安装Calico kubectl apply -f https://docs.projectcalico.org/v3.27/manifests/calico.yaml # 查看节点 kubectl get nodes
验证流程
# 1. 验证节点状态 kubectl get nodes # 所有节点Ready # 2. 验证系统Pod kubectl get pods -n kube-system # 核心组件Running # 3. 验证网络 kubectl get pods -n kube-system | grep calico # 4. 验证DNS kubectl run dns-test --image=busybox --restart=Never -- nslookup kubernetes # 5. 验证证书 kubeadm certs check-expiration # 6. 验证版本 kubectl version --short kubeadm version
排错方案
kubeadm init失败:检查端口6443/10250/2379是否被占用,镜像是否可拉取(--image-repository),cgroup驱动是否一致(systemd),swap是否关闭,内核参数是否配置
节点join失败:检查token是否有效(kubeadm token list),CA hash是否正确,网络是否可达Master VIP,防火墙是否放行,cri-socket是否正确
证书过期:kubeadm certs check-expiration查看,kubeadm certs renew all续期,重启控制平面静态Pod,更新admin.conf,注意CA证书10年有效期
升级失败:先kubeadm upgrade plan检查兼容性,逐个节点升级,Worker升级前cordon+drain,kubeadm和kubelet版本匹配,升级后重启kubelet
etcd故障:检查etcd静态Pod是否Running,etcd数据目录/var/lib/etcd,etcdctl endpoint health,磁盘空间是否充足,多Master时etcd集群是否健康
apiserver不启动:检查证书是否有效,etcd是否可达,--advertise-address是否正确,端口是否被占用,查看apiserver日志
高可用VIP不漂移:检查Keepalived配置(state/priority/virtual_router_id),HAProxy后端健康检查,防火墙放行VRRP协议,节点间网络连通
重置不干净:kubeadm reset后清理iptables/ipvs/CNI/kubelet数据,容器运行时数据,必要时重启节点,重新join前确保完全清理