云原生之深入解析如何在Kubernetes中快速启用Cgroup V2支持

2023-12-17 22:30

本文主要是介绍云原生之深入解析如何在Kubernetes中快速启用Cgroup V2支持,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、cgroup v2 有哪些优势?

  • Linux 中有两个 cgroup 版本:cgroup v1 和 cgroup v2。cgroup v2 是新一代的 cgroup API。Kubernetes 自 v1.25 起 cgroup2 特性正式 stable。
  • cgroup v2 提供了一个具有增强资源管理能力的统一控制系统,cgroup v2 对 cgroup v1 进行了多项改进,例如:
    • API 中单个统一的层次结构设计;
    • 更安全的子树委派给容器;
    • 更新的功能特性, 例如压力阻塞信息(Pressure Stall Information,PSI);
    • 跨多个资源的增强资源分配管理和隔离;
    • 统一核算不同类型的内存分配(网络内存、内核内存等);
    • 考虑非即时资源变化,例如页面缓存回写;
  • 一些 Kubernetes 特性专门使用 cgroup v2 来增强资源管理和隔离。例如,MemoryQoS 特性改进了内存 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 v1.4 和更高版本
    • cri-o v1.20 和更高版本
    • kubelet 和容器运行时被配置为使用 systemd cgroup 驱动。

三、使用 cgroup v2

① 启用并检查 Linux 节点的 cgroup v2

  • 以 Debian 11 Bullseye + containerd v1.4 为例,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。
  • 如果是树莓派, 标准 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 命令:
kubeadm init --config kubeadm-config.yaml
  • Kubeadm 对集群所有的节点,使用相同的 KubeletConfiguration,KubeletConfiguration 存放于 kube-system 命名空间下的某个 ConfigMap 对象中。
  • 执行 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 监控

  • cgroup v2 使用一个与 cgroup v1 不同的 API,因此如果有任何应用直接访问cgroup 文件系统, 则需要将这些应用更新为支持 cgroup v2 的版本。例如:
    • 一些第三方监控和安全代理可能依赖于 cgroup 文件系统,要将这些代理更新到支持 > cgroup v2 的版本。
    • 如果以独立的 DaemonSet 的形式运行 cAdvisor 以监控 Pod 和容器, 需将其更> 新到 v0.43.0 或更高版本。
    • 如果使用 JDK,推荐使用 JDK 11.0.16 及更高版本或 JDK 15 及更高版本, 以便> 完全支持 cgroup v2。

五、总结

  • Kubernetes 自 v1.25 起 cgroup2 特性正式 stable,cgroup2 相比 cgroup v1 有以下优势:
    • API 中单个统一的层次结构设计;
    • 更安全的子树委派给容器;
    • 更新的功能特性, 例如压力阻塞信息(Pressure Stall Information,PSI);
    • 跨多个资源的增强资源分配管理和隔离;
    • 统一核算不同类型的内存分配(网络内存、内核内存等);
    • 考虑非即时资源变化,例如页面缓存回写;
  • 推荐在使用 Kubernetes v1.25 及以上版本时,使用支持 cgroup v2 的linux 和 CRI,并启用 Kubernetes 的 cgroup v2 功能。

这篇关于云原生之深入解析如何在Kubernetes中快速启用Cgroup V2支持的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/506096

相关文章

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

在C#中合并和解析相对路径方式

《在C#中合并和解析相对路径方式》Path类提供了几个用于操作文件路径的静态方法,其中包括Combine方法和GetFullPath方法,Combine方法将两个路径合并在一起,但不会解析包含相对元素... 目录C#合并和解析相对路径System.IO.Path类幸运的是总结C#合并和解析相对路径对于 C

Rust中的Option枚举快速入门教程

《Rust中的Option枚举快速入门教程》Rust中的Option枚举用于表示可能不存在的值,提供了多种方法来处理这些值,避免了空指针异常,文章介绍了Option的定义、常见方法、使用场景以及注意事... 目录引言Option介绍Option的常见方法Option使用场景场景一:函数返回可能不存在的值场景

Ubuntu 怎么启用 Universe 和 Multiverse 软件源?

《Ubuntu怎么启用Universe和Multiverse软件源?》在Ubuntu中,软件源是用于获取和安装软件的服务器,通过设置和管理软件源,您可以确保系统能够从可靠的来源获取最新的软件... Ubuntu 是一款广受认可且声誉良好的开源操作系统,允许用户通过其庞大的软件包来定制和增强计算体验。这些软件

Java解析JSON的六种方案

《Java解析JSON的六种方案》这篇文章介绍了6种JSON解析方案,包括Jackson、Gson、FastJSON、JsonPath、、手动解析,分别阐述了它们的功能特点、代码示例、高级功能、优缺点... 目录前言1. 使用 Jackson:业界标配功能特点代码示例高级功能优缺点2. 使用 Gson:轻量

Java如何接收并解析HL7协议数据

《Java如何接收并解析HL7协议数据》文章主要介绍了HL7协议及其在医疗行业中的应用,详细描述了如何配置环境、接收和解析数据,以及与前端进行交互的实现方法,文章还分享了使用7Edit工具进行调试的经... 目录一、前言二、正文1、环境配置2、数据接收:HL7Monitor3、数据解析:HL7Busines

python解析HTML并提取span标签中的文本

《python解析HTML并提取span标签中的文本》在网页开发和数据抓取过程中,我们经常需要从HTML页面中提取信息,尤其是span元素中的文本,span标签是一个行内元素,通常用于包装一小段文本或... 目录一、安装相关依赖二、html 页面结构三、使用 BeautifulSoup javascript

网页解析 lxml 库--实战

lxml库使用流程 lxml 是 Python 的第三方解析库,完全使用 Python 语言编写,它对 XPath表达式提供了良好的支 持,因此能够了高效地解析 HTML/XML 文档。本节讲解如何通过 lxml 库解析 HTML 文档。 pip install lxml lxm| 库提供了一个 etree 模块,该模块专门用来解析 HTML/XML 文档,下面来介绍一下 lxml 库

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

深入探索协同过滤:从原理到推荐模块案例

文章目录 前言一、协同过滤1. 基于用户的协同过滤(UserCF)2. 基于物品的协同过滤(ItemCF)3. 相似度计算方法 二、相似度计算方法1. 欧氏距离2. 皮尔逊相关系数3. 杰卡德相似系数4. 余弦相似度 三、推荐模块案例1.基于文章的协同过滤推荐功能2.基于用户的协同过滤推荐功能 前言     在信息过载的时代,推荐系统成为连接用户与内容的桥梁。本文聚焦于