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

117 篇文章 7 订阅
108 篇文章 3 订阅

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 驱动,需编辑 KubeletConfiguration 的 cgroupDriver 选项,并将其设置为 systemd,kubeadm安装的集群,kubelet配置文件在/var/lib/kubelet/config.yaml,例如:


apiVersion: kubelet.config.k8s.io/v1beta1
kind: KubeletConfiguration
...
cgroupDriver: systemd

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

{
  "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

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
k8sDocker是当今非常流行的容器化技术。K8sKubernetes的简称,是一个开源的容器编排和管理平台,而Docker是一种开源的容器化技术。 k8s的讲义主要是介绍如何使用Kubernetes来管理和部署容器化的应用程序。K8s提供了一套强大的工具和功能,使得我们可以轻松地管理大规模的容器集群。通过使用k8s,我们可以实现容器化应用的自动化部署、弹性伸缩、负载均衡和容器的自动恢复等功能。 Docker的讲义则是介绍如何使用Docker来创建和管理容器Docker可以将应用程序及其依赖打包成一个独立的容器,并在任何平台上运行。使用Docker,开发人员可以更加方便地构建、分发和运行应用程序,而无需担心依赖环境的问题。 在k8sDocker的结合中,k8s提供了对Docker容器的编排和管理能力。通过k8s,我们可以创建一个容器集群,将Docker容器在多个主机上进行部署,并在容器之间进行负载均衡和服务发现。同时,k8s还提供了一些高级功能,如自动扩展、滚动更新和容器的故障恢复等。 总之,k8sDocker的讲义都是介绍如何使用这两种容器化技术来构建和管理应用程序。它们可以帮助我们更加高效地编排和管理容器,实现应用程序的高可用性和可伸缩性。同时,它们也是云原生应用开发的基石,可以帮助我们更好地应对日益复杂的应用部署和管理需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值