【问题标题】:Kubelet process has high CPU usage over long timeKubelet 进程长时间 CPU 占用率高
【发布时间】:2017-10-19 05:15:45
【问题描述】:

我有一个由 3 个节点组成的带有 weave CNI 插件的 kubernetes 集群:

  • 1 个主节点(虚拟机)
  • 2 个工作裸机节点(4 核 Xeon 超线程 - 8 个逻辑节点)

问题在于top 显示 kubelet 在第一个工作线程上的 CPU 使用率为 60-100%。 在journalctl -u kubelet 我看到很多消息(每分钟数百条)

May 19 09:57:38 kube-worker1 bash[3843]: E0519 09:57:38.075243    3843 docker_sandbox.go:205] Failed to stop sandbox "011cf10cf46dbc6bf2e11d1cb562af478eee21eba0c40521bf7af51ee5399640": Error response from daemon: {"message":"No such container: 011cf10cf46dbc6bf2e11d1cb562af478eee21eba0c40521bf7af51ee5399640"}
May 19 09:57:38 kube-worker1 bash[3843]: E0519 09:57:38.075360    3843 remote_runtime.go:109] StopPodSandbox "011cf10cf46dbc6bf2e11d1cb562af478eee21eba0c40521bf7af51ee5399640" from runtime service failed: rpc error: code = 2 desc = NetworkPlugin cni failed to teardown pod "cron-task-2533948c46c1-p6kwb_namespace" network: CNI failed to retrieve network namespace path: Error: No such container: 011cf10cf46dbc6bf2e11d1cb562af478eee21eba0c40521bf7af51ee5399640
May 19 09:57:38 kube-worker1 bash[3843]: E0519 09:57:38.075380    3843 kuberuntime_gc.go:138] Failed to stop sandbox "011cf10cf46dbc6bf2e11d1cb562af478eee21eba0c40521bf7af51ee5399640" before removing: rpc error: code = 2 desc = NetworkPlugin cni failed to teardown pod "cron-task-2533948c46c1-p6kwb_namespace" network: CNI failed to retrieve network namespace path: Error: No such container: 011cf10cf46dbc6bf2e11d1cb562af478eee21eba0c40521bf7af51ee5399640
May 19 09:57:38 kube-worker1 bash[3843]: E0519 09:57:38.076549    3843 docker_sandbox.go:205] Failed to stop sandbox "0125de37634ef7f3aa852c999cfb5849750167b1e3d63293a085ceca416e4ebf": Error response from daemon: {"message":"No such container: 0125de37634ef7f3aa852c999cfb5849750167b1e3d63293a085ceca416e4ebf"}
May 19 09:57:38 kube-worker1 bash[3843]: E0519 09:57:38.076654    3843 remote_runtime.go:109] StopPodSandbox "0125de37634ef7f3aa852c999cfb5849750167b1e3d63293a085ceca416e4ebf" from runtime service failed: rpc error: code = 2 desc = NetworkPlugin cni failed to teardown pod "cron-task-2533948c46c1-6g8jq_namespace" network: CNI failed to retrieve network namespace path: Error: No such container: 0125de37634ef7f3aa852c999cfb5849750167b1e3d63293a085ceca416e4ebf
May 19 09:57:38 kube-worker1 bash[3843]: E0519 09:57:38.076676    3843 kuberuntime_gc.go:138] Failed to stop sandbox "0125de37634ef7f3aa852c999cfb5849750167b1e3d63293a085ceca416e4ebf" before removing: rpc error: code = 2 desc = NetworkPlugin cni failed to teardown pod "cron-task-2533948c46c1-6g8jq_namespace" network: CNI failed to retrieve network namespace path: Error: No such container: 0125de37634ef7f3aa852c999cfb5849750167b1e3d63293a085ceca416e4ebf
May 19 09:57:38 kube-worker1 bash[3843]: E0519 09:57:38.079585    3843 docker_sandbox.go:205] Failed to stop sandbox "014135ede46ee45c176528da02782a38ded36bd10566f864c147ccb66a617772": Error response from daemon: {"message":"No such container: 014135ede46ee45c176528da02782a38ded36bd10566f864c147ccb66a617772"}
May 19 09:57:38 kube-worker1 bash[3843]: E0519 09:57:38.079805    3843 remote_runtime.go:109] StopPodSandbox "014135ede46ee45c176528da02782a38ded36bd10566f864c147ccb66a617772" from runtime service failed: rpc error: code = 2 desc = NetworkPlugin cni failed to teardown pod "cron-task-2533948c46c1-r30cw_namespace" network: CNI failed to retrieve network namespace path: Error: No such container: 014135ede46ee45c176528da02782a38ded36bd10566f864c147ccb66a617772

这是在创建过程中失败的错误任务之后发生的。我使用--force 删除了所有 pod,但 kubelet 仍然尝试删除它们。此外,我在该工作人员上重新启动了 kubelet,但没有任何结果。我怎样才能与 kubelet 交谈以忘记它们?

版本信息

Kubernetes v1.6.1
Docker version 1.12.0, build 8eab29e
Linux kube-worker1 4.4.0-72-generic #93-Ubuntu SMP

容器清单(不含元数据)

  job:
    apiVersion: batch/v1
    kind: Job
    spec:
      template:
        spec:
          containers:
          - name: cron-task
            image: docker.company.ru/image:v2.3.2
            command: ["rake", "db:refresh_views"]
            env:
            - name: RAILS_ENV
              value: namespace
            - name: CONFIG_PATH
              value: /config
            volumeMounts:
            - name: config
              mountPath: /config
          volumes:
          - name: config
            configMap:
              name: task-conf
          restartPolicy: Never

此外,我在集群的 etcd 中没有发现任何提及此 pod 的名称部分 (2533948c46c1)。

【问题讨论】:

    标签: kubernetes kubelet


    【解决方案1】:

    终于找到了解决办法。
    Kubelet 存储所有 pod 的信息,在其上运行

    /var/lib/dockershim/sandbox
    

    因此,当我在该文件夹中 ls 时,我找到了所有丢失 pod 的文件。然后我删除了这些文件,日志消息消失了,CPU 使用率恢复到正常值(即使没有重新启动 kubelet)

    【讨论】:

    • 非常感谢!在我找到这个之前,我用头敲了 2 天。
    • 有没有办法让 kubernetes 自然清除它?
    • 不幸的是我没有找到任何其他合适的方法。
    【解决方案2】:

    这似乎与 Kubernetes 1.6.x 中的 Pods with hostNetwork=true cannot be removed (and generate errors) when using CNI 问题有关。无论如何,这些消息并不重要,但是当您尝试查找实际问题时当然会很烦人。 尝试使用最新版本的 Kubernetes 来缓解这些问题。

    【讨论】:

    • 感谢您的回答!但看起来这是一个不同的问题。我没有指定网络类型,所以我假设 hostNetwork=false。我对吗?整个日志包含 3 种消息:1) StopPodSandbox,2) 无法停止沙箱,3) MountVolume.SetUp 成功。我应该提供任何其他信息吗?
    【解决方案3】:

    我遇到了和你一样的问题,并为此进行了分析,发现原因是 kubelet pleg 机制并删除了 '/var/lib/dockershim/sandbox' 起到了神奇的作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-07
      • 2013-08-04
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      • 2015-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多