zoukankan      html  css  js  c++  java
  • Docker 和 kubelet 的 cgroup driver

    在用minikube安装k8s的时候,有一个强烈的要求就是docker与kubelet的驱动,必须是保持一致的,需要都使用system或cgroupfs,一直搞不清这两个驱动的区别在哪。

    首先当然要了解cgroup的概念;cgroups,其名称源自控制组群(control groups)的简写,是Linux内核主要用于限制和隔离一组进程对系统资源的使用,也就是做资源QoS。可控制的资源主要包括CPU、内存、block I/O、网络带宽等等。cgroup 是将任意进程进行分组化管理的 linux 内核功能,cgroup 本身是提供将进程进行分组化管理的功能和接口的基础结构(各自的细节资源管控下的tasks文件记录了这个Cgroup的所有进程(包括线程))

    现在的cgroups适用于多种应用场景,从单个进程的资源控制,到实现操作系统层次的虚拟化;

    Cgroups是透过阶层式的方式来管理的,和程序、子群组相同,都会由它们的 parent 继承部份属性。然而,这两个模型之间有所不同

    由于k8s官网推荐使用systmed(docker默认安装也是systemd)

    如下图所示,我们可以看到对应的总资源管理及细节的资源管理:图1为总的资源管控,图2为细节的资源管控

     

     那么 systemd 和 cgroupfs 这两种驱动有什么区别呢?

    1. systemd cgroup driver 是 systemd 本身提供了一个 cgroup 的管理方式,使用systemd 做 cgroup 驱动的话,所有的 cgroup 操作都必须通过 systemd 的接口来完成,不能手动更改 cgroup 的文件

    2. cgroupfs 驱动就比较直接,比如说要限制内存是多少、要用 CPU share 为多少?直接把 pid 写入对应的一个 cgroup 文件,然后把对应需要限制的资源也写入相应的 memory cgroup 文件和 CPU 的 cgroup 文件就可以了

    所以可以看出来 systemd 更加安全,因为不能手动去更改 cgroup 文件,当然我们也推荐使用 systemd 驱动来管理 cgroup。

     

  • 相关阅读:
    find module providing package github.com/go-sql-driver/mysql: working directory is not part of a module
    深度学习中的epoch、batchsize、iterations的理解
    淘宝软件质量属性分析
    Git
    多线程
    Spark基础之Scala
    机器学习十讲第十讲
    机器学习十讲第九讲
    机器学习十讲第六讲
    本地MarkDown优雅发表
  • 原文地址:https://www.cnblogs.com/cutecatkk/p/13745304.html
Copyright © 2011-2022 走看看