一、使用相同的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
扫描二维码,分享此文章