k8s node的隔离与恢复
使用于node的硬件升级和维护,让node脱离k8s的调度范围
进行隔离时,只隔离了node,该node上运行的pod并不会自动停止,需要手动停止
1.使用yaml文件进行隔离和恢复调度(可能系统会报错,不允许进行隔离)
隔离:
vim unschedule_node.yaml
apiVersion: v1
kind: Node
metadata:
name: kubernetes-node1
labels:
kubernetes.io/hostname: kubernetes-node1
spec:
unschedulable: true
使用kubectl replace修改node的状态
kubectl replace -f unschedule_node.yaml
查看node的状态,注意SchedulingDisabled
kubectl get nodes
将unschedule_node.yaml文件种的unschedulagle: true改为unschedulagle: false后再运行yaml文件可以恢复调度
kubectl replace -f unschedule_node.yaml
查看node状态无SchedulingDisabled
kubectl get nodes
2.使用kubectl patch实现node的隔离和恢复调度,需要配置patch
隔离
kubectl patch node1 kubernetes-node1 '{"spec":{"unschedulable":true}}'
恢复调度
kubectl patch node1 kubernetes-node1 '{"spec":{"unschedulable":false}}'
3.使用cordon和uncordon进行隔离和恢复调度
[root@kubernetes k8s]# kubectl cordon kubernetes-node1
node/kubernetes-node1 cordoned
[root@kubernetes k8s]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
kubernetes Ready master 176d v1.13.3
kubernetes-node1 Ready,SchedulingDisabled <none> 176d v1.13.3
kubernetes-node2 Ready <none> 176d v1.13.3
[root@kubernetes k8s]# kubectl uncordon kubernetes-node1
node/kubernetes-node1 uncordoned
[root@kubernetes k8s]# kubectl get nodes
NAME STATUS ROLES AGE VERSION
kubernetes Ready master 176d v1.13.3
kubernetes-node1 Ready <none> 176d v1.13.3
kubernetes-node2 Ready <none> 176d v1.13.3