在私有数据中心搞k8s高可用,关键是要整三个master节点。先整个负载均衡器(比如haproxy或kube-vip)把流量分到各个master的apiserver。用kubeadm init的时候带上--control-plane-endpoint参数指向这个负载均衡的地址,再补个--upload-certs传证书。第一个master装好后,用kubeadm join带着相同参数把剩下俩master加进来。记得etcd也要做集群,堆叠式部署的话每个master自带etcd。最后worker节点正常join就行,这样挂掉一个master照样能浪~
使用kubeadm在私有数据中心安装Kubernetes(k8s)集群时,如何设置集群的高可用性?
回答
| 共 5 个
-
负载均衡器配置
- 部署TCP负载均衡器(如HAProxy/Keepalived或硬件LB),将6443端口(kube-apiserver)流量分发到所有控制平面节点。
- 确保负载均衡器IP作为集群统一的访问端点(--control-plane-endpoint)。
-
初始化首个控制平面节点
kubeadm init \ --control-plane-endpoint="负载均衡器IP:端口" \ --upload-certs \ --pod-network-cidr=<CNI网段>记录生成的join命令(含证书密钥)。
-
部署共享证书
- 将
/etc/kubernetes/pki目录下的CA证书复制到其他控制节点相同路径 - 使用
kubeadm init phase certs all重新生成节点专属证书
- 将
-
加入其他控制平面节点
kubeadm join 负载均衡器IP:端口 \ --token <token> \ --discovery-token-ca-cert-hash <hash> \ --control-plane \ --certificate-key <密钥> -
配置etcd高可用(堆叠式拓扑)
- 每个控制节点自动运行etcd成员
- 验证etcd集群状态:
etcdctl member list
-
工作节点加入
使用标准join命令,指向负载均衡器端点。 -
验证高可用性
- 故意关闭主控制节点,确认kubectl命令仍可执行
- 检查组件状态:
kubectl get componentstatuses
注意: 生产环境建议至少3个控制平面节点,且etcd与控制平面节点共置。
在私有数据中心使用kubeadm部署高可用Kubernetes集群时,我通常采用以下架构方案及实践经验:
-
架构设计
- 控制平面:部署3个master节点,通过HAProxy+Keepalived实现API Server负载均衡,虚拟IP作为统一接入点
- etcd集群:采用独立部署模式(非堆叠式),避免与控制平面耦合,提高稳定性
- 网络方案:选择Calico/BGP模式实现跨机柜Pod通信,需预先规划Underlay网络路由
-
关键配置步骤
- 预配置负载均衡器(6443/2379/2380端口),确保TCP健康检查机制正常
- 使用kubeadm-config.yaml配置高可用参数: controlPlaneEndpoint: "apiserver-vip:6443" etcd: external: endpoints: ["https://etcd1:2379", ...] caFile: ...
- 首个master节点初始化时添加--upload-certs参数实现证书共享
- 通过kubeadm join --control-plane扩展其他master节点
-
实践挑战与解决方案
- 证书管理:
- 遇到过证书有效期仅1年的问题,现通过定期执行kubeadm alpha certs renew提前更新
- 私有镜像同步:
- 自建harbor仓库缓存k8s.gcr.io镜像,通过ansible脚本批量预载到节点
- 网络隔离问题:
- 物理交换机ACL曾阻断apiserver VIP漂移,需与网络团队协同配置VRRP白名单
- 存储高可用:
- 对接Ceph集群时,需调整kubelet的MaxOpenFiles限制(sysctl调优)
-
验证方案
- 模拟master节点宕机: systemctl stop kube-apiserver && watch kubectl get nodes
- 测试etcd集群健康状态: ETCDCTL_API=3 etcdctl --endpoints=... endpoint status
- 验证服务连续性: 持续访问ClusterIP服务期间重启控制平面组件
-
运维建议
- 部署Prometheus监控集群组件健康状态,特别关注etcd写入延迟指标
- 使用Velero定期备份集群状态,特别注意PersistentVolume的存储位置
- 预留至少20%的计算资源缓冲,避免控制平面组件因资源不足被驱逐
在私有数据中心使用kubeadm部署高可用Kubernetes集群时,需重点关注控制平面的冗余设计,具体实施步骤如下:
-
控制平面高可用架构:
- 采用至少3个控制节点(Control Plane),建议选择堆叠式etcd拓扑(Stacked etcd)或独立etcd集群方案。前者每个控制节点同时运行kube-apiserver和etcd,后者需单独部署etcd集群。
-
负载均衡配置:
- 在控制节点前部署负载均衡器(如HAProxy/Nginx),暴露kube-apiserver的6443端口。需确保LB自身高可用(VIP+Keepalived或硬件负载均衡)。
-
证书与配置同步:
- 使用
kubeadm init初始化首个控制节点时,通过--control-plane-endpoint参数指定LB的VIP地址。 - 使用
kubeadm join加入其他控制节点时需携带--control-plane标志,并确保同步/etc/kubernetes/pki目录下的CA证书。
- 使用
-
关键组件优化:
- 部署CoreDNS副本数为3,配置反亲和策略
- 采用高可用网络插件(如Calico的BGP模式或Cilium)
- 配置kube-controller-manager和kube-scheduler的Leader Election机制
-
验证与运维:
- 使用
kubectl get nodes -o wide确认节点状态 - 通过模拟节点故障测试故障转移
- 定期备份etcd数据(etcdctl snapshot save)
- 使用
注:若使用私有镜像仓库,需预先将k8s.gcr.io镜像同步至内网,并在kubeadm配置中指定local registry路径。
在私有数据中心使用kubeadm部署Kubernetes高可用集群,需从控制平面、etcd集群及负载均衡三个层面实现冗余。以下是关键步骤:
- 控制平面冗余:至少部署3个Master节点,通过kubeadm init时指定--control-plane-endpoint指向负载均衡器(如HAProxy+Keepalived),使用--upload-certs自动分发证书。
- etcd集群高可用:选择堆叠式(Stacked)或独立etcd集群模式。堆叠式需每个Master节点部署etcd,独立模式需单独部署3节点etcd集群并配置TLS通信。
- 负载均衡配置:API Server前端需部署负载均衡器(建议至少双节点+VIP),确保TCP/6443端口负载到所有Master节点。
- 节点联入策略:工作节点通过负载均衡器连接到API Server,避免单点依赖。
实践经验:
- 网络需保证低延迟(etcd要求<200ms),优先使用BGP或VRRP协议实现负载均衡器高可用
- 使用kubeadm config upload生成全局配置,确保各节点参数一致性
- 部署后通过kubectl get nodes -o wide及etcdctl endpoint status验证拓扑
- 私有环境需预配镜像仓库并配置kubeadm的imageRepository参数
- 建议结合Rook+Ceph实现持久化存储的高可用
推荐
热门问答
部分内容依据人工智能生成,仅供参考,可能有误请注意甄别