kube-apiserver: constantly 5 to 10% CPU: 虽然没有单个请求
kube-apiserver: constantly 5 to 10% CPU: Although there is no single request
我安装了 kind 来玩 Kubernetes。
如果我使用 top
并按 CPU 使用情况排序(键 C
),那么我会看到 kube-apiserver
不断消耗 5% 到 10% CPU.
为什么?
到目前为止我还没有安装任何东西:
guettli@p15:~$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-558bd4d5db-ntg7c 1/1 Running 0 40h
kube-system coredns-558bd4d5db-sx8w9 1/1 Running 0 40h
kube-system etcd-kind-control-plane 1/1 Running 0 40h
kube-system kindnet-9zkkg 1/1 Running 0 40h
kube-system kube-apiserver-kind-control-plane 1/1 Running 0 40h
kube-system kube-controller-manager-kind-control-plane 1/1 Running 0 40h
kube-system kube-proxy-dthwl 1/1 Running 0 40h
kube-system kube-scheduler-kind-control-plane 1/1 Running 0 40h
local-path-storage local-path-provisioner-547f784dff-xntql 1/1 Running 0 40h
guettli@p15:~$ kubectl get services --all-namespaces
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 40h
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 40h
guettli@p15:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
kind-control-plane Ready control-plane,master 40h v1.21.1
guettli@p15:~$ kubectl get nodes --all-namespaces
NAME STATUS ROLES AGE VERSION
kind-control-plane Ready control-plane,master 40h v1.21.1
我很好奇。 CPU 用法从何而来?我该如何调查?
即使在只有一个主节点的空集群中,也至少有 5 个组件定期访问 API 服务器:
- 主节点的 kubelet
- 控制器管理器
- 调度器
- CoreDNS
- Kube 代理
这是因为 API 服务器充当 Kubernetes 中所有组件的唯一入口点,以了解集群状态应该是什么并在需要时采取行动。
如果您对详细信息感兴趣,可以在 API 服务器中启用审核日志,并获得一个非常详细的文件,其中包含所有发出的请求。
如何做到这一点不是这个答案的目标,但你可以从 apiserver documentation.
开始
我安装了 kind 来玩 Kubernetes。
如果我使用 top
并按 CPU 使用情况排序(键 C
),那么我会看到 kube-apiserver
不断消耗 5% 到 10% CPU.
为什么?
到目前为止我还没有安装任何东西:
guettli@p15:~$ kubectl get pods --all-namespaces
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system coredns-558bd4d5db-ntg7c 1/1 Running 0 40h
kube-system coredns-558bd4d5db-sx8w9 1/1 Running 0 40h
kube-system etcd-kind-control-plane 1/1 Running 0 40h
kube-system kindnet-9zkkg 1/1 Running 0 40h
kube-system kube-apiserver-kind-control-plane 1/1 Running 0 40h
kube-system kube-controller-manager-kind-control-plane 1/1 Running 0 40h
kube-system kube-proxy-dthwl 1/1 Running 0 40h
kube-system kube-scheduler-kind-control-plane 1/1 Running 0 40h
local-path-storage local-path-provisioner-547f784dff-xntql 1/1 Running 0 40h
guettli@p15:~$ kubectl get services --all-namespaces
NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
default kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 40h
kube-system kube-dns ClusterIP 10.96.0.10 <none> 53/UDP,53/TCP,9153/TCP 40h
guettli@p15:~$ kubectl get nodes
NAME STATUS ROLES AGE VERSION
kind-control-plane Ready control-plane,master 40h v1.21.1
guettli@p15:~$ kubectl get nodes --all-namespaces
NAME STATUS ROLES AGE VERSION
kind-control-plane Ready control-plane,master 40h v1.21.1
我很好奇。 CPU 用法从何而来?我该如何调查?
即使在只有一个主节点的空集群中,也至少有 5 个组件定期访问 API 服务器:
- 主节点的 kubelet
- 控制器管理器
- 调度器
- CoreDNS
- Kube 代理
这是因为 API 服务器充当 Kubernetes 中所有组件的唯一入口点,以了解集群状态应该是什么并在需要时采取行动。
如果您对详细信息感兴趣,可以在 API 服务器中启用审核日志,并获得一个非常详细的文件,其中包含所有发出的请求。 如何做到这一点不是这个答案的目标,但你可以从 apiserver documentation.
开始