2.9. 撤离节点上的 pod
通过撤离 pod,您可以迁移给定节点中的所有或选定 pod。节点必须首先标记为不可调度(unschedulable),才能执行 pod 撤离。
只有由复制控制器支持的 pod 可以撤离;复制控制器在其他节点上创建新 pod,并从指定节点移除现有的 pod。裸机 pod(即不由复制控制器支持的 pod)默认情况下不受影响。您可以通过指定 pod 选择器来撤离一小部分 pod。pod 选择器基于标签,因此具有指定标签的所有 pod 将被撤离。
撤离节点上的所有或选定 pod:
$ oc adm drain <node> [--pod-selector=<pod_selector>]
您可以使用 --force
选项强制删除裸机 pod。设为 true
时,即使存在不由复制控制器、ReplicaSet、作业、daemonset 或 StatefulSet 管理的 pod,也会继续执行删除:
$ oc adm drain <node> --force=true
您可以使用 --grace-period
设置一个期限(以秒为单位),以便每个 pod 能够安全终止。如果为负,则使用 pod 中指定的默认值:
$ oc adm drain <node> --grace-period=-1
您可以使用 --ignore-daemonset
并将其设置为 true
以忽略 daemonset-managed pod:
$ oc adm drain <node> --ignore-daemonsets=true
您可以使用 --timeout
来设置放弃前要等待的时长。值为 0
时设定无限时长:
$ oc adm drain <node> --timeout=5s
您可以使用 --delete-local-data
并将其设置为 true
以继续删除,即使存在使用 emptyDir 的 pod(在节点排空时会删除本地数据):
$ oc adm drain <node> --delete-local-data=true
要列出将要迁移的对象而不实际执行撤离,请使用 --dry-run
选项并将其设置为 true
:
$ oc adm drain <node> --dry-run=true
您可以使用 --selector=<node_selector>
选项将 pod 撤离与选择器匹配的节点上,而不是指定具体的节点名称。