问题描述
使用 kubeadm
v1.19.9 创建的 3 个节点 Kubernetes 集群。节点是 VM(在 Ubuntu 20.04 上使用 KVM 管理程序)。
这个Kubernetes集群的用途是用于Kubernetes的开发和练习。我想停止并重新启动它停止的集群。与 minikube 或 microk8s 中可用的 stop
和 start
命令相同。
编辑:澄清问题以避免建议重复的帖子。我正在寻找一种优雅的解决方案来停止和重新启动同一个集群。不要破坏/重置/卸载集群。
我无法从各种网络搜索中找到简单的解决方案。有一些解决方案建议拆除集群,这不是我在这里的用例。 3 年前的答案 proper shutdown of a kubernetes cluster 更接近我想要的,但这听起来很复杂。另一个解决方案 How to Setup & Recover a Self-hosted Kubeadm Kubernetes Cluster After Reboot 没有很好地解释所使用的原理。
编辑 (2021-04-11):Kubernetes 1.21 release notes:
Kubelet Graceful Node Shutdown 功能升级到 Beta 并默认启用。
kubernetes/enhancements Graceful node shutdown #2000
增强目标(哪个目标等于哪个里程碑):
- Alpha 发布目标 (1.20)
- 测试版发布目标 (1.21)
- 稳定版本目标 (1.23)
解决方法
总结:
k8s 应该能够处理关机。可能无法处理的是您运行的应用程序/容器 - 只需确保容器自行启动并且不需要手动干预,您应该没问题。
我在关于将 etcd 数据刷新到磁盘的评论中提到过,但是(经过一些研究)这应该不是必需的,因为 etcd 自己完成并实现了强一致性模型以确保它不会丢失数据。但这并不意味着您不应该进行备份 - 最好有一个备份并且永远不要使用它,然后在需要时不要使用它。
How to Setup & Recover a Self-hosted Kubeadm Kubernetes Cluster After Reboot 中提到的解决方案仅在您使用 SelfHosting 时才有意义。
此外(为方便起见)确保所有配置在重新启动之间保持不变,例如交换分区应该被禁用,如果你只运行 swapoff -a
,它不会在重启后持续存在 - 最好在 fstab 中进行更改,以便在重启时你不必再次手动禁用任何东西。
这里有一些链接: