Kubernetes(k8s) cgroup默认为什么使用systemd?docker如何修改?

识趣 发表于: 2021-09-17   最后更新时间: 2023-05-25 10:33:48   3,555 游览

容器运行时页面提到: 由于 kubeadm 把 kubelet 视为一个系统服务来管理,所以对基于 kubeadm 的安装, 我们推荐使用 systemd 驱动,不推荐 cgroupfs 驱动。

以上摘要来自:https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/

原来默认kubernetes的cgroup驱动程序使用的是cgroupfs,现在为什么要换成systemd呢?

我的docker该如何修改成systemd呢?

发表于 2021-09-17

什么是Cgroup?

Cgroup是control group的简称,它为Linux内核提供了一种任务聚集和划分的机制,通过一组参数集合将一些任务组织成一个或多个子系统。

什么是cgroups?

用来约束分配给进程的资源。
cgroups,全称Control Groups(控制组),是Linux系统内核提供的一种机制,主要用于限制和隔离一组进程对系统资源的使用,也就是作资源QoS。可控制的资源主要是CPU、内存、block I/O、网络带宽等。

什么是cgroupfs?

cgroupfs是cgroup为给用户提供的操作接口而开发的虚拟文件系统类型,它和sysfs,proc类似,并且cgroupfs是可以挂载的,默认情况下挂载在/sys/fs/cgroup目录。可以向用户展示cgroup的hierarchy(等级制度),通知kernel用户对cgroup改动。
对cgroup的查询和修改都只能通过cgroupfs文件系统来进行。

kubernetes为什么要修改使用systemd?

Kubernetes 现在推荐使用 systemd 来代替 cgroupfs
因为systemd是Kubernetes自带的cgroup管理器,负责为每个进程分配cgroups
但docker的cgroup driver默认是cgroupfs,这样就同时运行有两个cgroup控制管理器
当资源有压力的情况时,有可能出现不稳定的情况。

修改docker的cgroup driver为systemd

vi /etc/docker/daemon.json

增加

"exec-opts": ["native.cgroupdriver=systemd"]

例如:

{
"graph": "/data/docker",
"exec-opts": ["native.cgroupdriver=systemd"]
}

修改完成后重启docker服务

systemctl restart docker
识趣 -> 半兽人 3年前

太通透了,感谢大佬。

你的答案

查看kubernetes相关的其他问题或提一个您自己的问题