以下是基于kubeadm的Kubernetes 1.29高可用集群部署指南,包含关键步骤和网络插件选择建议:


一、架构设计

  1. 高可用模式

    • 堆叠式etcd拓扑(推荐):每个控制平面节点运行etcd和kube-apiserver
    • 最小配置:3台控制平面节点 + 2台工作节点 + 1台负载均衡器(如HAProxy)
  2. 节点角色分配

    # 控制平面节点 x3 (2C4G+)
    k8s-master-01, k8s-master-02, k8s-master-03
    
    # 工作节点 xN (按需配置)
    k8s-worker-01, k8s-worker-02
    
    # 负载均衡器 (1C2G+)
    k8s-lb
    


二、前置准备

1. 所有节点执行
# 关闭Swap
sudo swapoff -a
sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab

# 设置内核参数
cat <<EOF | sudo tee /etc/modules-load.d/k8s.conf
br_netfilter
EOF

cat <<EOF | sudo tee /etc/sysctl.d/k99-kubernetes.conf
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF
sudo sysctl --system

# 安装容器运行时(containerd为例)
sudo apt-get install containerd
sudo mkdir -p /etc/containerd
containerd config default | sudo tee /etc/containerd/config.toml
sudo systemctl restart containerd

2. 负载均衡器配置(HAProxy示例)
# /etc/haproxy/haproxy.cfg
frontend k8s-api
    bind *:6443
    mode tcp
    default_backend k8s-control-plane

backend k8s-control-plane
    mode tcp
    balance roundrobin
    server master1 192.168.1.101:6443 check
    server master2 192.168.1.102:6443 check
    server master3 192.168.1.103:6443 check


三、初始化控制平面

1. 首个主节点初始化
sudo kubeadm init \
  --control-plane-endpoint "k8s-lb:6443" \
  --upload-certs \
  --pod-network-cidr=10.244.0.0/16 \
  --kubernetes-version 1.29.0

2. 加入其他控制节点
# 根据init输出的命令加入(含证书密钥)
kubeadm join k8s-lb:6443 --token <token> \
  --discovery-token-ca-cert-hash sha256:<hash> \
  --control-plane --certificate-key <key>


四、网络插件选择与部署

插件 特点 部署命令
Calico 网络策略完善,性能优异 kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
Flannel 配置简单,适合基础场景 kubectl apply -f https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml
Cilium eBPF驱动,高级网络观测能力 需单独安装helm chart

推荐选择:生产环境优先使用Calico(支持NetworkPolicy),测试环境可用Flannel


五、工作节点加入

kubeadm join k8s-lb:6443 \
  --token <token> \
  --discovery-token-ca-cert-hash sha256:<hash>


六、验证集群状态

# 检查节点状态
kubectl get nodes -o wide

# 检查核心组件
kubectl get pods -n kube-system

# 测试DNS解析
kubectl run test --image=busybox --rm -it --restart=Never -- nslookup kubernetes.default


关键注意事项

  1. 证书管理
    # 查看证书有效期
    sudo kubeadm certs check-expiration
    

  2. 升级策略
    • 使用kubeadm upgrade plan逐步升级控制平面
    • 遵循官方版本兼容矩阵
  3. 备份恢复
    # 备份etcd
    ETCDCTL_API=3 etcdctl snapshot save snapshot.db \
      --endpoints=https://127.0.0.1:2379 \
      --cacert=/etc/kubernetes/pki/etcd/ca.crt \
      --cert=/etc/kubernetes/pki/etcd/server.crt \
      --key=/etc/kubernetes/pki/etcd/server.key
    

完整文档参考:Kubernetes官方高可用指南

更多推荐