kubernetes - 如何优雅地从 Kubernetes 中删除节点?

标签 kubernetes

我想扩大/缩小机器数量,以增加/减少 Kubernetes 集群中的节点数量。当我添加一台机器时,我能够成功地将其注册到 Kubernetes;因此,一个新节点将按预期创建。不过后面如何顺利关机我就不太清楚了。一个好的工作流程是:

  1. 将与我要关闭的机器相关的节点标记为不可调度;
  2. 在其他节点中启动正在该节点中运行的 Pod;
  3. 正常删除节点中正在运行的 Pod;
  4. 删除节点。

如果我理解正确的话,即使 kubectl rain ( discussion ) 也没有达到我的预期,因为它在删除 Pod 之前不会启动 Pod(它依赖于复制 Controller 来启动)之后的 Pod 可能会导致停机)。我错过了什么吗?

我应该如何正确关闭机器?

最佳答案

列出节点并获取<node-name>您想要排空或(从集群中删除)

kubectl get nodes

1)首先排空节点

kubectl drain <node-name>

您可能必须忽略计算机中的守护进程集和本地数据

kubectl drain <node-name> --ignore-daemonsets --delete-local-data

2) 编辑节点的实例组(仅当您使用 kops 时)

kops edit ig nodes

将 MIN 和 MAX 大小设置为 -1 只需保存文件(无需执行任何额外操作)

您仍然可能会在耗尽的节点中看到一些与守护进程集相关的 pod,例如网络插件、用于日志的 Fluentd、kubedns/coredns 等

3)最后删除节点

kubectl delete node <node-name>

4)在 s3 中提交 KOPS 的状态:(仅当您使用 kops 时)

kops update cluster --yes

或者(如果您使用的是 kubeadm)

如果您正在使用 kubeadm 并希望将机器重置为运行之前的状态 kubeadm join然后运行

kubeadm reset

关于kubernetes - 如何优雅地从 Kubernetes 中删除节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35757620/

相关文章:

kubernetes - 如何在 Kubernetes 上的 Keycloak Operator 部署中使用自定义主题?

kubernetes - 按需部署临时卷并在Pod之间共享

kubernetes - 如何使用 "kubectl"CLI 在 pod 内挂载卷

node.js - K8s 在 Mac OS 上连接到 Cassandra 时出现问题(通过 Node.js)

kubernetes - 无法将更改应用于 gCloud Kubernetes 引擎中与 ReadWriteOnce PV 绑定(bind)的部署?

docker - 在现有k8s集群上预取docker镜像

kubernetes - 在kubernetes中创建持久卷声明时不应用null终结器

mysql - 如何使用 kubernetes 从 mysqldump 恢复转储文件?

raspberry-pi - 覆盆子pi上kubernetes上的gitlab-runner-找不到容器 “helper”

google-compute-engine - 创建 TLS 入口资源时如何(重新)使用现有的静态 IP 地址?