debian

Debian如何实现Kubernetes高可用部署

小樊
56
2025-09-19 16:04:59
栏目: 智能运维

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

一、环境准备

1. 节点规划

2. 基础配置

二、安装Kubernetes核心组件

在所有节点上执行以下操作:

  1. 添加Kubernetes APT仓库
    curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo tee /usr/share/keyrings/kubernetes-archive-keyring.gpg
    echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
    
  2. 安装kubelet、kubeadm、kubectl
    sudo apt update && sudo apt install -y kubelet kubeadm kubectl
    sudo apt-mark hold kubelet kubeadm kubectl  # 锁定版本,避免意外升级
    

三、初始化第一个Master节点(Leader)

  1. 初始化集群:使用kubeadm init命令,指定--control-plane-endpoint(负载均衡器的VIP,如192.168.1.100:6443)和--pod-network-cidr(Pod网络CIDR,如10.244.0.0/16):
    sudo kubeadm init --control-plane-endpoint=192.168.1.100:6443 --pod-network-cidr=10.244.0.0/16
    
  2. 配置kubectl:将Admin配置复制到当前用户目录:
    mkdir -p $HOME/.kube
    sudo cp -i /etc/kubernetes/admin.conf $HOME/.kube/config
    sudo chown $(id -u):$(id -g) $HOME/.kube/config
    

四、部署Pod网络插件

选择支持多Master的网络插件(如Calico),执行以下命令:

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml

等待插件Pod全部Runningkubectl get pods -n calico-system)。

五、加入其他Master节点

  1. 获取Join命令:在第一个Master节点上执行kubeadm token create --print-join-command,记录输出(包含token和CA证书哈希);
  2. 加入Master节点:在其他Master节点上执行该命令(替换为实际的IP和token):
    sudo kubeadm join 192.168.1.100:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash> --control-plane
    

六、加入Worker节点

在Worker节点上执行kubeadm join命令(使用第一个Master节点生成的token和CA证书哈希,无需--control-plane参数):

sudo kubeadm join 192.168.1.100:6443 --token <token> --discovery-token-ca-cert-hash sha256:<hash>

七、配置高可用关键组件

1. etcd高可用

2. kube-apiserver高可用

3. 控制平面组件高可用

八、验证集群高可用性

  1. 检查节点状态
    kubectl get nodes
    
    所有节点应显示Ready状态;
  2. 模拟故障
    • 停止某个Master节点的kube-apiserver服务(sudo systemctl stop kube-apiserver),观察负载均衡器是否将流量切换至其他Master;
    • 删除etcd实例(docker rm -f etcd),验证etcd集群是否自动恢复;
  3. 检查Pod状态
    kubectl get pods --all-namespaces
    
    所有Pod应保持RunningCompleted状态。

九、后续维护

0
看了该问题的人还看了