TIPS之 Kubernetes Pod TaskSet 绑核

Kubernetes Pod TaskSet 绑核

Posted by 董江 on Tuesday, August 30, 2022

主机系统进程驱逐 和 容器绑核 操作步骤

  1. 避免os进程影响,使系统进程调度在 0,1 CPU

  2. 验证CPU独占性能,将工具亲和到空闲的 CPU上

具体步骤

1. 使用isolatecpu, 隔离 OS进程

首先,看不做隔离的 OS进程下,系统CPU情况

$ top
top - 16:51:37 up  1:17,  4 users,  load average: 6.32, 6.15, 5.93
Tasks: 209 total,   3 running, 152 sleeping,   0 stopped,   0 zombie
%Cpu0  :  7.1 us,  8.0 sy,  0.3 ni, 92.9 id,  0.4 wa,  1.0 hi,  0.3 si,  0.0 st
%Cpu1  :  3.4 us,  9.7 sy,  0.7 ni, 90.8 id,  0.8 wa,  0.7 hi,  0.7 si,  0.0 st
%Cpu2  :  6.1 us,  7.8 sy,  0.5 ni, 94.2 id,  0.5 wa,  0.1 hi,  0.3 si,  0.0 st
%Cpu3  :  4.4 us,  6.9 sy,  0.6 ni, 96.0 id,  0.2 wa,  0.4 hi,  0.4 si,  0.0 st

系统调用到每个核上,系统侵占5%最有

隔离系统进展步骤:

$  vi /etc/default/grub

#添加isolcpus=2,3此配置
GRUB_CMDLINE_LINUX="isolcpus=2,3 crashkernel=auto rhgb quiet"

#加载配置
$ grub2-mkconfig -o /boot/grub2/grub.cfg

#重启Node节点 reboot
$ reboot 

查看系统进程驱逐情况:

$ top
top - 16:57:37 up  1:23,  4 users,  load average: 67.96, 45.76, 23.38
Tasks: 212 total,   2 running, 157 sleeping,   0 stopped,   0 zombie
%Cpu0  :  7.7 us, 82.6 sy,  0.0 ni,  8.7 id,  0.3 wa,  0.7 hi,  0.0 si,  0.0 st
%Cpu1  : 11.6 us, 82.5 sy,  0.0 ni,  5.0 id,  0.0 wa,  0.7 hi,  0.3 si,  0.0 st
%Cpu2  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

确认: 2,3核 已空闲

更改容器启动步骤

方式一: 根据现有容器通过taskset进行绑核 (性能压测使用)

crictl ps 查询 containerid; 在通过containerid 获得 pid; 在通过taskset进行进程绑核

$ crictl ps
CONTAINER           IMAGE               CREATED             STATE               NAME                        ATTEMPT             POD ID
0820e507c2478       9aec5c5fe4ba9       56 minutes ago      Running             dlam-1                      0                   d54a862d48bf7

# 通过 0820e507c2478 查询到 pid是 67614
$ ps aux | grep "0820e507c2478"
root      67614  0.0  0.0 112848  8684 ?        Sl   16:04   0:00 /usr/bin/containerd-shim-runc-v1 -namespace k8s.io -id 0820e507c247875ccd684d75e07670a40257b3bfae44ce272d8d1cb4d7cfd137 -address /run/containerd/containerd.sock
root     186345  0.0  0.0 112740  2420 pts/4    S+   17:02   0:00 grep --color=auto 0820e507c2478

# 通过 pid 67614 查询当前绑核情况
$ taskset -c -p 67614
pid 67614's current affinity list: 0,1

# 将 pid 67614 绑定 到 2,3 核上
$ taskset -pc 2,3 67614
pid 67614's current affinity list: 0,1
pid 67614's new affinity list: 2,3

方式二: 更改kubelet config yaml (商业化正式上线)

$ vi /var/lib/kubelet/config.yaml

# 添加以下命令
cpuManagerPolicy: static
reservedSystemCPUs: 0-1 #预留出0,1给 linux os

$ systemctl status kubelet
$ systemctl stop kubelet
$ rm -rf /var/lib/kubelet/cpu_manager_state
$ systemctl start kubelet

注意: 方案1⃣️: 可以只保留被测试Pod; 方案2⃣️:node节点上的其他pod 都会 绑定到2,3核;

「如果这篇文章对你有用,请随意打赏」

Kubeservice博客

如果这篇文章对你有用,请随意打赏

使用微信扫描二维码完成支付