一,為什么要修改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/
說明:劉宏締的架構森林是一個專注架構的博客,地址:https://www.cnblogs.com/architectforest
對應的源碼可以訪問這里獲取: https://github.com/liuhongdi/
說明:作者:劉宏締 郵箱: 371125307@qq.com
二,查看當前docker服務的cgroup driver?
[root@centos8 ~]# docker info Client: Debug Mode: false Server: Containers: 2 Running: 0 Paused: 0 Stopped: 2 Images: 10 Server Version: 19.03.8 Storage Driver: overlay2 Backing Filesystem: <unknown> Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup 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 info Client: Debug Mode: false Server: Containers: 2 Running: 0 Paused: 0 Stopped: 2 Images: 10 Server Version: 19.03.8 Storage Driver: overlay2 Backing Filesystem: <unknown> Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: systemd Plugins: ...
可以看到修改成功,當前Cgroup Driver已修改為systemd
四,查看docker的版本
[root@centos8 ~]# docker --version Docker version 19.03.8, build afacb8b
五,查看linux的版本
[root@centos8 ~]# cat /etc/redhat-release CentOS Linux release 8.1.1911 (Core)