1. 项目概述
这个标题描述的是一个使用kubeadm工具部署高可用(HA)Kubernetes集群的指南,特别关注多master节点的配置。作为Kubernetes管理员,我经常需要为企业部署生产级集群,多master架构是确保服务高可用的关键设计。
在实际生产环境中,单master节点的Kubernetes集群存在单点故障风险。当master节点宕机时,整个集群的控制平面将不可用。通过部署多master节点,配合负载均衡和etcd集群,可以构建真正具备容错能力的Kubernetes基础设施。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心架构设计
2.1 高可用架构选型
Kubernetes高可用主要有两种实现方式:
- 堆叠式etcd:每个master节点同时运行kube-apiserver和etcd,etcd形成独立集群
- 外部etcd:etcd运行在独立于master的节点上,形成专用etcd集群
从我的实践经验看,堆叠式架构更适合中小规模部署,它减少了节点数量需求,但需要更严格的资源规划。外部etcd架构适合大型生产环境,可以提供更好的隔离性和扩展性。
2.2 网络拓扑设计
典型的多master部署需要以下组件:
- 3个或更多master节点(奇数个以确保etcd选举)
- 负载均衡器(可以是硬件LB或软件如HAProxy)
- 工作节点池
- 独立的etcd集群(如果采用外部etcd架构)
重要提示:生产环境中etcd集群必须使用SSD存储,机械硬盘会导致严重的性能问题。
3. 前置准备
3.1 系统要求
每个master节点建议配置:
- 至少4核CPU
- 8GB内存
- 40GB磁盘空间(etcd数据目录单独挂载SSD)
- 稳定的网络连接(建议千兆网卡)
3.2 软件依赖
所有节点需要:
- 容器运行时(containerd/docker)
- kubeadm、kubelet、kubectl
- 操作系统:兼容的Linux发行版(我推荐Ubuntu 20.04+或CentOS 7+)
4. 详细部署步骤
4.1 初始化第一个master节点
bash复制kubeadm init --control-plane-endpoint "LOAD_BALANCER_DNS:LOAD_BALANCER_PORT" \
--upload-certs \
--pod-network-cidr=10.244.0.0/16
关键参数说明:
control-plane-endpoint:指向负载均衡器的VIPupload-certs:自动上传证书供其他master节点加入pod-network-cidr:需要与后续安装的CNI插件匹配
4.2 加入其他master节点
获取加入命令:
bash复制kubeadm token create --print-join-command
然后在其他master节点执行类似命令:
bash复制kubeadm join LOAD_BALANCER_DNS:LOAD_BALANCER_PORT \
--token <token> \
--discovery-token-ca-cert-hash sha256:<hash> \
--control-plane \
--certificate-key <key>
4.3 配置负载均衡器
以HAProxy为例的配置片段:
conf复制frontend kubernetes
bind *:6443
option tcplog
mode tcp
default_backend kube-masters
backend kube-masters
mode tcp
balance roundrobin
server master1 192.168.1.101:6443 check
server master2 192.168.1.102:6443 check
server master3 192.168.1.103:6443 check
5. 关键配置验证
5.1 检查集群状态
bash复制kubectl get nodes
kubectl get pods -n kube-system
5.2 验证高可用性
- 随机停止一个master节点的kube-apiserver
- 确认kubectl命令仍能正常执行
- 检查工作负载是否不受影响
5.3 etcd健康检查
bash复制ETCDCTL_API=3 etcdctl \
--endpoints=https://127.0.0.1:2379 \
--cacert=/etc/kubernetes/pki/etcd/ca.crt \
--cert=/etc/kubernetes/pki/etcd/server.crt \
--key=/etc/kubernetes/pki/etcd/server.key \
endpoint health
6. 常见问题排查
6.1 证书问题
症状:节点加入失败,证书相关错误
解决:
- 检查证书有效期
kubeadm certs check-expiration - 必要时更新证书
kubeadm certs renew all
6.2 网络连通性问题
症状:节点状态NotReady,组件通信失败
解决:
- 确认防火墙规则允许6443、2379-2380等端口
- 检查CNI插件是否正常安装
6.3 资源不足
症状:etcd或控制平面组件频繁重启
解决:
- 监控资源使用情况
kubectl top nodes - 考虑增加master节点资源或减少集群负载
7. 生产环境优化建议
-
etcd调优:
- 定期压缩历史数据
- 调整心跳间隔和选举超时
- 启用etcd监控
-
控制平面组件:
- 为kube-apiserver配置多个实例
- 调整kube-controller-manager和kube-scheduler的副本数
-
备份策略:
- 定期备份etcd数据
- 备份kubeadm配置和证书
我在实际部署中发现,合理的资源预留和监控告警设置可以预防大多数高可用问题。建议至少为etcd预留2核CPU和4GB内存,避免因资源竞争导致性能下降。
