安全关闭 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. 长期维护建议
- 定期备份关键数据:
sudo tar czvf k8s-backup-$(date +%F).tar.gz \ /etc/kubernetes/pki/ \ /var/lib/etcd/ \ /etc/kubernetes/admin.conf
- 使用高可用架构:部署多Master节点避免单点故障
- 记录集群状态:
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"
通过以上方法,您可以安全关闭集群并在下次启动时恢复所有服务。关键点在于:
- 按顺序关闭(Worker → Master)
- 保留证书和数据目录
- 按顺序启动(Master → Worker)
作者:严锋 创建时间:2025-05-05 20:39
最后编辑:严锋 更新时间:2025-05-09 15:48
最后编辑:严锋 更新时间:2025-05-09 15:48