This documentation is for a release that is no longer maintained
See documentation for the latest supported version 3 or the latest supported version 4.6.2. 操作节点
作为管理员,您可以执行若干任务来提高集群的效率。
6.2.1. 了解如何撤离节点上的 pod 复制链接链接已复制到粘贴板!
通过撤离 pod,您可以迁移给定的一个或多个节点上的所有或选定 pod。
您只能撤离由复制控制器支持的 pod。复制控制器在其他节点上创建新 pod,并从指定节点移除现有的 pod。
裸机 pod(即不由复制控制器支持的 pod)默认情况下不受影响。您可以通过指定 pod 选择器来撤离一小部分 pod。pod 选择器基于标签,因此带有指定标签的所有 pod 都将被撤离。
流程
在执行 pod 驱除前,标记不可调度的节点。
将节点标记为不可调度:
oc adm cordon <node1>
$ oc adm cordon <node1>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
node/<node1> cordoned
node/<node1> cordoned
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查节点状态为
Ready,SchedulingDisabled
:oc get node <node1>
$ oc get node <node1>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
NAME STATUS ROLES AGE VERSION <node1> Ready,SchedulingDisabled worker 1d v1.24.0
NAME STATUS ROLES AGE VERSION <node1> Ready,SchedulingDisabled worker 1d v1.24.0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用以下方法之一驱除 pod:
在一个或多个节点上驱除所有或选定的 pod:
oc adm drain <node1> <node2> [--pod-selector=<pod_selector>]
$ oc adm drain <node1> <node2> [--pod-selector=<pod_selector>]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
--force
选项强制删除裸机 pod。设为true
时,即使存在不由复制控制器、副本集、作业、守护进程设置或有状态设置管理的 pod,也会继续执行删除:oc adm drain <node1> <node2> --force=true
$ oc adm drain <node1> <node2> --force=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
--grace-period
以秒为单位设置一个期限,以便每个 pod 能够安全地终止。如果为负,则使用 pod 中指定的默认值:oc adm drain <node1> <node2> --grace-period=-1
$ oc adm drain <node1> <node2> --grace-period=-1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 忽略由守护进程集管理的 pod,将
--ignore-daemonsets
标记设为true
:oc adm drain <node1> <node2> --ignore-daemonsets=true
$ oc adm drain <node1> <node2> --ignore-daemonsets=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
--timeout
标记来设置在放弃前要等待的时长。值为0
时设定无限时长:oc adm drain <node1> <node2> --timeout=5s
$ oc adm drain <node1> <node2> --timeout=5s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 即使存在使用
emptyDir
卷的 pod,将--delete-emptydir-data
标志设为true
,也会删除 pod。节点排空时会删除本地数据:oc adm drain <node1> <node2> --delete-emptydir-data=true
$ oc adm drain <node1> <node2> --delete-emptydir-data=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 把
--dry-run
选项设为true
,它会列出将要迁移的对象而不实际执行撤离:oc adm drain <node1> <node2> --dry-run=true
$ oc adm drain <node1> <node2> --dry-run=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以使用
--selector=<node_selector>
选项来撤离选定节点上的 pod,而不指定具体的节点名称(如<node1> <node2>
)。
完成后将节点标记为可调度。
oc adm uncordon <node1>
$ oc adm uncordon <node1>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.2. 了解如何更新节点上的标签 复制链接链接已复制到粘贴板!
您可以更新节点上的任何标签。
节点标签不会在节点删除后保留,即使机器备份了节点也是如此。
对 MachineSet
对象的任何更改都不会应用到机器集拥有的现有机器。例如,对现有 MachineSet
对象编辑或添加的标签不会传播到与机器集关联的现有机器和节点。
以下命令在节点上添加或更新标签:
oc label node <node> <key_1>=<value_1> ... <key_n>=<value_n>
$ oc label node <node> <key_1>=<value_1> ... <key_n>=<value_n>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
oc label nodes webconsole-7f7f6 unhealthy=true
$ oc label nodes webconsole-7f7f6 unhealthy=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 提示您还可以应用以下 YAML 来应用标签:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下命令更新命名空间中的所有 pod:
oc label pods --all <key_1>=<value_1>
$ oc label pods --all <key_1>=<value_1>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
oc label pods --all status=unhealthy
$ oc label pods --all status=unhealthy
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.3. 了解如何将节点标记为不可调度或可以调度 复制链接链接已复制到粘贴板!
默认情况下,具有 Ready
状态的健康节点被标记为可以调度,这意味着您可以在节点上放置新 pod。如果手动将节点标记为不可调度,则会阻止在该节点上调度任何新的 pod。节点上的现有 pod 不受影响。
以下命令将一个或多个节点标记为不可调度:
输出示例
oc adm cordon <node>
$ oc adm cordon <node>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例如:
oc adm cordon node1.example.com
$ oc adm cordon node1.example.com
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
node/node1.example.com cordoned NAME LABELS STATUS node1.example.com kubernetes.io/hostname=node1.example.com Ready,SchedulingDisabled
node/node1.example.com cordoned NAME LABELS STATUS node1.example.com kubernetes.io/hostname=node1.example.com Ready,SchedulingDisabled
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下命令将当前不可调度的一个或多个节点标记为可以调度:
oc adm uncordon <node1>
$ oc adm uncordon <node1>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,您也可以使用
--selector=<node_selector>
选项将选定的节点标记为可以调度或不可调度,而不指定具体的节点名称(如<node>
)。
6.2.4. 删除节点 复制链接链接已复制到粘贴板!
6.2.4.1. 从集群中删除节点 复制链接链接已复制到粘贴板!
当您使用 CLI 删除节点时,节点对象会从 Kubernetes 中删除,但该节点上存在的 pod 不会被删除。任何未由复制控制器支持的裸机 pod 都无法从 OpenShift Container Platform 访问。由复制控制器支持的 Pod 会重新调度到其他可用的节点。您必须删除本地清单 pod。
流程
要从 OpenShift Container Platform 集群中删除节点,请编辑适当的 MachineSet
对象:
如果您在裸机上运行集群,则无法通过编辑 MachineSet
对象来删除节点。机器集仅在集群与云供应商集成时才可用。相反,您必须在手动删除前取消调度并排空节点。
查看集群中的机器集:
oc get machinesets -n openshift-machine-api
$ oc get machinesets -n openshift-machine-api
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 机器集以 <clusterid>-worker-<aws-region-az> 的形式列出。
扩展机器集:
oc scale --replicas=2 machineset <machineset> -n openshift-machine-api
$ oc scale --replicas=2 machineset <machineset> -n openshift-machine-api
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者:
oc edit machineset <machineset> -n openshift-machine-api
$ oc edit machineset <machineset> -n openshift-machine-api
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 提示您还可以应用以下 YAML 来扩展机器集:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.2.4.2. 从裸机集群中删除节点 复制链接链接已复制到粘贴板!
当您使用 CLI 删除节点时,节点对象会从 Kubernetes 中删除,但该节点上存在的 pod 不会被删除。任何未由复制控制器支持的裸机 pod 都无法从 OpenShift Container Platform 访问。由复制控制器支持的 Pod 会重新调度到其他可用的节点。您必须删除本地清单 pod。
流程
通过完成以下步骤,从裸机上运行的 OpenShift Container Platform 集群中删除节点:
将节点标记为不可调度:
oc adm cordon <node_name>
$ oc adm cordon <node_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 排空节点上的所有 pod:
oc adm drain <node_name> --force=true
$ oc adm drain <node_name> --force=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果节点离线或者无响应,此步骤可能会失败。即使节点没有响应,它仍然在运行写入共享存储的工作负载。为了避免数据崩溃,请在进行操作前关闭物理硬件。
从集群中删除节点:
oc delete node <node_name>
$ oc delete node <node_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 虽然节点对象现已从集群中删除,但它仍然可在重启后或 kubelet 服务重启后重新加入集群。要永久删除该节点及其所有数据,您必须弃用该节点。
- 如果您关闭了物理硬件,请重新打开它以便节点可以重新加入集群。