如何查看Pod是否使用CPU绑核?
以4U8G节点为例,并提前在集群中部署一个CPU request为1,limit为2的工作负载。
- 登录到节点池中的一个节点,查看/var/lib/kubelet/cpu_manager_state输出内容。
cat /var/lib/kubelet/cpu_manager_state
回显如下:
{"policyName":"static","defaultCpuSet":"0,2-3","entries":{"c1fcd22d-8a83-4aef-a27a-4c037e482b16":{"container-1":"1"}},"checksum":1500530529}
policyName字段值为static代表策略设置成功。
- 查看容器的cpuset.preferred_cpus的cgroup设置,输出内容即为优先使用的CPU号。
cat /sys/fs/cgroup/cpuset/kubepods/pod{pod uid}/{容器id}/cpuset.cpus
- {pod uid}为Pod UID,可在已通过kubectl连接集群的机器上使用以下命令获取:
kubectl get po {pod name} -n {namespace} -ojsonpath='{.metadata.uid}{"\n"}'
命令中的{pod name}和{namespace}是Pod名称及其所在的命名空间。
- {容器id}需要是完整的容器ID,可在容器运行的节点上通过以下命令获取:
docker节点池:命令中的{pod name}是Pod名称。
docker ps --no-trunc | grep {pod name} | grep -v cce-pause | awk '{print $1}'
containerd节点池:命令中的{pod name}是Pod名称,{pod id}是Pod的ID,{container name}是容器名称。
# 获取Pod ID crictl pods | grep {pod name} | awk '{print $1}' # 获取完整容器ID crictl ps --no-trunc | grep {pod id} | grep {container name} | awk '{print $1}'
完整示例如下:
cat /sys/fs/cgroup/cpuset/kubepods/podc1fcd22d-8a83-4aef-a27a-4c037e482b16/5cb15f55f429e4496172bef05994477caa96e0ca468563208695c1ad5cc141e0/cpuset.cpus
回显如下,表示绑定1号CPU。
1
- {pod uid}为Pod UID,可在已通过kubectl连接集群的机器上使用以下命令获取: