一,为什么要修改docker的cgroup driver?
1,什么是cgroups?
cgroups(Control Groups) 是 linux 内核提供的一种机制
它可以限制、记录任务组所使用的物理资源
它是内核附加在程序上的hook,
使程序运行时对资源的调度触发相应的钩子,
达到资源追踪和限制资源使用的目的
2,cgroupfs是什么?
docker默认的Cgroup Driver是cgroupfs
cgroupfs是cgroup为给用户提供的操作接口而开发的虚拟文件系统类型,
它和sysfs,proc类似,可以向用户展示cgroup的hierarchy,通知kernel用户对cgroup改动
对cgroup的查询和修改只能通过cgroupfs文件系统来进行
3,为什么要修改为使用systemd?
Kubernetes 推荐使用 systemd 来代替 cgroupfs
因为systemd是Kubernetes自带的cgroup管理器, 负责为每个进程分配cgroups,
但docker的cgroup driver默认是cgroupfs,这样就同时运行有两个cgroup控制管理器,
当资源有压力的情况时,有可能出现不稳定的情况
如果不修改配置,会在kubeadm init时有提示:
[WARNING IsDockerSystemdCheck]: detected "cgroupfs" as the Docker cgroup driver.
The recommended driver is "systemd".
Please follow the guide at https://kubernetes.io/docs/setup/cri/
说明:作者:刘宏缔 邮箱: 371125307@qq.com
二,查看当前docker服务的cgroup driver?
[root@centos8 ~]# docker infoClient:
Debug Mode:falseServer:
Containers:2Running:0Paused:0Stopped:2Images:10Server Version:19.03.8Storage Driver: overlay2
Backing Filesystem:Supports d_type:trueNative Overlay Diff:trueLogging Driver: json-fileCgroup Driver: cgroupfs
...
可以看到默认的Cgroup Driver是cgroupfs
三,修改docker的cgroup driver为systemd
编辑docker的配置文件,如果不存在就创建
[root@centos8 ~]# vi /etc/docker/daemon.json
内容如下:
{
..."exec-opts": ["native.cgroupdriver=systemd"]
}
说明:增加一条:
"exec-opts": ["native.cgroupdriver=systemd"]
如果上面一行还有内容,记得在上面一行加上逗号
例如:
{"graph": "/data/docker","exec-opts": ["native.cgroupdriver=systemd"]
}
修改完成后重启docker服务
[root@centos8 ~]# systemctl restart docker
查看修改的效果
[root@centos8 ~]# docker infoClient:
Debug Mode:falseServer:
Containers:2Running:0Paused:0Stopped:2Images:10Server Version:19.03.8Storage Driver: overlay2
Backing Filesystem:Supports d_type:trueNative Overlay Diff:trueLogging Driver: json-fileCgroup Driver: systemd
Plugins:
...
可以看到修改成功,当前Cgroup Driver已修改为systemd
四,查看docker的版本
[root@centos8 ~]# docker --version
Docker version19.03.8, build afacb8b
五,查看linux的版本
[root@centos8 ~]# cat /etc/redhat-release
CentOS Linux release8.1.1911 (Core)