正确关闭 kubernetes 集群

正确关闭 kubernetes 集群

想象一下以下场景:

  • 您在数据中心运行一个使用 kubeadm 部署的 kubernetes 集群。
  • 它由一个主节点(以静态 pod 形式运行 etcd,由 kubeadm 部署)和 3 个工作节点组成
  • 节点作为在 vmware 上运行的虚拟机

今天,你打开电子邮件,收到通知说数据中心将搬迁到新位置。物理服务器将关闭,搬迁到新位置并再次开机。

您的 kubernetes 集群的正确关闭程序是什么(不会弄乱您的 etcd 数据)?

这是我做的:

  • 首先停止主服务器(包括 etcd ofc),以防止当我关闭工作节点时,pod 被重新安排到其他节点。
  • 停止每个工作节点

迁移后:

  • 首先启动工作节点
  • 接下来启动主节点

完成此操作后,我最终遇到了以下两种情况之一:

  • etcd 数据损坏,etcd pod 因错误退出
  • 收到如下错误:“无法在节点“worker-002”上完成操作:对象已被修改;请将更改应用到最新版本并重试”。我的日志中充斥着这些信息。

如何防止这种情况发生?我认为在 HA 模式下运行 etcd 不会有帮助,因为所有 etcd 节点也必须同时关闭,因此最终会遇到与单节点场景类似的情况。我感觉 Etcd 与其他 K/V 存储(如 Consul)相比相当……脆弱。

答案1

你需要在 master 上停止

  • kupe-api 服务器
  • kube-调度程序
  • kube-控制器
  • kubelet(如果适用)
  • kube-proxy(如果适用)

如果你有联邦,也请停止 federation-apiserver

运行 etcd 的备份(快照)并在完成后停止 etcd

对于每个节点停止

  • 库贝莱特
  • kube-proxy

Etcd 与 consul 一样健壮,什么意思instable?!

虽然您有 etcd 数据,但恢复时它不会立即生效...您应该继续阅读kubernetes 上的备份

答案2

事实上,etcd 的基于日志的方法相当有弹性,但为了安全起见,您还是应该在迁移/关闭之前进行备份。如果 etcd 出现问题,只需恢复备份即可。

由于您将重新启动整个集群,因此执行的顺序并不那么重要,所有容器都必须重新启动,这意味着 kubelet 必须连接到一个有效的 API。

你从哪里得到这种对 etcd 不稳定的印象呢,我不知道。

相关内容