启动/停止由 kubeadm 创建的本地 dev kubernetes 集群如 microk8s 或 minikube

问题描述

使用 kubeadm v1.19.9 创建的 3 个节点 Kubernetes 集群。节点是 VM(在 Ubuntu 20.04 上使用 KVM 管理程序)。

这个Kubernetes集群的用途是用于Kubernetes的开发和练习。我想停止并重新启动它停止的集群。与 minikube 或 microk8s 中可用的 stopstart 命令相同。

编辑:澄清问题以避免建议重复的帖子。我正在寻找一种优雅的解决方案来停止和重新启动同一个集群。不要破坏/重置/卸载集群。

我无法从各种网络搜索中找到简单的解决方案。有一些解决方案建议拆除集群,这不是我在这里的用例。 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 中进行更改,以便在重启时你不必再次手动禁用任何东西。


这里有一些链接:

Backing up an etcd cluster

etcd disaster recovery

Permanently Disable Swap for Kubernetes Cluster