温馨提示×

centos k8s部署怎样实现高可用

小樊
46
2025-11-01 21:18:34
栏目: 智能运维

CentOS环境下Kubernetes高可用部署实现指南

一、基础环境准备

高可用部署的前提是确保所有节点(Master/Worker)满足以下要求:

  • 硬件配置:每台服务器至少2核CPU、2GB内存、20GB可用磁盘空间(生产环境建议更高)。
  • 网络配置:所有节点之间能互相通信(开放22端口用于SSH、6443端口用于Kubernetes API、10250-10255端口用于kubelet等);配置稳定的DNS解析和主机名(通过hostnamectl set-hostname设置,修改/etc/hosts添加节点映射)。
  • 系统优化
    • 关闭swap分区(swapoff -a并修改/etc/fstab永久生效,避免影响Kubernetes调度);
    • 关闭SELinux(setenforce 0并修改/etc/selinux/configdisabled,防止权限问题);
    • 配置时间同步(安装chronyntp,确保所有节点时间一致,避免证书过期或组件通信异常)。

二、安装核心组件

在所有节点上安装Docker(容器运行时)和Kubernetes工具(kubeadmkubeletkubectl):

# 添加Docker yum源并安装
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce-20.10.7 docker-ce-cli-20.10.7 containerd.io-1.4.6
systemctl enable --now docker

# 添加Kubernetes yum源并安装
cat <<EOF > /etc/yum.repos.d/kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://mirrors.aliyun.com/kubernetes/yum/repos/kubernetes-el7-x86_64/
enabled=1
gpgcheck=0
EOF
yum install -y kubelet-1.28.0 kubeadm-1.28.0 kubectl-1.28.0
systemctl enable --now kubelet

三、部署高可用Master节点

Master节点的高可用是Kubernetes集群稳定的核心,需通过负载均衡器etcd集群实现:

1. 初始化第一个Master节点(设置负载均衡器地址)

使用kubeadm init时指定--control-plane-endpoint(负载均衡器的虚拟IP,如k8s-lb.example.com:6443),并上传证书以实现多Master节点共享:

kubeadm init \
  --apiserver-advertise-address <Master1_IP> \
  --control-plane-endpoint k8s-lb.example.com:6443 \
  --image-repository registry.aliyuncs.com/google_containers \
  --kubernetes-version v1.28.0 \
  --pod-network-cidr 10.244.0.0/16 \
  --upload-certs

初始化完成后,配置kubectl(将生成的admin.conf复制到~/.kube/config):

mkdir -p $HOME/.kube
sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
chown $(id -u):$(id -g) $HOME/.kube/config
2. 部署负载均衡器(HAProxy+Keepalived)

负载均衡器的作用是将API Server请求分发到多个Master节点,避免单点故障。

  • 安装HAProxy(所有Master节点):
    yum install -y haproxy
    # 编辑配置文件(/etc/haproxy/haproxy.cfg)
    frontend k8s-api
      bind *:6443
      mode tcp
      default_backend k8s-api-backend
    backend k8s-api-backend
      mode tcp
      balance roundrobin
      server master1 <Master1_IP>:6443 check
      server master2 <Master2_IP>:6443 check
      server master3 <Master3_IP>:6443 check
    systemctl enable --now haproxy
    
  • 部署Keepalived(为HAProxy提供虚拟IP,避免HAProxy单点故障):
    在主Master节点(如master1)配置:
    yum install -y keepalived
    # 编辑配置文件(/etc/keepalived/keepalived.conf)
    vrrp_instance VI_1 {
      state MASTER
      interface eth0  # 根据实际网卡名称修改
      virtual_router_id 51  # 同一网络内唯一
      priority 100      # 主节点优先级高于备节点(备节点设为90)
      advert_int 2
      authentication {
        auth_type PASS
        auth_pass 1234
      }
      virtual_ipaddress {
        k8s-lb.example.com/24  # 虚拟IP(负载均衡器地址)
      }
    }
    systemctl enable --now keepalived
    
    备Master节点(master2/master3)将state改为BACKUPpriority设为90,其余配置相同。
3. 扩展Master节点

在其他Master节点上执行kubeadm join命令(初始化时生成的命令),加入控制平面集群:

kubeadm join k8s-lb.example.com:6443 \
  --token <TOKEN> \
  --discovery-token-ca-cert-hash sha256:<HASH> \
  --control-plane --certificate-key <CERT_KEY>

通过kubectl get nodes确认所有Master节点状态为Ready

四、部署etcd高可用集群

etcd是Kubernetes的核心数据库,存储集群状态、配置等信息,必须配置为高可用(建议3或5节点):

  • 若Master节点与etcd节点分离,需单独部署etcd集群(参考Kubernetes官方文档);
  • 若Master节点与etcd节点共存(默认方式),kubeadm init会自动部署3节点etcd集群(需确保Master节点数量≥3)。
    可通过以下命令检查etcd状态:
kubectl get pods -n kube-system -l app=etcd

五、部署网络插件

网络插件是Pod间通信的基础,需选择支持多节点的插件(如Calico、Flannel):

# 以Calico为例(推荐)
kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

等待网络插件部署完成(kubectl get pods -n kube-system显示所有Pod为Running)。

六、加入Worker节点

在Worker节点上安装Docker和Kubernetes工具(步骤同第二步),然后执行kubeadm join命令(初始化Master节点时生成的命令)加入集群:

kubeadm join k8s-lb.example.com:6443 \
  --token <TOKEN> \
  --discovery-token-ca-cert-hash sha256:<HASH>

通过kubectl get nodes确认Worker节点状态为Ready

七、验证高可用性

  1. Master节点故障测试:停止某个Master节点的kubelet服务,观察集群状态(kubectl get nodes),确认其他Master节点仍能提供服务;恢复后检查状态是否正常。
  2. 负载均衡器测试:停止HAProxy服务,检查虚拟IP是否能切换到备节点(ip addr show查看VIP是否绑定到备节点)。
  3. etcd故障测试:停止某个etcd节点,观察集群状态,确认etcd集群仍能正常工作(需至少3个节点正常)。

八、后续优化建议

  • 监控与告警:部署Prometheus+Grafana监控集群状态(CPU、内存、Pod状态等),配置告警规则(如Master节点宕机、etcd异常)。
  • 持久化存储:配置NFS、Ceph等分布式存储,支持StatefulSet应用的数据持久化。
  • 备份策略:定期备份etcd数据(使用etcdctl snapshot save命令),防止数据丢失。

通过以上步骤,可在CentOS环境下实现Kubernetes集群的高可用部署,确保控制平面、网络和存储的稳定性,满足生产环境需求。

0