胡文成的个人博客

Kubernetes安装步骤二_01_安装容器运行时前的准备工作

2024-08-01

一、使用相同的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 v1cgroup v2

    查看Linux系统使用的是哪个cgroup版本命令

    1
    2
    [root@k8s-main ~]# stat -fc %T /sys/fs/cgroup/
    cgroup2fs
  • 要将 systemd 设置为 cgroup 驱动,需编辑 KubeletConfigurationcgroupDriver 选项,并将其设置为 systemd

    如果使用kubeadm创建集群,从v1.22版本开始,即使用户没有在KubeletConfiguration下设置cgroupdriver属性,kubeadm也会默认使用systemd驱动

    1
    2
    3
    4
    apiVersion: 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

扫描二维码,分享此文章