溫馨提示×

Debian如何實現Kubernetes高可用部署

小樊
46
2025-09-19 16:04:59
欄目: 智能運維

Debian環境下實現Kubernetes高可用部署指南

一、環境準備

1. 節點規劃

  • 控制平面節點(Master):至少3臺(實現etcd和kube-apiserver的高可用);
  • 工作節點(Worker):根據業務負載需求添加(至少2臺);
  • 負載均衡器:1臺(用于分發kube-apiserver流量至多個Master節點,推薦HAProxy或Nginx);
  • 操作系統:Debian 12(Bookworm)及以上(確保內核版本≥5.10,支持容器運行時)。

2. 基礎配置

  • 網絡互通:所有節點配置靜態IP,通過/etc/hosts文件或DNS實現主機名解析(如192.168.1.10 master01、192.168.1.11 master02);
  • 關閉Swap:執行sudo swapoff -a禁用Swap,并注釋/etc/fstab中的Swap條目(Kubernetes要求);
  • 防火墻設置:允許Kubernetes關鍵端口(如API Server的6443/tcp、kubelet的10250/tcp、etcd的2379/tcp/2380/tcp);
  • 容器運行時:安裝containerd(推薦)或Docker,配置為開機自啟(參考官方文檔調整runtime參數,如/etc/containerd/config.toml)。

二、安裝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高可用

  • 多實例部署:etcd默認隨Master節點部署,3個Master節點對應3個etcd實例(Raft協議保證一致性);
  • 證書管理:使用kubeadm init生成的證書(位于/etc/kubernetes/pki/etcd),確保證書有效期(默認1年);
  • 備份策略:定期備份etcd數據(使用etcdctl snapshot save命令),存儲至異地。

2. kube-apiserver高可用

  • 負載均衡器配置:使用HAProxy或Nginx作為前端負載均衡器,將192.168.1.100:6443(VIP)的流量分發至所有Master節點的6443端口;
  • 健康檢查:配置負載均衡器的健康檢查(如/healthz端點),自動剔除故障節點;
  • VIP漂移:可選Keepalived實現VIP的自動漂移(當主負載均衡器故障時,備節點接管VIP)。

3. 控制平面組件高可用

  • kube-controller-manager和kube-scheduler:通過--leader-elect=true參數(默認開啟)實現Leader選舉,同一時間僅一個實例處理請求,故障時自動切換。

八、驗證集群高可用性

  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狀態。

九、后續維護

  • 監控:部署Prometheus+Grafana監控集群資源(CPU、內存、Pod狀態)和etcd性能;
  • 日志:使用EFK(Elasticsearch+Fluentd+Kibana)或Loki收集集群日志;
  • 備份:定期備份etcd數據(etcdctl snapshot save /backup/etcd-$(date +%F).snap)和控制平面配置;
  • 升級:使用kubeadm upgrade命令滾動升級集群組件,確保兼容性。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女