删除命名空间一直处于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给出的组件是否正常运行,是否有端口占用。如果是资源问题导致,则需要清理没用的资源,或者扩容节点

Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐