安全关闭 Kubernetes 集群并确保下次能正常启动,需要按顺序停止组件并保留关键数据。以下是完整操作指南:


1. 安全关闭集群的步骤

(1) 先关闭所有工作节点(Worker Nodes)

# 在每个Worker节点执行
sudo systemctl stop kubelet docker/containerd
sudo shutdown -h now

(2) 再关闭控制平面(Master节点)

# 在Master节点执行
sudo kubeadm reset -f --skip-phases=remove-node  # 保留证书和配置
sudo systemctl stop kubelet etcd docker/containerd
sudo shutdown -h now

2. 关键数据保留位置

以下数据默认会被保留,无需手动备份:
| 数据 | 位置 |
|——|——|
| 集群证书 | /etc/kubernetes/pki/ |
| etcd数据 | /var/lib/etcd/ |
| kubeconfig | /etc/kubernetes/admin.conf |
| 网络插件配置 | /etc/cni/net.d/ |


3. 下次启动集群的正确顺序

(1) 先启动Master节点

sudo systemctl start etcd docker kubelet
watch kubectl get pods -n kube-system  # 等待控制平面就绪

(2) 再启动Worker节点

sudo systemctl start docker kubelet

(3) 验证集群状态

kubectl get nodes  # 所有节点应显示Ready
kubectl get pods -A  # 检查核心组件运行状态

4. 特殊情况处理

(1) 如果节点无法加入

# 在Worker节点重新生成join命令
kubeadm token create --print-join-command

(2) 如果etcd启动失败

sudo etcdctl --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 \
  endpoint health

(3) 如果网络插件异常

kubectl apply -f /etc/kubernetes/manifests/calico.yaml  # 根据实际CNI插件调整

5. 长期维护建议

  1. 定期备份关键数据
    sudo tar czvf k8s-backup-$(date +%F).tar.gz \
      /etc/kubernetes/pki/ \
      /var/lib/etcd/ \
      /etc/kubernetes/admin.conf
  2. 使用高可用架构:部署多Master节点避免单点故障
  3. 记录集群状态
    kubectl get all -A -o wide > cluster-state-$(date +%F).log

6. 完整关闭/启动流程示例

# 关闭集群
for node in worker1 worker2 master; do
  ssh $node "sudo systemctl stop kubelet docker; sudo shutdown -h now"
done

# 启动集群
ssh master "sudo systemctl start etcd docker kubelet"
ssh worker1 "sudo systemctl start docker kubelet"
ssh worker2 "sudo systemctl start docker kubelet"

通过以上方法,您可以安全关闭集群并在下次启动时恢复所有服务。关键点在于:

  1. 按顺序关闭(Worker → Master)
  2. 保留证书和数据目录
  3. 按顺序启动(Master → Worker)
作者:严锋  创建时间:2025-05-05 20:39
最后编辑:严锋  更新时间:2025-05-09 15:48