0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在Kubernetes中快速启用Cgroup V2支持

马哥Linux运维 来源:马哥Linux运维 2023-01-29 11:22 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Linux 中有两个 cgroup 版本:cgroup v1 和 cgroup v2。cgroup v2 是新一代的 cgroup API

Kubernetes 自 v1.25 起 cgroup2 特性正式 stable.

cgroup v2 有哪些优势

cgroup v2 提供了一个具有增强资源管理能力的统一控制系统

cgroup v2 对 cgroup v1 进行了多项改进,例如:

•API 中单个统一的层次结构设计

•更安全的子树委派给容器

•更新的功能特性, 例如压力阻塞信息(Pressure Stall Information,PSI)[1]

•跨多个资源的增强资源分配管理和隔离

•统一核算不同类型的内存分配(网络内存、内核内存等)

•考虑非即时资源变化,例如页面缓存回写

一些 Kubernetes 特性专门使用 cgroup v2 来增强资源管理和隔离。例如,MemoryQoS[2] 特性改进了内存 QoS 并依赖于 cgroup v2 原语。

使用 cgroup v2 前提

cgroup v2 具有以下要求:

操作系统发行版启用 cgroup v2

•Ubuntu(从 21.10 开始,推荐 22.04+)

•Debian GNU/Linux(从 Debian 11 Bullseye 开始)

•Fedora(从 31 开始)

•RHEL 和类似 RHEL 的发行版(从 9 开始)

•…

•Linux 内核为 5.8 或更高版本

•容器运行时支持 cgroup v2。例如:

•containerd[3] v1.4 和更高版本

•cri-o[4] v1.20 和更高版本

•kubelet 和容器运行时被配置为使用 systemd cgroup 驱动[5]

使用 cgroup v2

这里以 Debian 11 Bullseye + containerd v1.4 为例.

启用并检查 Linux 节点的 cgroup v2

Debian 11 Bullseye 默认已启用 cgroup v2.

可以通过如下命令验证:

stat-fc%T/sys/fs/cgroup/

•对于 cgroup v2,输出为 cgroup2fs。

•对于 cgroup v1,输出为 tmpfs。

如果没有启用, 可以通过在 /etc/default/grub 下的 GRUB_CMDLINE_LINUX 中添加 systemd.unified_cgroup_hierarchy=1, 然后执行 sudo update-grub

Notes: 如果是树莓派, 标准 Raspberry Pi OS 安装时不会启用 cgroups。需要 cgroups 来启动 systemd 服务。可以通过将 cgroup_memory=1 cgroup_enable=memory systemd.unified_cgroup_hierarchy=1 附加到 /boot/cmdline.txt 来启用 cgroups。并重启生效

kubelet 使用 systemd cgroup 驱动

kubeadm 支持在执行 kubeadm init 时,传递一个 KubeletConfiguration 结构体。KubeletConfiguration 包含 cgroupDriver 字段,可用于控制 kubelet 的 cgroup 驱动。

说明:在版本 1.22 中,如果用户没有在 KubeletConfiguration 中设置 cgroupDriver 字段, kubeadm init 会将它设置为默认值 systemd。

这是一个最小化的示例,其中显式的配置了此字段:

#kubeadm-config.yaml kind:ClusterConfiguration apiVersion:kubeadm.k8s.io/v1beta3 kubernetesVersion:v1.21.0 --- kind:KubeletConfiguration apiVersion:kubelet.config.k8s.io/v1beta1 cgroupDriver:systemd

这样一个配置文件就可以传递给 kubeadm 命令了:

kubeadminit--configkubeadm-config.yaml

说明:

Kubeadm 对集群所有的节点,使用相同的 KubeletConfiguration。KubeletConfiguration 存放于 kube-system 命名空间下的某个 ConfigMap[6] 对象中。

执行 init、join 和 upgrade 等子命令会促使 kubeadm 将 KubeletConfiguration 写入到文件 /var/lib/kubelet/config.yaml 中, 继而把它传递给本地节点的 kubelet。

containerd 使用 systemd cgroup 驱动

编辑 /etc/containerd/config.toml:

[plugins.cri.containerd.runtimes.runc.options] SystemdCgroup=true

升级监控组件以支持 cgroup v2 监控

Reference:

cgroup v2 使用一个与 cgroup v1 不同的 API,因此如果有任何应用直接访问cgroup 文件系统, 则需要将这些应用更新为支持 cgroup v2 的版本。例如:

• 一些第三方监控和安全代理可能依赖于 cgroup 文件系统。你要将这些代理更新到支持 > cgroup v2 的版本。

• 如果以独立的 DaemonSet 的形式运行 cAdvisor[7] 以监控 Pod 和容器, 需将其更> 新到 v0.43.0 或更高版本。

• 如果你使用 JDK,推荐使用 JDK 11.0.16 及更高版本或 JDK 15 及更高版本, 以便> 完全支持 cgroup v2[8]。

完成

总结

Kubernetes 自 v1.25 起 cgroup2 特性正式 stable. cgroup2 相比 cgroup v1 有以下优势:

• API 中单个统一的层次结构设计

• 更安全的子树委派给容器

• 更新的功能特性, 例如压力阻塞信息(Pressure Stall Information,PSI)[9]

• 跨多个资源的增强资源分配管理和隔离

• 统一核算不同类型的内存分配(网络内存、内核内存等)

• 考虑非即时资源变化,例如页面缓存回写

推荐在使用 Kubernetes v1.25及以上版本时, 使用支持 cgroup v2 的linux 和 CRI. 并启用 Kubernetes 的cgroup v2 功能.

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11628

    浏览量

    217990
  • kubernetes
    +关注

    关注

    0

    文章

    256

    浏览量

    9412

原文标题:如何在 Kubernetes 中快速启用 Cgroup V2 支持

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    请问CW32F003支持printf函数吗?

    CW32F003支持printf函数吗?
    发表于 11-21 07:48

    CW32L011支持哪些实时操作系统?

    CW32L011支持哪些实时操作系统?
    发表于 11-17 06:51

    stm32支持canfd和dma结合使用吗?

    stm32支持canfd和dma结合使用吗
    发表于 08-01 07:15

    CS57066支持22A 4.5V~24V输入,单节锂电池适用低静态电流,兼容同步和异步外围应用,DC-DC升压IC

    CS57066支持22A 4.5V~24V输入,单节锂电池适用低静态电流,兼容同步和异步外围应用,DC-DC升压IC
    的头像 发表于 07-14 20:50 347次阅读
    CS57066<b class='flag-5'>支持</b>22A 4.5<b class='flag-5'>V</b>~24<b class='flag-5'>V</b>输入,单节锂电池适用低静态电流,兼容同步和异步外围应用,DC-DC升压IC

    K230支持ONVIF上传视频吗?

    K230支持ONVIF上传视频吗
    发表于 06-20 07:11

    HarmonyOS Next V2 @Local 和@Param

    HarmonyOS Next V2 @Local 和@Param @Local 背景 @Local 是 harmony 应用开发v2 版本 对标**@State**的状态管理修
    的头像 发表于 04-02 18:27 836次阅读
    HarmonyOS Next <b class='flag-5'>V2</b> @Local 和@Param

    HarmonyOS Next V2 @Monitor 和@Computed

    HarmonyOS Next V2 @Monitor 和@Computed @Monitor 介绍 @Monitor 是状态把管理 V2 版本的用于监听状态变量修改的技术。 它可以直接用在
    的头像 发表于 04-02 18:26 629次阅读

    何在Simulink启用ADC校准?

    何在 Simulink 启用 ADC 校准? V4.2.0 产品发布报告指出,它在块可用。但我在 ADC 配置块
    发表于 03-31 07:50

    请问STM32CubeIDE v1.16.1支持代码补全功能吗?如何开启呢?

    STM32CubeIDE v1.16.1支持代码补全功能吗?如何开启呢?
    发表于 03-14 06:47

    请问ADS1255/6支持菊花链吗?

    ADS1255/6支持菊花链吗?连接方法是否同ADS1271?菊花链连接以后各ADC是否同步采集,顺序输出数据?
    发表于 02-12 06:05

    请问ads1256支持8路的采样率是多少?

    ads1256支持30KSPS,这个怎么理解呀。是8路,每路都支持30K的采样率吗? 我这有个需求,8路,每路的采样率至少2K,能否支持
    发表于 12-31 06:59

    电平转换SN74LVCH16T245支持多大频率?20Mhz可以支持吗?

    您好,请问TI电平转换SN74LVCH16T245支持多大频率?20Mhz可以支持吗? 手册描述的PRR<10Mhz是指什么?
    发表于 12-30 07:51

    P82B96支持HDCP吗?

    你好:我用P89B96用做HDMI的DDC通道的I2C的转换,我现在是解决了II2问题,但是它里面有个HDCP保护协议通过DDC通道,感觉它有延时一样,不稳定。请问是否用P82B96支持HDCP?
    发表于 12-27 07:01

    ADS1256支持菊花链连接吗?

    求助:1、ADS1256支持菊花链连接吗? 2、如果不支持菊花链连接,能否把多片ADS1256挂在同一个SPI(CLK,MISO,MOSI)总线上,通过不同的CS来选择芯片? 3、多片ADS1256能否
    发表于 12-24 06:03

    TDC7201支持全双工SPI吗?

    1.TDC7201支持全双工SPI么?就是SCLK发送了8个地址位数据后,需要等待一会才发送时钟信号读取数据么?还是立马给时钟信号,就可以读取数据的呢? 2.采用模式1,单次测量TOF,出了
    发表于 12-11 08:01