高可用部署的前提是确保所有节点(Master/Worker)满足以下要求:
hostnamectl set-hostname设置,修改/etc/hosts添加节点映射)。swapoff -a并修改/etc/fstab永久生效,避免影响Kubernetes调度);setenforce 0并修改/etc/selinux/config为disabled,防止权限问题);chrony或ntp,确保所有节点时间一致,避免证书过期或组件通信异常)。在所有节点上安装Docker(容器运行时)和Kubernetes工具(kubeadm、kubelet、kubectl):
# 添加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节点的高可用是Kubernetes集群稳定的核心,需通过负载均衡器和etcd集群实现:
使用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
负载均衡器的作用是将API Server请求分发到多个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
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改为BACKUP,priority设为90,其余配置相同。在其他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是Kubernetes的核心数据库,存储集群状态、配置等信息,必须配置为高可用(建议3或5节点):
kubeadm init会自动部署3节点etcd集群(需确保Master节点数量≥3)。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节点上安装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。
kubelet服务,观察集群状态(kubectl get nodes),确认其他Master节点仍能提供服务;恢复后检查状态是否正常。ip addr show查看VIP是否绑定到备节点)。etcdctl snapshot save命令),防止数据丢失。通过以上步骤,可在CentOS环境下实现Kubernetes集群的高可用部署,确保控制平面、网络和存储的稳定性,满足生产环境需求。