在硬件升级、硬件维护等情况下,我们需要将某些Node进行隔离,脱离Kubernetes集群的调度范围。Kubernetes提供了一种机制,即可以将Node纳入调度范围,也可以将Node脱离调度范围。
需要注意的是,将某个 Node 脱离调度范围时,在其上运行的pod并不会自动停止,管理员需要手动停止在该 Node 上运行的 Pod。
这里最好使用 Pod驱逐, 将要升级节点的pod驱逐到其他节点,比停止pod更人性化一些。
驱逐node1上的pod
1 |
kubectl drain 192.168.66.188 --delete-local-data --ignore-daemonsets --force |
- –delete-local-data: 即使pod使用了emptyDir也删除
- –ignore-daemonsets: 忽略deamonset控制器的pod,如果不忽略,deamonset控制器控制的pod被删除后可能马上又在此节点上启动起来,会成为死循环;
- –force: 不加force参数只会删除该NODE上由ReplicationController, ReplicaSet, DaemonSet,StatefulSet or Job创建的Pod,加了后还会删除’裸奔的pod’(没有绑定到任何replication controller)
方法一 (可能系统会报错,不允许进行隔离,不建议用这个)
1 2 3 4 5 6 7 8 9 10 |
创建配置文件unschedule_node.yaml,在spec部分指定unschedulable为true: apiVersion: V1 kind: Node metadata: name: k8s-node1 lables: kubernetes.io/hostname: k8s-node1 spec: unschedulable: true |
然后,通过 kubectl replace 命令完成对 Node 状态的修改:
1 2 3 4 |
#隔离 kubectl replace -f unschedule_node.yaml #驱逐 kubectl drain 192.168.66.188 --delete-local-data --ignore-daemonsets --force |
查看 Node 的状态,可以观察到在Node的状态中增加了一项SchedulingDisabled:
1 2 3 4 5 |
kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-node1 Ready,SchedulingDisabled <none> 21d v1.10.4 k8s-node2 Ready <none> 21d v1.10.4 k8s-node3 Ready <none> 21d v1.10.4 |
对于后续创建的pod,系统将不会再向该 Node 进行调度。
方法二
另一种方法是不使用配置文件,直接使用 kubectl patch命令完成:
1 2 3 4 5 6 7 8 |
#隔离 kubectl patch node k8s-node1 -p '{"spec":{"unschedulable":true}}' #驱逐 kubectl drain 192.168.66.188 --delete-local-data --ignore-daemonsets --force #恢复隔离 kubectl patch node k8s-node1 -p '{"spec":{"unschedulable":false}}' |
1 2 3 |
需要注意的是,将某个 Node 脱离调度范围时,在其上运行的pod并不会自动停止,管理员需要手动停止在该 Node 上运行的 Pod。 同样,如果需要将某个 Node 重新纳入集群调度范围,则将 unschedulable 设置为 false,再次执行 kubectl replace 或 kubectl patch 命令就能恢复系统对改 Node 的调度。 |
方法三
1 |
kubectl的子命令cordon和uncordon也用于实现将Node进行隔离和恢复调度的操作。 |
例如,使用kubectl cordon对某个Node进行隔离调度操作。
1 2 3 4 5 6 |
#隔离 kubectl cordon k8s-node1 #驱逐 kubectl drain 192.168.66.188 --delete-local-data --ignore-daemonsets --force #恢复隔离 kubectl uncordon k8s-node1 |
- 本文固定链接: https://www.yoyoask.com/?p=4241
- 转载请注明: shooter 于 SHOOTER 发表