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

Raf*_*ael 36 kubernetes

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

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

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

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

Ami*_*ait 36

列出节点并获取<node-name>要耗尽或(从集群中删除)的节点

kubectl get nodes
Run Code Online (Sandbox Code Playgroud)

1)首先排空节点

kubectl drain <node-name>
Run Code Online (Sandbox Code Playgroud)

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

kubectl drain <node-name> --ignore-daemonsets --delete-local-data
Run Code Online (Sandbox Code Playgroud)

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

kops edit ig nodes
Run Code Online (Sandbox Code Playgroud)

将MIX和MAX大小设置为-1。只需保存文件(无需执行其他任何操作)

您仍然可能会在耗尽节点中看到一些与守护程序相关的pod,例如网络插件,流利的日志,kubedns / coredns等。

3)最后删除节点

kubectl delete node <node-name>
Run Code Online (Sandbox Code Playgroud)

4)在s3中为KOPS提交状态:

kops update cluster --yes
Run Code Online (Sandbox Code Playgroud)


F. *_*Kam 22

在主节点上

找到节点

kubectl get nodes
Run Code Online (Sandbox Code Playgroud)

沥干

kubectl drain nodetoberemoved
Run Code Online (Sandbox Code Playgroud)

删除它

kubectl delete node nodetoberemoved
Run Code Online (Sandbox Code Playgroud)

在工作节点(nodetoberemoved)上。从节点中删除加入/初始化设置

kubeadm reset
Run Code Online (Sandbox Code Playgroud)


小智 9

请按照以下步骤从 Kubernetes 中删除工作节点:

  1. 列出集群中的所有节点
kubectl get nodes
Run Code Online (Sandbox Code Playgroud)
  1. 排水节点准备维护
kubectl drain <node-name> --ignore-daemonsets
Run Code Online (Sandbox Code Playgroud)
  1. 按节点名称删除节点
kubectl delete node <node-name>
Run Code Online (Sandbox Code Playgroud)


小智 5

拉斐尔。 kubectl drain确实像你描述的那样工作。有一些停机时间,就像机器崩溃一样。

你能描述一下你的设置吗?您有多少个副本,并且您是否已配置为无法处理单个副本的任何停机时间?

  • 我们没有使用drain,而是将节点标记为不可调度,获取其部署列表并强制对其每个部署进行重新部署(通过更改注释)。由于节点是不可调度的,Kubernetes 会自动分配其他节点中的 Pod。这个解决方案对我们来说更容易。 (4认同)
  • 找到了答案,尽管我没有看到它在 --help 输出中列出: kubectl delete node &lt;nodename&gt; (2认同)