本文对k8s中的集群管理进行总结,参见文档<权威指南>。
Node管理
K8S集群中的资源是由Node提供。这里将介绍Node的隔离和扩容。
-Node隔离
在硬件升级和维护的过程中,可能需要隔离某些Node使其不被k8s调度。K8s中提供2种方式让Node脱离调度和恢复调度。
- 指定spec.unschedulable
设置spec.unschedulable为true便可以隔离Node,使其不受k8s调度。可以显式在yaml文件中设置spec.unschedulable为true并使用kubectl replace -f *.yaml来更新Node。
apiVersion
也可以直接使用kubectl patch命令来指定。
$ kubectl patch node k8s-node-1 -p '{"spec":{"unschedulable":true}}'
这样查看Node时,其status会变为SchedulingDisabled。
$ kubectl get nodes
NAME STATUS AGE
k8s-node-1 Ready,SchedulingDisabled 1h
注意:将Node隔离后,其上已经运行的Pod并不受影响,管理员需要手动停止这些Pod。
2. 使用kubectl命令cordon和uncordon
使用kubectl cordon/uncordon node_name来隔离和恢复Node。
kubectl cordon k8s-node-1
kubectl uncordon k8s-node-1
-Node扩容
在k8s集群中添加新的Node非常简单,需要在新的Node上安装Docker,kubelet和kube-proxy服务,然后配置kubelet和kube-proxy的启动参数,将Master URL指定为当前k8s集群Master的地址,最后启动这些服务。通过kubelet默认的自动注册机制,新的Node将会自动加入k8s集群。