一、使用相同的cgroup驱动
原因
kubelet
和底层容器运行时Container Runtime
,需要对接Cgroups
,向系统申请和限制资源(CPU、内存)给Pod使用,要对接的话,就需要使用一个cgroup
驱动
两种Cgroups
驱动
- cgroupfs(kubelet中默认的驱动)
- systemd
说明:
如果Linux发行版是使用
systemd
作为其初始化系统的,那么初始化进程会生成并使用一个root控制组来充当cgroup
管理器如果Linux发行版使用的是
systemd
,那么不推荐使用cgroupfs
驱动因为systemd要求系统上只能有一个
cgroup
管理器,你用了cgroupsfs
驱动,那么系统中会存在两个不同的cgroup
管理器。坏处:会造成其他进程运行不稳定(因为kubelet和容器运行时使用的是
cgroupfs
驱动来请求和分配资源,而其他进程使用的是systemd
来请求和分配资源,当其他进程在压力变大想申请更多资源时可能会申请不到)CentOS使用的是
systemd
驱动Linux系统有两个
cgroup
版本:cgroup v1
、cgroup v2
查看Linux系统使用的是哪个
cgroup
版本命令1
2[root@k8s-main ~]# stat -fc %T /sys/fs/cgroup/
cgroup2fs要将
systemd
设置为 cgroup 驱动,需编辑KubeletConfiguration
的cgroupDriver
选项,并将其设置为systemd
如果使用
kubeadm
创建集群,从v1.22
版本开始,即使用户没有在KubeletConfiguration
下设置cgroupdriver
属性,kubeadm
也会默认使用systemd
驱动1
2
3
4apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
...
cgroupDriver: systemd从
Kubernetes v1.28
版本开始,启用特性门控KubeletCgroupDriverFromCRI
(也就是一个布尔开关),并使用支持RuntimeConfig
的CRI接口的容器运行时,kubelet就会自动从运行时检测适当的cgroup
驱动程序,并忽略kubelet配置文件中的cgroupDriver
设置
二、要了解容器运行时的种类
有四种容器运行时
- Containerd
- CRI-O
- Docker Engine
- Mirantis Container Runtime
扫描二维码,分享此文章