一、概述
默认配置下,kubelet/Linux 使用 CFS(完全公平调度)算法来为 Pod 分配 CPU,工作负载(Pod 中的进程)会被调度到不同的可用的 CPU 核心,而且大多数工作负载对这种迁移带来的性能损失并不敏感。
CFS 是 Linux 内核中 SCHED_NORMAL 类任务(普通进程)的默认调度算法,摒弃了原先的固定时间片优先级概念,致力于公平地将 CPU 时间分配给任务。
但是 CPU 缓存的亲和性和调度延迟会对少数进程带来显著影响,这类工作负载需要独占 CPU(“绑核”)。
之前的文章中已经讲了如何在生产环境中进行资源的预留和pod的绑核策略(https://blog.youkuaiyun.com/weixin_40579389/article/details/134147788?spm=1001.2014.3001.5501)
本篇文章来讲解k8s pod绑核在cgroup中的实现。
二、环境信息
1:k8s version
[root@node1 ~]# kubectl get node
NAME STATUS ROLES AGE VERSION
node1 Ready control-plane,master 44d v1.23.17
node2 Ready control-plane,master 44d v1.23.17
node3 Ready control-plane,master 44d v1.23.17
#########################
2:kubelet配置
[root@node1 ~]# ps -ef | grep kubelet
root 7080 1 25 Feb21 ? 1-05:16:18 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --container-runtime=remote --container-runtime-endpoint=/run/containerd/containerd.sock --node-ip=172.28.30.163 --node-labels=topology.kubeclipper.io/region=mgmt,kubeclipper.io/agent-id=c9