云原生之深入解析如何在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支持
一、cgroup v2 有哪些优势? Linux 中有两个 cgroup 版本:cgroup v1 和 cgroup v2。cgroup v2 是新一代的 cgroup API。Kubernetes 自 v1.25 起 cgroup2 特性正式 stable。cgroup v2 提供了一个具有增强资源管理能力的统一控制系统,cgroup v2…...

QT实现四则运算计算器
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->setMaximumSize(240,300);this->setMinimumSize(240,300);this->setWindowTitle("计算器&…...

mysql的redolog、undo、binlog的作用
概览: MySQL三大日志包括:undolog,redo log,binlog,它们分别有以下作用: undolog:是Innodb存储引擎事务生成的日志。用于事务的回滚和MVCC,保证了事务的原子性。 redo log&#x…...

京东大数据-10月京东咖啡机市场销售数据分析-销售额增长41%,德龙等海外头部品牌店铺数据分析
如今,咖啡已经成为了人们日常生活中流行的生活饮品之一,消费量较大。随着咖啡的受众人群越来越多,消费者们对咖啡品质的要求也愈来愈高,而咖啡品质除了受咖啡豆质量影响外,还受制作过程中煮泡时间、水温和物料数量等因…...

【Android12】WindowManagerService架构分析
Android WindowManagerService架构分析 WindowManagerService(以下简称WMS) 是Android的核心服务。WMS管理所有应用程序窗口(Window)的Create、Display、Update、Destory。 因为Android系统中只有一个WMS(运行在SystemServer进程),可以称其为…...

部署LVS的NET模式
实验准备 #负载调度器# 192.168.116.40 #内网 12.0.0.100 #外网 先添加双网卡 #web服务器# 192.168.116.20 #web1 192.168.116.30 #web2 #nfs共享服务# 192.168.116.10 #nfs systemctl stop firewalld setenforce 0 1.nfs共享文件 1…...

如何在Facebook Business Manager进行企业认证
Facebook Business Manager,简称BM,按照字面意思理解就是Facebook官方的商务管理平台,是供广告主团队去使用的一个管理工具。BM可以绑定Facebook公共主页、广告账户等一系列Facebook账号。通过BM,企业就可以在一个后台,…...

推荐一款好用的包含表格识别的OCR网站
在当今数字化的时代,文字和表格识别已经成为了许多行业的关键技术。无论是处理大量的纸质文档,还是从网络上收集数据,OCR(光学字符识别)技术都扮演着重要的角色。然而,对于许多用户来说,OCR软件…...
linux 块设备驱动程序介绍
Linux块设备驱动是Linux操作系统中用于处理块设备的设备驱动程序。块设备是指以固定大小的块单位进行访问的存储设备,例如硬盘、固态硬盘和USB存储设备等。 Linux块设备驱动负责管理块设备的读写操作,并将数据传输到相应的存储设备上。它还负责处理块设…...

知识付费小程序开发:构建个性化学习平台的技术实践
随着在线学习和知识付费的兴起,开发一款知识付费小程序成为了创新的热点之一。本文将通过使用Node.js、Express和MongoDB为例,演示如何构建一个基础的知识付费小程序后端,并实现用户认证和知识内容管理。 1. 初始化项目 首先,确…...

OpenCV极坐标变换函数warpPolar的使用
学更好的别人, 做更好的自己。 ——《微卡智享》 本文长度为1702字,预计阅读4分钟 前言 前阵子在做方案时,得了几张骨钉的图片,骨科耗材批号效期管理一直是比较麻烦的,贴RFID标签成本太高,所以一般考虑还是…...

类与接口常见面试题
抽象类和接口的对比 抽象类是用来捕捉子类的通用特性的。接口是抽象方法的集合。 从设计层面来说,抽象类是对类的抽象,是一种模板设计,接口是行为的抽象,是一种行为的规范。 相同点 接口和抽象类都不能实例化都位于继承的顶端…...

Windows mysql5.7 执行查询/开启/测试binlog---简易记录
前言:基于虚拟机mysql版本为5.7,增量备份测试那就要用到binlog… 简述:二进制日志(binnary log)以事件形式记录了对MySQL数据库执行更改的所有操作。 binlog是记录所有数据库表结构变更(例如CREATE、ALTER…...

文档安全加固:零容忍盗窃,如何有效预防重要信息外泄
文档安全保护不仅需要从源头着手,杜绝文档在使用和传播过程中产生的泄密风险,同时还需要对文档内容本身进行有效的保护。为了防范通过拷贝、截屏、拍照等手段盗窃重要文档内容信息的风险,迅软DSE加密软件提供了文档加密保护功能,能…...

前端如何设置模板参数
1.背景: 最近接到一个需求,在一个类似chatGpt的聊天工具中,要在对话框中设置模板,后端提供了很多模板参数,然后要求将后端返回的特殊字符转成按钮,编辑完成后在相应的位置拼接成字符串。 2.效果:…...
06 使用v-model实现双向数据绑定
概述 Vue achieves two-way data binding by creating a dedicated directive that watches a data property within your Vue component. The v-model directive triggers data updates when the target data property is modified on the UI. Vue 通过创建一个专用指令来观…...

【C++11特性篇】C++11中新增的initializer_list——初始化的小利器(2)
前言 大家好吖,欢迎来到 YY 滴C11系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! 目录 一.探究std::initializer_list是什么…...

计算机网络传输层(期末、考研)
计算机网络总复习链接🔗 目录 传输层的功能端口UDP协议UDP数据报UDP的首部格式UDP校验 TCP协议(必考)TCP报文段TCP连接的建立TCP连接的释放TCP的可靠传输TCP的流量控制零窗口探测报文段 TCP的拥塞控制慢开始和拥塞控制快重传和快恢复 TCP和U…...

【STM32入门】4.1中断基本知识
1.中断概览 在开展红外传感器遮挡计次的实验之前,有必要系统性的了解“中断”的基本知识. 中断是指:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当前正在运行的程序,转…...

HCIA-H12-811题目解析(3)
1、【单选题】 以下关于路由器的描述,说法错误的是? 2、【单选题】某网络工程师在输入命令行时提示如下信息:Error:Unrecognized command foun at position.对于该提示信息说法正确的是? 3、【单选题】如下图所示的网络…...

智慧医疗能源事业线深度画像分析(上)
引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...