K8s集群多MasterKubeadm安装部署运维实操
2026/9/18 13:56:37 网站建设 项目流程

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前确保完全清理

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询