Kubernetes架构-节点与控制面之间的通信

作者: K8SStack

在 Linux 上,cgroup 约束分配给进程的资源。

和底层容器运行时都需要对接 cgroup 来强制执行[为 Pod 和容器管理资源],

这包括为容器化工作负载配置 CPU/内存请求和限制。 Linux 中有两个 cgroup 版本:cgroup v1 和 cgroup v2。cgroup v2 是新一代的 cgroup API。

什么是 cgroup v2?

cgroup v2 是 Linux cgroup API 的下一个版本。cgroup v2 提供了一个具有增强资源管理能力的统一控制系统。 cgroup v2 对 cgroup v1 进行了多项改进,例如:

  • API 中单个统一的层次结构设计
  • 更安全的子树委派给容器
  • 更新的功能特性, 例如压力阻塞信息(Pressure Stall Information,PSI)
  • 跨多个资源的增强资源分配管理和隔离
  • 统一核算不同类型的内存分配(网络内存、内核内存等)
  • 考虑非即时资源变化,例如页面缓存回写

一些 Kubernetes 特性专门使用 cgroup v2 来增强资源管理和隔离。

例如,[MemoryQoS] 特性改进了内存 QoS 并依赖于 cgroup v2 原语。

使用 cgroup v2(using-cgroupv2)

使用 cgroup v2 的推荐方法是使用一个默认启用 cgroup v2 的 Linux 发行版。

要检查你的发行版是否使用 cgroup v2,请参阅[识别 Linux 节点上的 cgroup 版本]。

要求(requirements)

cgroup v2 具有以下要求:

  • 操作系统发行版启用 cgroup v2
  • Linux 内核为 5.8 或更高版本
  • 容器运行时支持 cgroup v2。例如:
  • containerd v1.4 和更高版本
  • cri-o v1.20 和更高版本
  • kubelet 和容器运行时被配置为使用 [systemd cgroup 驱动]

Linux 发行版 cgroup v2 支持

有关使用 cgroup v2 的 Linux 发行版的列表,

请参阅 [cgroup v2 文档]。

  • Container-Optimized OS(从 M97 开始)
  • Ubuntu(从 21.10 开始,推荐 22.04+)
  • Debian GNU/Linux(从 Debian 11 Bullseye 开始)
  • Fedora(从 31 开始)
  • Arch Linux(从 2021 年 4 月开始)
  • RHEL 和类似 RHEL 的发行版(从 9 开始)

要检查你的发行版是否使用 cgroup v2,

请参阅你的发行版文档或遵循[识别 Linux 节点上的 cgroup 版本]中的指示说明。

你还可以通过修改内核 cmdline 引导参数在你的 Linux 发行版上手动启用 cgroup v2。

如果你的发行版使用 GRUB,则应在 /etc/default/grub 下的 GRUB_CMDLINE_LINUX 中添加 systemd.unified_cgroup_hierarchy=1,然后执行 sudo update-grub。不过,推荐的方法仍是使用一个默认已启用 cgroup v2 的发行版。

迁移到 cgroup v2(migrating-cgroupv2)

要迁移到 cgroup v2,需确保满足[要求],然后升级到一个默认启用 cgroup v2 的内核版本。 kubelet 能够自动检测操作系统是否运行在 cgroup v2 上并相应调整其操作,无需额外配置。

切换到 cgroup v2 时,用户体验应没有任何明显差异,除非用户直接在节点上或从容器内访问 cgroup 文件系统。 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

识别 Linux 节点上的 cgroup 版本

cgroup 版本取决于正在使用的 Linux 发行版和操作系统上配置的默认 cgroup 版本。

要检查你的发行版使用的是哪个 cgroup 版本,请在该节点上运行 stat -fc %T /sys/fs/cgroup/ 命令:

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

对于 cgroup v2,输出为 cgroup2fs

对于 cgroup v1,输出为 tmpfs

  • 进一步了解 cgroups
  • 进一步了解[容器运行时]
  • 进一步了解 [cgroup 驱动]

文章列表

更多推荐

更多
  • Azure Kubernetes微服务教程-六、AK 的 CI/CD 介绍,快速浏览 DevOps,本次练习的目标,使用 Azure 门户创建 Azure Kubernetes 服务,使用 Azure 门户创建 Azure 容器实例,使用 Visual Studio 构建示例应用,使用 Azure Dev
    Apache CN

  • Azure Kubernetes微服务教程-五、保护和监控 AKS 上运行的应用 介绍,安全概念,蓝色库柏服务清单,监控概念,摘要,主安全,节点安全性,集群升级,网络安全性,不可告人的秘密,安全概念:结论,容器洞察,Azure 监视器功能,介绍首先,祝贺你完成了本书的 60%。在阅读完架构设计和模式之后,
    Apache CN

  • Azure Kubernetes微服务教程-二、微服务:架构和设计考虑 介绍,微服务架构优势,衍生商业价值,定义面向目标的分层方法,应用面向目标的分层方法,微服务设计,微服务的系统方法,微服务设计流程,目标和原则,平台,文化,摘要,附录,模块性,粘结性,相互关系,微服务架构目标和优势的成熟度模型,服务,解决
    Apache CN

  • Azure Kubernetes微服务教程-三、微服务设计模式 介绍,服务设计,微服务边界,微服务边界和领域驱动设计,微服务的 API 设计,数据和微服务,分布式事务和传奇,异步消息传递和微服务,处理依赖性,系统设计和操作,独立可部署性,您需要更多服务器吗?,坞站和微服务,服务发现的作用,对 API
    Apache CN

  • Azure Kubernetes微服务教程-一、微服务和 AKS 简介 介绍,分布式计算的历史,什么是微服务?,单片与微服务,云原生架构简介,企业如何从云原生应用中获益,AKS 及其组件介绍,摘要,附录,客户,组件技术,网络服务,面向服务的架构,容器图像,介绍恭喜你,你向更好的理解微服务迈进了一
    Apache CN

  • Azure Kubernetes微服务教程-四、容器和 Azure Kubernetes 服务 Base Layer,Hello World,Notice the change in base image.,note down the container name,Exit from rediscli and then from
    Apache CN

  • Azure Kubernetes服务器-九、支持 Azure Arc 的 Kubernetes:入门 什么是支持 Azure Arc 的 Kubernetes,支持 Azure Arc 的 Kubernetes 用例,azure arcenabled kubers 体系结构,将 Kubernetes 集群连接到 Azure Arc,使用
    Apache CN

  • Azure Kubernetes服务器-八、GitOps 洞察 Git 概述,GitHub 概述,GitOps 概述,摘要, 部署和管理 Kubernetes 集群只是运行 Kubernetes 集群的生命周期的一部分,即使是在跨多个云的情况下。您还需要在 Kubernetes 上部署和运行您的应用
    Apache CN

  • Azure Kubernetes服务器-七、Azure Arc 服务器的法规和安全合规性 Microsoft Defender for Cloud for Azure Arc 服务器,综合脆弱性评估,微软哨兵和 Azure Arc 服务器,Azure Arc SQL Server,摘要,微软云卫士,面向云工作负载保护的 Mi
    Apache CN

  • Azure Kubernetes服务器-六、混合服务器监控解决方案 解决方案高级功能,蔚蓝灯塔,弧蓝,Azure 策略,Azure 日志分析,Azure 自动化,Azure 监视器,Azure 逻辑应用,Azure 工作簿,摘要,解决方案图,特定监控功能,Azure Arc 服务器,Azure 策略分配
    Apache CN

  • 近期文章

    更多
    文章目录

      推荐作者

      更多