如何在Linux上使用kubeadm配置Kubernetes(k8s)集群的多Master节点?

问题浏览数Icon
22
问题创建时间Icon
2025-05-09 16:55:00
作者头像
luckyli99

在Linux上使用kubeadm配置多Master节点的Kubernetes集群,需先部署负载均衡器(如HAProxy)并初始化第一个Master节点,随后通过kubeadm join添加其他Master节点。

延伸知识点:负载均衡器的作用与配置 多Master集群依赖负载均衡器将流量分发到各Master节点的API Server。以HAProxy为例,需在配置文件中定义前端监听6443端口(Kubernetes API默认端口),后端指向所有Master节点的IP与端口。关键配置包括健康检查(option httpchk GET /healthz)和SSL证书绑定(若启用TLS)。kubeadm初始化时需通过--control-plane-endpoint参数指定负载均衡器的虚拟IP,确保各节点证书的Common Name(CN)与此IP或域名匹配,否则节点间通信会因证书校验失败而中断。

更多回答

作者头像
xiaoming99

作为IT经理,结合实践经验,配置Kubernetes多Master节点的核心步骤如下:

  1. 负载均衡器准备:部署HAProxy或Nginx作为控制平面入口,配置TCP端口6443(kube-apiserver)流量分发到所有Master节点。

  2. 初始化首个Master

    kubeadm init \
    --control-plane-endpoint="负载均衡器IP:6443" \
    --upload-certs \
    --pod-network-cidr=10.244.0.0/16

    保存生成的join命令(含--control-plane --certificate-key)。

  3. 加入其他Master节点

    kubeadm join 负载均衡器IP:6443 \
    --token <token> \
    --discovery-token-ca-cert-hash <hash> \
    --control-plane \
    --certificate-key <key>

    需保证证书有效期(默认2小时,可通过kubeadm init phase upload-certs --upload-certs重新生成)。

  4. etcd高可用:所有Master节点自动加入etcd集群,需验证etcdctl endpoint status是否包含所有节点。

  5. 网络插件部署:在所有节点安装Calico/Flannel,确保Pod跨节点通信正常。

  6. 验证集群状态

    kubectl get nodes -o wide
    kubectl -n kube-system get pods

    需确认所有Master节点处于Ready状态且核心组件无异常。

关键注意点

  • 确保所有节点时间同步(NTP服务)
  • 关闭swap和防火墙/SELinux
  • 控制平面证书需通过负载均衡器统一暴露
  • 建议使用kube-vip替代传统负载均衡器简化部署
作者头像
vmblueberry
  1. 基础环境准备:

    • 所有节点需统一OS版本(推荐Ubuntu 20.04/CentOS 8+)
    • 配置/etc/hosts主机解析,禁用swap并加载br_netfilter模块
    • 设置严格的时间同步(chronyd误差需<100ms)
  2. 负载均衡器配置:

    • 使用HAProxy+Keepalived实现VIP,需配置TCP模式监听6443端口
    • 验证health check策略,确保API Server端点可达性
  3. 首个Master节点初始化:

    • kubeadm init需指定--control-plane-endpoint为VIP地址
    • 特别注意生成的certificate-key有效期(默认2小时)
    • 网络插件选择Calico时需调整MTU匹配底层网络
  4. 扩展Master节点:

    • 使用kubeadm join时需携带--certificate-key和--control-plane参数
    • 手动拷贝/etc/kubernetes/pki目录下的CA证书时需注意文件权限
    • 验证etcd集群状态(etcdctl member list)

实践挑战:

  1. 证书管理:

    • 多Master架构要求所有control-plane节点共享CA证书
    • 手动轮换证书时需停用kube-apiserver,可能造成服务中断
  2. 网络分区问题:

    • 脑裂场景下etcd集群可能进入只读模式
    • 需配置合理的etcd心跳超时参数(election-timeout/heartbeat-interval)
  3. 版本升级陷阱:

    • 跨版本升级时需严格遵循kubeadm upgrade流程
    • 容器运行时(containerd)与kubelet版本存在依赖关系
  4. 负载均衡瓶颈:

    • 高并发场景下需调整HAProxy的maxconn参数
    • 监控API Server的503错误日志定位流量分配不均问题

建议:

  • 使用kube-vip替代传统负载均衡方案
  • 在预生产环境完整测试集群故障转移流程
  • 部署cluster-autoscaler应对Master节点突发负载
作者头像
dongyue22

在Linux上使用kubeadm配置多Master节点的Kubernetes集群需遵循以下核心步骤:

  1. 前置条件

    • 所有节点(Master/Worker)需关闭swap、防火墙,同步时间,配置主机名解析(/etc/hosts或DNS)
    • 安装Docker/containerd及kubeadm/kubelet/kubectl(版本需严格匹配)
  2. 负载均衡配置

    • 部署HAProxy或Keepalived,将虚拟IP指向多个Master节点的6443端口
    • control-plane-endpoint参数需指向该虚拟IP
  3. 初始化首个Master

    • 使用kubeadm init --config=kubeadm-config.yaml生成集群
    • 配置文件需包含ControlPlaneEndpointcertificateKey(用于后续Master加入)
  4. 扩展Master节点

    • 从首个Master节点复制证书(/etc/kubernetes/pki)到新节点
    • 执行kubeadm join命令时需携带--control-plane--certificate-key参数
  5. Etcd集群

    • 若采用堆叠式etcd,需确保每个Master节点的etcd实例组成集群
    • 使用etcdctl cluster-health验证状态
  6. 网络插件

    • 部署Calico/Flannel后,通过kubectl get nodes验证节点Ready状态

关键注意事项

  • 证书管理需严格一致,避免跨节点文件差异
  • 使用kubeadm config print join-command时注意令牌有效期
  • 建议使用Kubernetes 1.24+版本以获得更好的高可用支持