首页主机资讯如何在centos上实现k8s的高可用部署

如何在centos上实现k8s的高可用部署

时间2025-11-28 12:16:03发布访客分类主机资讯浏览679
导读:在 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、内核网络参数、时间同步)为高可用部署的必要前提;容器运行时与 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 自动管理控制面组件与证书分发,适合生产快速落地。
  • 方案 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
    • 初始化命令使用 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),确认调度、网络与服务访问正常。
  • 安全与加固建议:
    • 启用 RBACPod SecurityNetworkPolicy;为 kubeconfig 设置最小权限;定期升级内核与组件版本;对外最小暴露面(仅暴露 6443 与必要的 Ingress/NodePort)。
  • 说明:通过 VIP 漂移与多控制平面节点,可实现对 API Server 与控制组件的故障转移;结合网络策略与 RBAC 提升集群安全与稳定性。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 如何在centos上实现k8s的高可用部署
本文地址: https://pptw.com/jishu/758901.html
Kubernetes在CentOS中的最佳实践是什么 怎样确保centos上k8s安装成功

游客 回复需填写必要信息