1 前言

我们在使用kubernetes时可能会面临这样的场景:

  1. 有一个开发环境,想连接集群内的多节点服务,但这些服务的负载均衡是在客户端解决的(客户端需要知道所有节点的IP端口并分别连接,如Redis-Cluster),这样NodePortIngress都不好使了,需要将开发机接入kubernetes集群,但又不想开发机器上被分配Pod
  2. 有一个Node机器有点问题,想把它上面的Pod转移走,等解决了再让他继续工作。
  3. 有一个Node机器快坏了,把它从集群中剔除吧。 在面临以上场景时,就需要知道如何操作kubernetes的调度策略,达成目标了。

2 方法

可以使用以下三个命令来指定Node停止调度:

命令作用对Node的影响Pod的影响
cordon停止调度,临时从集群隔离状态标记为SchedulingDisabledNode中已有Pod不受影响;再创建的Pod不会调度到该Node
drain驱逐节点,先不可调度,再排干状态标记为SchedulingDisabledNode中已有Pod会在其他Node中重新创建
delete删除节点删除Node中已有Pod会在其他Node中重新创建