k8s docker cgroup驱动问题 —— 筑梦之路

cgroup作用是什么?

在 Linux 操作系统上,控制组(CGroup)用于限制分配给进程的资源。

kubelet 和底层容器运行时都需要对接控制组来强制执行 为 Pod 和容器管理资源 并为诸如 CPU、内存这类资源设置请求和限制。若要对接控制组,kubelet 和容器运行时需要使用一个 cgroup 驱动。 关键的一点是 kubelet 和容器运行时需使用相同的 cgroup 驱动并且采用相同的配置。

cgroup分类

  • cgroupfs

  • systemd

1. cgroups驱动

cgroupfs驱动是 kubelet 中默认的 cgroup 驱动。当使用 cgroupfs 驱动时, kubelet 和容器运行时将直接对接 cgroup 文件系统来配置 cgroup。

当操作系统是使用 systemd 来初始化系统时, 不推荐使用 cgroupfs 驱动,因为 systemd 期望系统上只有一个 cgroup 管理器。此外,如果你使用 cgroup v2, 则应用 systemd cgroup 驱动取代 cgroupfs。

2. systemd驱动

当某个 Linux 系统发行版使用 systemd 作为其初始化系统时,初始化进程会生成并使用一个 root 控制组(cgroup),并充当 cgroup 管理器。

systemd 与 cgroup 集成紧密,并将为每个 systemd 单元分配一个 cgroup。因此,如果你的操作系统使用 systemd 用作初始化系统,同时使用 cgroupfs 驱动,则系统中会存在两个不同的 cgroup 管理器。

同时存在两个 cgroup 管理器将造成系统中针对可用的资源和使用中的资源出现两个视图。某些情况下, 将 kubelet 和容器运行时配置为使用 cgroupfs、但为剩余的进程用 systemd 的那些节点将在资源压力增大时变得不稳定,如果操作系统使用 systemd 来初始化系统时,缓解这个不稳定问题的方法是针对 kubelet 和容器运行时将 systemd 用作 cgroup 驱动

要将 systemd 设置为 cgroup 驱动,需编辑 KubeletConfigurationcgroupDriver 选项,并将其设置为 systemd,kubeadm安装的集群,kubelet配置文件在/var/lib/kubelet/config.yaml,例如:

bash 复制代码
apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
...
cgroupDriver: systemd

对于docker配置systemd驱动,需要编辑配置文件/etc/docker/daemon.json

bash 复制代码
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "experimental": true,
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m"
  },
  "storage-driver": "overlay2",
  "storage-opts": [
    "overlay2.override_kernel_check=true"
  ]
}

systemd初始化的常见系统发行版

  • centos7以后,centos6使用的init

  • ubuntu

  • Debian

  • Fedora

相关推荐
盛夏52018 分钟前
Docker容器化部署SpringBoot+Vue项目:从零到一在阿里云宝塔面板的实践指南
阿里云·docker·云计算
Cyber4K23 分钟前
【Kubernetes专项】DockerFile、数据持计划、网络模式及资源配额
运维·网络·云原生·容器·kubernetes
Joren的学习记录1 小时前
【Linux运维疑难杂症】k8s集群创建calico网络失败
linux·运维·kubernetes
鲨莎分不晴1 小时前
Docker 网络深度解析:打破容器的“孤岛效应”
网络·docker·容器
Zsr10231 小时前
K8s核心组件Pod:基础篇
云原生·容器·kubernetes
拔剑纵狂歌2 小时前
helm-cli安装资源时序报错问题问题
后端·docker·云原生·容器·golang·kubernetes·腾讯云
techzhi2 小时前
Docker & Docker Compose 安装方案
docker·容器·eureka
喵叔哟2 小时前
19.服务集成与通信
后端·docker·容器·服务发现
Ice星空3 小时前
Docker 镜像创建和管理以及 buildx 交叉编译
运维·docker·容器
飞翔沫沫情3 小时前
OpenEuler 发行版 二进制部署docker
docker·openeuler·容器引擎