1、为什么要修改 Docker 的 cgourp driver?
1.1、什么是 cgroups?
cgroups(Control Groups)是 Linux 内核提供的一种机制。它可以限制、记录任务组所使用的物理资源。它是内核附加在程序上的 hook,使程序运行时对资源的调度触发相应的钩子,达到资源追踪和限制资源使用的目的。
1.2、cgroupfs 是什么?
Docker 默认的 cgroup driver 是 cgroupfs。cgroupfs 是 cgroup 为给用户提供的操作接口而开发的虚拟文件系统类型,它和 sysfs、proc 类似,可以向用户展示 cgroup 的 hierarchy,通知 kernel 用户对 cgroup 改动,对 cgroup 的查询和修改只能通过 cgroupfs 文件系统来进行。
1.3、为什么要修改使用 systemd?
Kubernetes 推荐使用 systemd 来替代 cgroupfs,是因为 systemd 是 Kubernetes 自带的 cgroup 管理器,负责为每个进程分配 cgroupfs,但 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
2、查看当前 Docker 服务的 cgroup dirver
i
Cgroup Driver: cgroupfs
Cgroup Version: 1
2.1、修改daemon.json文件并重启docker
[root@hcss-ecs-c7cc ~]# vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://docker.shaunyang.site",
"https://docker.m.daocloud.io"
],
"exec-opts":[
"native.cgroupdriver=systemd"
]
}
[root@hcss-ecs-c7cc ~]# systemctl daemon-reload
[root@hcss-ecs-c7cc ~]# systemctl restart docker
2.2、查看cgroup driver
[root@hcss-ecs-c7cc ~]# docker info
Client:
Version: 27.5.1
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.24.0
Path: /usr/local/lib/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.36.2
Path: /usr/local/lib/docker/cli-plugins/docker-compose
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 5
Server Version: 27.5.1
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Using metacopy: false
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: systemd
Cgroup Version: 1
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
Swarm: inactive
Runtimes: io.containerd.runc.v2 runc
Default Runtime: runc
Init Binary: docker-init
containerd version: bcc810d6b9066471b0b6fa75f557a15a1cbf31bb
runc version: v1.2.4-0-g6c52b3f
init version: de40ad0
Security Options:
seccomp
Profile: builtin
Kernel Version: 4.18.0-348.7.1.el8_5.x86_64
Operating System: CentOS Linux 8
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.774GiB
Name: hcss-ecs-c7cc
ID: 1a82bd87-53bd-41c9-bb7c-dbb95cd2e7fa
Docker Root Dir: /var/lib/docker
Debug Mode: false
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://docker.shaunyang.site/
https://docker.m.daocloud.io/
Live Restore Enabled: false
Product License: Community Engine
Cgroup Driver: systemd
Cgroup Version: 1
识别 Linux 节点上的 cgroup 版本
cgroup 版本取决于正在使用的 Linux 发行版和操作系统上配置的默认 cgroup 版本。 要检查你的发行版使用的是哪个 cgroup 版本,请在该节点上运行 stat -fc %T /sys/fs/cgroup/
命令:
stat -fc %T /sys/fs/cgroup/
对于 cgroup v2,输出为 cgroup2fs
。
对于 cgroup v1,输出为 tmpfs