如何在centos上实现k8s的高可用部署
导读:在 CentOS 上实现 Kubernetes 高可用部署 一 架构与前置规划 推荐架构:至少部署3 台控制平面节点 + 2 台及以上工作节点;在控制平面前配置VIP + 4 层负载均衡(HAProxy/Keepalived 或 Ngin...
在 CentOS 上实现 Kubernetes 高可用部署
一 架构与前置规划
- 推荐架构:至少部署3 台控制平面节点 + 2 台及以上工作节点;在控制平面前配置VIP + 4 层负载均衡(HAProxy/Keepalived 或 Nginx/Keepalived),对外暴露 API Server 的 6443 端口,实现控制面故障切换与横向扩展。
- 网络规划示例:
- Pod 网段:10.244.0.0/16
- Service 网段:10.96.0.0/12
- 节点与 VIP 在同一二层网段,便于 VRRP/ARP 切换。
- 基础要求:各节点可互通;禁用 Swap;内核开启桥接转发;时间同步;安装容器运行时与 kubeadm/kubelet/kubectl。以上做法为生产实践中的通行方案与必要前提。
二 环境准备与系统初始化
- 所有节点统一操作(以 root 或具备 sudo 权限的用户执行):
- 关闭防火墙与 SELinux,禁用 Swap,配置主机名与 /etc/hosts,开启桥接转发,时间同步(示例命令):
- systemctl stop firewalld & & systemctl disable firewalld
- sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/config & & setenforce 0
- swapoff -a & & sed -ri ‘s/.swap./#& /’ /etc/fstab
- hostnamectl set-hostname ;在 /etc/hosts 中写入所有节点与 VIP 映射
- cat > /etc/sysctl.d/k8s.conf < < EOF net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.ipv4.ip_forward = 1 EOF sysctl --system
- yum install -y ntpdate & & ntpdate time.windows.com
- 安装容器运行时(以 containerd 为例,亦可选择 Docker CE):
- 配置 yum 源并安装 containerd.io,启用并启动服务;配置 systemd cgroup 驱动(/etc/containerd/config.toml 中设置 SystemdCgroup = true),重启 containerd。
- 安装 kubeadm/kubelet/kubectl(配置 kubernetes.repo,yum 安装对应版本)。
- 关闭防火墙与 SELinux,禁用 Swap,配置主机名与 /etc/hosts,开启桥接转发,时间同步(示例命令):
- 说明:以上初始化步骤(关闭防火墙/SELinux、禁用 Swap、内核网络参数、时间同步)为高可用部署的必要前提;容器运行时与 kubeadm 的安装为后续控制面与工作节点加入的基础。
三 部署高可用控制平面
- 方案 A(推荐)kubeadm 内置高可用
- 在第一个控制平面节点执行初始化(将 替换为你的虚拟 IP):
- kubeadm init --control-plane-endpoint “:6443” --pod-network-cidr 10.244.0.0/16 --service-cidr 10.96.0.0/12 --upload-certs
- 其余控制平面节点加入:
- kubeadm join :6443 --token --discovery-token-ca-cert-hash sha256: --control-plane --certificate-key
- 工作节点加入:
- kubeadm join :6443 --token --discovery-token-ca-cert-hash sha256:
- 说明:该方式由 kubeadm 自动管理控制面组件与证书分发,适合生产快速落地。
- 在第一个控制平面节点执行初始化(将 替换为你的虚拟 IP):
- 方案 B 外部负载均衡 + Keepalived
- 在控制平面节点部署 Keepalived + HAProxy(或 Nginx),对外提供 VIP:6443,后端为各 master 的 6443;Keepalived 提供 VIP 漂移,HAProxy 提供 4 层转发与健康检查。
- 示例 HAProxy 片段(/etc/haproxy/haproxy.cfg):
- frontend k8s-api
- bind :6443
- mode tcp
- default_backend k8s-masters
- backend k8s-masters
- mode tcp
- balance roundrobin
- server master1 192.168.44.155:6443 check
- server master2 192.168.44.156:6443 check
- frontend k8s-api
- 初始化命令使用 VIP:kubeadm init --control-plane-endpoint “:6443” …;其余节点 join 指向 VIP。
- 说明:该方式将负载均衡与控制面解耦,便于与现有机房/云上 LB 集成。
四 安装 CNI 网络插件与验证
- 部署网络插件(二选一,确保与 Pod 网段一致):
- Flannel:kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml
- Calico:按官方清单部署(选择与 kubeadm 初始化一致的 Pod CIDR)。
- 验证集群可用性:
- kubectl get nodes(状态应为 Ready)
- kubectl get pods -A(核心组件 Running)
- kubectl run test-nginx --image=nginx:1.25 --restart=Never --rm -it – curl -I http://kubernetes.default.svc.cluster.local
- 说明:网络插件负责 Pod 间与 Service 网络打通,是集群可用性的关键一步;Flannel 与 Calico 均为社区常用方案。
五 运维与验证高可用
- 控制面故障演练:
- 在 VIP 所在 master 上停止 kubelet 或关闭 keepalived,观察 VIP 漂移到其他 master;随后执行 kubectl get nodes 与 kubectl get componentstatuses(或等效命令)验证控制面与节点连通性恢复。
- 工作负载验证:
- 部署 Deployment 与 Service,进行滚动升级与节点驱逐(kubectl drain/uncordon),确认调度、网络与服务访问正常。
- 安全与加固建议:
- 启用 RBAC、Pod Security、NetworkPolicy;为 kubeconfig 设置最小权限;定期升级内核与组件版本;对外最小暴露面(仅暴露 6443 与必要的 Ingress/NodePort)。
- 说明:通过 VIP 漂移与多控制平面节点,可实现对 API Server 与控制组件的故障转移;结合网络策略与 RBAC 提升集群安全与稳定性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在centos上实现k8s的高可用部署
本文地址: https://pptw.com/jishu/758901.html
