使用kubeadm初始化首个Master节点后,通过生成加入命令并添加--control-plane参数,其他Master节点可加入集群,需配合负载均衡器(如HAProxy)实现高可用。
如何在Linux上使用kubeadm配置Kubernetes(k8s)集群的多Master节点?
在Linux上使用kubeadm配置多Master节点的Kubernetes集群需遵循以下核心步骤:
-
前置条件:
- 所有节点(Master/Worker)需关闭swap、防火墙,同步时间,配置主机名解析(/etc/hosts或DNS)
- 安装Docker/containerd及kubeadm/kubelet/kubectl(版本需严格匹配)
-
负载均衡配置:
- 部署HAProxy或Keepalived,将虚拟IP指向多个Master节点的6443端口
control-plane-endpoint
参数需指向该虚拟IP
-
初始化首个Master:
- 使用
kubeadm init --config=kubeadm-config.yaml
生成集群 - 配置文件需包含
ControlPlaneEndpoint
及certificateKey
(用于后续Master加入)
- 使用
-
扩展Master节点:
- 从首个Master节点复制证书(/etc/kubernetes/pki)到新节点
- 执行
kubeadm join
命令时需携带--control-plane
及--certificate-key
参数
-
Etcd集群:
- 若采用堆叠式etcd,需确保每个Master节点的etcd实例组成集群
- 使用
etcdctl cluster-health
验证状态
-
网络插件:
- 部署Calico/Flannel后,通过
kubectl get nodes
验证节点Ready状态
- 部署Calico/Flannel后,通过
关键注意事项:
- 证书管理需严格一致,避免跨节点文件差异
- 使用
kubeadm config print join-command
时注意令牌有效期 - 建议使用Kubernetes 1.24+版本以获得更好的高可用支持
-
基础环境准备:
- 所有节点需统一OS版本(推荐Ubuntu 20.04/CentOS 8+)
- 配置/etc/hosts主机解析,禁用swap并加载br_netfilter模块
- 设置严格的时间同步(chronyd误差需<100ms)
-
负载均衡器配置:
- 使用HAProxy+Keepalived实现VIP,需配置TCP模式监听6443端口
- 验证health check策略,确保API Server端点可达性
-
首个Master节点初始化:
- kubeadm init需指定--control-plane-endpoint为VIP地址
- 特别注意生成的certificate-key有效期(默认2小时)
- 网络插件选择Calico时需调整MTU匹配底层网络
-
扩展Master节点:
- 使用kubeadm join时需携带--certificate-key和--control-plane参数
- 手动拷贝/etc/kubernetes/pki目录下的CA证书时需注意文件权限
- 验证etcd集群状态(etcdctl member list)
实践挑战:
-
证书管理:
- 多Master架构要求所有control-plane节点共享CA证书
- 手动轮换证书时需停用kube-apiserver,可能造成服务中断
-
网络分区问题:
- 脑裂场景下etcd集群可能进入只读模式
- 需配置合理的etcd心跳超时参数(election-timeout/heartbeat-interval)
-
版本升级陷阱:
- 跨版本升级时需严格遵循kubeadm upgrade流程
- 容器运行时(containerd)与kubelet版本存在依赖关系
-
负载均衡瓶颈:
- 高并发场景下需调整HAProxy的maxconn参数
- 监控API Server的503错误日志定位流量分配不均问题
建议:
- 使用kube-vip替代传统负载均衡方案
- 在预生产环境完整测试集群故障转移流程
- 部署cluster-autoscaler应对Master节点突发负载
在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或域名匹配,否则节点间通信会因证书校验失败而中断。
作为IT经理,结合实践经验,配置Kubernetes多Master节点的核心步骤如下:
-
负载均衡器准备:部署HAProxy或Nginx作为控制平面入口,配置TCP端口6443(kube-apiserver)流量分发到所有Master节点。
-
初始化首个Master:
kubeadm init \ --control-plane-endpoint="负载均衡器IP:6443" \ --upload-certs \ --pod-network-cidr=10.244.0.0/16
保存生成的join命令(含
--control-plane --certificate-key
)。 -
加入其他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
重新生成)。 -
etcd高可用:所有Master节点自动加入etcd集群,需验证
etcdctl endpoint status
是否包含所有节点。 -
网络插件部署:在所有节点安装Calico/Flannel,确保Pod跨节点通信正常。
-
验证集群状态:
kubectl get nodes -o wide kubectl -n kube-system get pods
需确认所有Master节点处于Ready状态且核心组件无异常。
关键注意点:
- 确保所有节点时间同步(NTP服务)
- 关闭swap和防火墙/SELinux
- 控制平面证书需通过负载均衡器统一暴露
- 建议使用kube-vip替代传统负载均衡器简化部署