k8s 驱逐节点

k8s 驱逐节点

转载: https://docs.rancher.cn/docs/rke/upgrades/configuring-strategy/_index/#%E9%A9%B1%E9%80%90%E8%8A%82%E7%82%B9

驱逐节点

默认情况下,升级节点前需要使用kubectl cordon命令将节点标记为“不可用”,这个标记的目的是防止在节点在升级的过程中因为被分配到新的 pods 或者流量而中断。完成升级后,您需要使用kubectl uncordon命令将节点重新标记为“可用”,此时可以将 pods 和流量分配到该节点上。该操作不会对节点上已有的 pods 造成影响。

1
2
kubectl cordon node_name
kubectl uncordon node_name

除了将节点标记为“不可用”外,您也可以使用kubectl drain命令,在升级节点前将节点内的所有 pod 驱逐到其他节点上,并且将其标记为“不可用”,确保这个节点内在升级完成之前不会有正在运行的 pods。kubectl drain命令会导致节点内所有的 pods 被驱逐。

1
kubectl drain --ignore-daemonsets node_name  

请参考Kubernetes 官方文档,了解驱逐节点的注意事项。

注意:drain的默认值是false,如果将它的值改为true,会导致 worker 节点在升级之前被驱逐,无法升级 worker 节点。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
upgrade_strategy:
  max_unavailable_worker: 10%
  max_unavailable_controlplane: 1
  drain: false
  node_drain_input:
    force: false
    ignore_daemonsets: true
    delete_local_data: false
    grace_period: -1 // grace period specified for each pod spec will be used
    timeout: 60
comments powered by Disqus