kubelet代码整理

来源:互联网 发布:有机蔬菜网络营销策划 编辑:程序博客网 时间:2024/06/14 15:17

最近由于生产环境的k8s集群经常出现如下三个问题:

  1. pod删除的时候一直处于terminating状态
  2. pod创建过后一直处于ContainerCreating状态
  3. 每个k8s的node节点存在大量Exit状态的pause容器

以下对三种现象的表现形式列以下:

  1. pod删除的时候一直处于terminating,经过排查有几个原因:1)pod对应的资源为被回收完毕(k8s在回收的过程中出错,比如:挂在的存储为释放成功,挂在的default-token为释放成功等),还有一个就是所有资源都释放成功,仍然处于terminating
  2. pod创建过程中一直处于ContainerCreating状态,报错:podSandbox changed, it will be killing and recreate it. 该原因是因为node节点上存在很多的Exit状态的pause容器(和pod相关联的,通常在statefulset使用的时候经常会遇到),导致在创建过程中,kubelet的缓存中同时存在多个pod对应的sandbox容器。
  3. 每个k8s的node节点存在大量Exit状态的pause容器,发生该问题通常会导致问题1,2的产生,该问题是因为k8s在删除pod的时候,去释放pod的资源,调用stopSanbox函数,其中在调用cni插件calico去释放网络网络资源的时候,cni反反错误,报workendpoint找不到,同时停止了sanbox容器。导致后续的removeSandbox方法未执行,所以导致大量的Exit的pause容器。

在排查这三个问题的时候,看了kubelet的一些代码,整理个图

这里写图片描述

原创粉丝点击