容器运行时页面提到: 由于 kubeadm 把 kubelet 视为一个系统服务来管理,所以对基于 kubeadm 的安装, 我们推荐使用 systemd 驱动,不推荐 cgroupfs 驱动。
以上摘要来自:https://kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/configure-cgroup-driver/
原来默认kubernetes的cgroup驱动程序使用的是cgroupfs,现在为什么要换成systemd呢?
我的docker该如何修改成systemd呢?
什么是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
太通透了,感谢大佬。
你的答案