▌ 技术引导
架构师在搞Kubernetes高可用部署时,千万别靠猜,先看配置。高可用不是配置几个节点就能搞定的活,得从底层网络、负载均衡、存储策略、健康检查、证书管理这些地方死磕。我见过太多人瞎搞,比如用Calico做网络却不调整NodePort的默认端口,结果Master节点一挂,整个集群就完犊子了。真实场景里,用Kubeadm部署时,默认的etcd集群是单点,必须手动扩到3个节点以上才能扛住异常。更关键的是,要理解Master组件的高可用是通过负载均衡实现的,不能把API Server直接暴露在公网,得用Ingress控制器加TLS加密。还有,证书管理工具不能随便用,让etcd自己签证书反而更稳定。这些细节都是硬伤,踩进去就翻车。
好多架构师把高可用理解成“多个Master节点”,其实这不全面。高可用是系统设计的闭环,从节点健康状态到流量路由策略都要考虑。比如,Master节点的健康检查机制,如果用默认的readinessProbe,很容易误判。我见过有人把livenessProbe的失败阈值设成3,结果Master节点挂了三次才重启,导致集群长时间不可用。所以得考虑Pod重启策略,如果用Always,得配好重启时间间隔和健康检查超时时间。还有存储,高可用Kubernetes需要共享存储,直接挂本地盘是死路一条,得用GlusterFS、Ceph这些分布式存储。性能上,如果节点不足,etcd会自动扩容,但得配好配置项,比如--max-replicacount。
别把高可用当杂活,它得和架构整体设计同步。比如,日志和监控系统必须能跨节点访问,不能让某个Master节点出问题就整个系统挂掉。我之前用Prometheus+Grafana监控集群,结果因为Master节点的IP变动,监控数据被割裂了,必须用Service IP+headless Service来解决。另外,Kubernetes的API Server和etcd之间的通信必须加密,用TLS证书是必须的,否则一旦网络攻击,整个集群就暴露了。配置的时候别忘了把etcd的证书复制到所有Master节点,不然会出问题。还有,Master节点的配置文件不能随意更改,比如--storage-backend参数,选错会导致etcd无法启动。
高可用部署的核心在于冗余和自动故障转移。比如,Kubeadm部署时,etcd集群至少要三个节点,这三个节点必须部署在不同的物理机或虚拟机上,不能都放在一个机房。Master节点的负载均衡要配置好,不能只是简单的轮询。我之前用HAProxy做负载均衡,结果因为后端Pod的IP变动,没有及时更新配置,导致流量一直打到挂掉的API Server节点。这种情况非常常见,没注意到IP是动态的,就容易出问题。另外,Master节点的证书要定期轮换,用kubeadm reset会把旧证书删掉,记得备份。还有,Kubernetes的版本升级策略得稳定,避免用滚动更新,而是用蓝绿部署,这样能保证高可用不被破坏。
高可用不只是Master节点的可用,还包含Worker节点的分布。比如,Pod调度策略不能随便用,得结合节点亲和性、污点和容忍度。我之前部署服务时没加污点,结果所有Pod都跑到同一个Worker上,一旦那个节点挂了,整个服务就崩溃了。所以得在Worker节点上设置不同的标签,再配合调度器的配置,比如kube-scheduler的--node-score-weights参数。另外,存储卷的挂载方式也很重要,如果是NFS挂载,得保证所有节点都能访问同一个目录,否则Pod就无法启动。还有,网络策略不能太宽松,比如Calico的网络隔离设置,得根据业务需求配置,否则容易出现跨节点通信问题。这些细节都是在实战中踩出来的坑,必须正视。
▌ 技术参考
一 用Kubeadm部署高可用Kubernetes时,etcd必须使用三个节点,且每个节点要绑定到不同的物理机或机器。etcd的配置文件在/etc/etcd/目录下,每个节点的配置项--name、--data-dir、--initial-cluster参数必须区分。比如,三个节点可以叫node1、node2、node3,初始集群配置为node1=node1-ip,node2=node2-ip,node3=node3-ip。这样能保证etcd的高可用,避免单点故障。同时,etcd的存储后端要设置为etcd3,不能用etcd2,否则无法支持Kubernetes的高可用部署。
二 部署Master节点时,要确保API Server、Controller Manager和Scheduler都高可用。可以使用Deployment方式部署,对三个组件配置相同的副本数,比如3个副本,这样即使某个Pod挂了,也能自动重启。但要注意,每个Master节点的IP不能重复,否则会导致Service IP冲突。可以使用kubectl edit deployment kube-apiserver来修改副本数,同时注意配置--bind-address参数,确保监听正确的IP。
三 负载均衡配置是高可用部署的关键,不能只做简单转发。推荐使用Keepalived+VIP的方式,或者用Nginx+ipvs。比如,用Keepalived配置三个Master节点的VIP,然后通过tcp转发到各个API Server节点。这样即使某个Master挂了,VIP还能自动切换到其他节点。配置文件在/etc/keepalived/keepalived.conf,要设置优先级、虚拟IP、健康检查策略和通知机制,比如vrrp_script的脚本要能检测API Server是否存活。
四 安全证书管理是高可用部署的隐形杀手。Kubeadm自动生成的证书只能在Master节点生效,Worker节点需要手动复制证书。比如,使用kubeadm init之后,要将/etc/kubernetes/pki目录下的证书复制到其他Master节点,同时配置/etc/kubernetes/manifests目录下的证书路径。如果证书过期了,用kubeadm cert renew命令可以一键更新,但要提前配置好TLS证书的自动签发策略。
五 高可用集群的健康检查不能依赖简单的curl,得用kubectl get nodes、kubectl get pods、kubectl get services等命令全面排查。比如,查看API Server的健康状态,用kubectl get endpoints kube-apiserver -n kube-system,如果返回的端点不正常,说明负载均衡或者Master节点有问题。还可以用kubectl describe pod kube-apiserver-xxx来查看Pod状态,如果状态是CrashLoopBackOff,说明API Server有异常,得查日志和配置。
六 在Kubernetes中实现高可用,不能只依赖Master节点,还要考虑Worker节点的分布。比如,Worker节点的标签要统一,比如添加label node-role.kubernetes.io/worker: "",然后配置Deployment的nodeSelector或affinity规则。同时,Worker节点的污点要处理好,比如设置node.kubernetes.io/not-ready:NoSchedule,防止Pod调度到未就绪的节点。此外,要配置Pod的容忍度,确保服务能正常分配。
七 Kubelet的配置对高可用影响极大,必须确保每个Worker节点的kubelet配置正确。比如,在/etc/kubernetes/kubelet.conf中设置--hostname-override参数,确保每个节点的主机名与实际IP一致。还要配置--pod-infra-container-image参数,使用相同的镜像,否则Pod启动可能会失败。如果Worker节点的网络不稳定,可以配置--network-interface参数,让Kubelet绑定到正确的网卡,避免流量丢失。
八 安装和配置Ingress控制器时,要确保它能处理多个API Server节点的流量。比如,使用Nginx Ingress控制器时,要配置--controller-class参数为nginx-ingress-controller,同时在ingress资源中设置backend的server参数为负载均衡的VIP地址。这样可以避免直接访问具体的Master节点,提高安全性。另外,Ingress控制器的TLS配置要和Kubernetes的证书管理统一,否则会引发HTTPS连接失败的问题。
九 在Kubernetes中,etcd的存储必须使用持久化方式,比如GlusterFS或Ceph。不能使用临时存储,否则节点重启后数据会丢失。配置的时候要确保每个etcd节点都能访问共享存储,比如在/etc/etcd/etcd.conf中设置--data-dir参数指向GlusterFS挂载目录,并配置--name参数区分每个节点。同时,必须配置--initial-cluster参数,确保所有节点能互相发现,否则etcd集群无法形成。
十 Kubernetes的API Server要配置合理的超时时间和重试策略,避免因网络波动导致服务不可用。比如,在--service-account-issuer和--service-account-signing-key-file参数配置正确的情况下,API Server才能正常签发令牌。还可以配置--max-requests-inflight参数,防止资源过载导致响应延迟。如果API Server频繁重启,可以调整--restart-panic-threshold参数,设置更高的重启阈值,避免误判。
十一 在高可用Kubernetes集群中,网络策略必须严格,避免恶意流量影响系统稳定性。比如,使用Calico时,要配置NetworkPolicy,限制只有特定的IP才能访问Master节点。还可以设置--network-policy-namespace参数,控制哪些命名空间可以通信。如果网络隔离配置错误,会导致Pod无法通信,甚至整个集群无法访问。此外,要定期检查网络策略是否覆盖所有必要的服务。
十二 日志收集系统要能跨节点访问,比如使用Fluentd+ELK架构。在Master节点上部署Fluentd,将日志收集到中央服务器,这样即使某个Master挂了,日志也不会丢失。同时,要配置Prometheus的监控配置文件,确保能监控所有Master和Worker节点的资源使用情况。比如,在/etc/prometheus/prometheus.yml中,要添加Job名称和Scrape配置,确保能正确抓取指标。
十三 高可用Kubernetes的性能优化不能忽略etcd的读写性能。比如,etcd的写性能会随着节点数量增加而下降,所以不能无限制扩容。建议etcd节点数控制在3-5个之间,超过这个范围会导致写入延迟。同时,要配置etcd的--quota-backend-bytes参数,确保有足够的空间防止数据溢出。如果监控发现写入延迟过高,可以考虑更换存储后端或者优化存储配置。
十四 在部署高可用Kubernetes时,不能只关注Master节点,Worker节点的资源分配也要合理。比如,每个Worker节点的CPU和内存要满足Pod的最低需求,否则会导致Pod调度失败。可以使用kubectl describe node查看节点的资源使用情况,如果发现节点资源不足,要调整Pod的资源限制,比如在Deployment中设置resources.requests.cpu和resources.requests.memory。
十五 高可用Kubernetes的自动化运维要靠Ansible或者Terraform来实现。比如,使用Terraform创建多个Master节点和Worker节点,确保它们的配置一致。还可以用Ansible编写playbook,自动部署Kubeadm和配置负载均衡。这样不仅能提高部署效率,还能减少人为错误。在运维过程中,要记录每次操作的配置项,这样出问题时能快速回滚。
架构师 | Kubernetes高可用部署
架构师在搞Kubernetes高可用部署时,千万别靠猜,先看配置。高可用不是配置几个节点就能搞定的活,得从底层网络、负载均衡、存储策略、健康检查、证书管理这些地方死磕。我见过太多人瞎搞,比如用Calico做网络却不调整NodePort的默认端口,结果Master节点一挂,整个集群就完犊子了。真实场景里,用Kubeadm部署时,默认的etc
系统架构AI3 次阅读
Related
延伸阅读

保姆级教程 | PostgreSQL优化:性能优化实战数据库 · 2026-07-10

VS Code Copilot性能优化:4个快捷键速查 | 2026最新版VS Code指南 · 2026-07-13

Tabnine配置优化:20个必备技巧AI工具实战 · 2026-07-11

新手必看:自然语言编程工作流搭建 | 5分钟学会AI工具实战 · 2026-07-14

12个VS Code settings.json团队规范,避坑必备VS Code指南 · 2026-07-10

缓存设计:DynamoDB,建议收藏数据库 · 2026-07-10