删除命名空间一直处于Terminating
通常删除命名空间或者其他资源一直处于Terminating状态,是由于资源调度到的节点处于NotReady状态,需要将节点重新加入到集群使其状态变为Ready状态才能解决问题,当node重新加入处于Ready状态后,资源会自动顺利删除
查看节点状态是否是NotReady状态
运行如下命令查看node信息
kubectl get nodes
- 查看STATUS列,是否有节点是NotReady状态,并看一直处于Terminating状态的命名空间下是否有资源调度到NotReady状态节点上,如果是多半是这个原因导致的
查看节点详细信息
运行如下命令查看节点详情
kubectl get node 节点名称 -o yaml
-
检查是否被打上污点,当节点出现异常或者资源不足时,K8s系统会为节点打上相对应的污点,如下污点
-
node.kubernetes.io/disk-pressure:磁盘压力污点,当可使用磁盘空间低于15%时将打上此污点,这个百分比是可以在部署K8s集群时设置的
-
node.kubernetes.io/unreachable:节点失联,当节点网络出现问题时会导致节点失联
-
-
除上面说的两个污点外还有很多K8s系统使用的污点,可以翻阅官方文档了解
从上面可以看到节点被打上了node.kubernetes.io/unreachable污点,表明节点网络原因导致的NotReady,因此需要排查集群网络是否有问题
查看集群组件是否正常运行
运行如下命令检查kube-system命名空间下pod是否正常运行
kubectl get pods -n kube-system
- 如果有运行不正常的pod,需要查看日志,了解异常原因并解决
集群通过https://gitee.com/open-hand/kubeadm-ha.git工具拉起。如果上述没有发现问题,还可以查看K8s集群的组件是否正常运行
docker ps -a
- 查看所有docker容器,检查K8s集群组件是否正常,可以发现k8s_lb-nginx_lb-nginx容器异常退出
查看k8s_lb-nginx_lb-nginx容器日志
docker logs -f -n 500 9c9c8ad02ae2
-
查看容器日志发现8081端口被占用,导致k8s_lb-nginx_lb-nginx无法启动
-
此K8s集群使用nginx作为负载均衡,因此k8s_lb-nginx_lb-nginx无法启动会导致负载均衡无法进行,也无法完成节点正常启动运行,因此需要释放8081端口占用
检查端口占用情况
找到占用8081端口的进程
netstat -anp | grep 8081
根据进程号查看进程详细信息
ps -ef | grep 2682
- 通过进程详细信息可以知道进程是如何产生,妥善处理此进程与K8s系统占用端口的冲突
总结
当处理好端口占用问题后,k8s_lb-nginx_lb-nginx容器正常运行,节点重新加入集群,处于Terminating状态资源正常删除。导致资源删除一直Terminating的原因多种多样,需要结合显现大胆猜想,小心求证。如果节点组件问题导致,可以查看https://gitee.com/open-hand/kubeadm-ha/blob/release-1.21/docs/00-%E5%AE%89%E8%A3%85%E9%A1%BB%E7%9F%A5.md给出的组件是否正常运行,是否有端口占用。如果是资源问题导致,则需要清理没用的资源,或者扩容节点