本篇记录在日常对Kubernetes集群管理时的一些问题和解决方法。

维护Node

k8s集群运行一段时间后,有时需要对Node节点进行维护,例如进行内核或已安装软件的升级。 在进行维护之前需要禁止新的Pod调度到该节点上,同时要将该节点上的Pod驱逐到其他的Node上(DaemonSet除外)。 使用如下的命令:

1kubectl drain <node>

如果只是禁止新的Pod调度到该节点而不进行驱逐,使用如下的命令:

1kubectl cordon <node>

对Node维护完成后,使用下面的命令恢复Node的调度:

1kubectl uncordon

强制删除Pod

当使用kubectl删除一个Deployment时,发现该Deployment下的某个Pod一直处于Terminating状态,这个时候应该首先去查看Pod和容器的一些日志,有可能Pod正在等待回收某些资源。 如果最终还是无法解决,而这个Deployment已经下线了又不是很重要,可以使用下面的霸道的方式:

1kubectl delete pod <podname> --namespace=<namspacer>  --grace-period=0 --force
2warning: Immediate deletion does not wait for confirmation that the running resource has been terminated. The resource may continue to run on the cluster indefinitely.
3pod <podname>  deleted

注意上面已经打印出了警告,意思是说删除的Pod相关的容器有可能成为孤儿永远的运行在集群上,因此在删除之前可以查看一下Pod跑在哪个Node上,在强制删除Pod之后,可以到对应的Node上将docker容器手动停掉。

参考