RSS Kubernetes 博客 笔记

RSS Kubernetes 博客

Kubernetes 的官方主页,是一个容器编排系统,用于自动化容器化应用程序的部署、缩放和管理。该平台提供了 Kubernetes 的详细文档,Kubernetes 是 Cloud Native Computing Foundation 维护的一个项目。它包括关于使用 Kubernetes 运行无状态和有状态应用程序、批处理作业和 CI/CD 工作流的详细信息。该网站包括详细的指南、教程、参考资料、API 文档和社区参与计划,以帮助用户开始使用 Kubernetes 并充分利用其特点来高效地管理基于云的应用程序。

笔记线程

Volcano 是一款专为 Kubernetes 设计的云原生批处理调度器,面向高性能计算、AI/ML 及其他批处理工作负载。Kubernetes 最初是为长运行服务而构建,而批处理工作负载通常需要动态作业到达、资源竞争以及同时启动多个工作节点。Volcano 通过引入队列、优先级、配额和 Gang 调度等概念扩展了 Kubernetes,将工作负载视为整体而非独立的 Pod 进行管理。Volcano 为 Headlamp(一个可扩展的 Kubernetes Web UI)提供的插件将这些调度细节集成到单一界面中。该插件为 Volcano Jobs、Queues 和 PodGroups 提供专用视图,使批处理工作负载的运维和故障排查更加便捷。Job 视图显示工作负载状态、任务详情、Pod 状态,并支持直接执行挂起/恢复操作及访问日志。Queue 视图提供资源分配、容量及预留详情的洞察。PodGroup 视图则清晰展示 Gang 调度状态及潜在阻塞因素。关键特性是地图视图,它以可视化方式呈现 Jobs、Queues、PodGroups 和 Pod 之间的互联关系,有助于快速识别处于待处理或非进展状态的工作负载中的问题。该插件通过集中相关资源、结构化详情和运行时输出,增强了交互式故障排查体验,同时不替代用于自动化的 CLI 工具。未来的增强功能可能包括 Prometheus 集成及更丰富的调度洞察。用户可通过 Headlamp 的插件目录安装该插件,并提供反馈以推动其开发演进。
CdXz5zHNQW_lVauTs2nj6.png
CdXz5zHNQW_uA3Yt1MH58.png
本文聚焦于 SIG Storage,即负责持久化数据与卷管理的 Kubernetes 特殊兴趣组。SIG Storage 联合主席杨兴探讨了该小组从管理基础持久化卷到推进复杂存储功能的演进历程。Kubernetes 最初设计用于无状态工作负载,如今已支持有状态应用,因此需要专门的存储解决方案。SIG Storage 应运而生,引入了持久化卷(PersistentVolumes)和持久化卷声明(PersistentVolumeClaims)等基础原语。一项重大进展是容器存储接口(Container Storage Interface, CSI),它使第三方存储提供商能够在无需修改 Kubernetes 核心的情况下将其系统集成。当前工作包括卷组快照(Volume Group Snapshot)和变更块跟踪(Changed Block Tracking),前者支持崩溃一致的多卷快照,后者用于高效备份,两者近期均已晋升至稳定版本。容器对象存储接口(Container Object Storage Interface, COSI)也在推进中,旨在标准化对象存储集成。用户近期的收获包括 VolumeAttributesClass 晋升至通用可用(General Availability)阶段,允许动态调整存储属性(如 IOPS)。未来路线图涵盖卷健康检查(Volume Health),以提升运维可见性并实现潜在的自动修复。SIG Storage 寻求社区协助,包括修复漏洞、编写测试、审查代码以及对可变卷亲和性(Mutable PV Affinity)和卷复制等功能提供反馈。有状态工作负载面临的挑战包括数据重力、日常运维复杂性以及数据迁移。随着 AI 工作负载的增长,Kubernetes 中的存储预计将变得更加智能,对象存储的地位也将日益凸显。高性能、低延迟存储以及数据感知调度也是预期的趋势。SIG Storage 邀请社区参与,以应对这些不断演进的存储需求。
压力停滞信息(PSI)自 2018 年起已集成到 Linux 内核中,为在故障发生前识别资源饱和提供了高保真信号。与传统利用率指标不同,PSI 量化了 CPU、内存和 I/O 上的停滞任务及丢失时间。随着 Kubernetes v1.36 的发布,现已提供稳定的接口,用于在节点、Pod 和容器级别观察资源争用。PSI 提供停滞时间的累计总量以及移动平均值(10 秒、60 秒、300 秒),以区分瞬时尖峰与持续的资源紧张。SIG Node 对高密度工作负载(80+ 个 Pod)进行了广泛的性能测试,证明了 PSI 在生产环境中的就绪状态。通过切换 KubeletPSI 功能门控来测量的 Kubelet 开销显示,其对资源使用的影响微乎其微。Kubelet 的收集逻辑被证明非常轻量,能够无缝融入标准的维护周期,消耗的 CPU 资源低于 0.1 个核心或节点总容量的 2.5%。关于内核开销,在 Linux 内核中启用 PSI(psi=1 对比 psi=0)在重负载下导致一致的差值,为 0.037 至 0.125 个核心(占节点容量的 0.925% - 3.125%)。作为主要收集器的 kubelet 进程也保持了极低的 CPU 使用率,其尖峰不超过 0.25 个核心(6.25%),且持续时间未超过一秒。v1.36 中的改进包括更智能的指标发布机制:Kubelet 现在会在报告之前通过 cgroup 配置检测操作系统级别的 PSI 支持,从而防止出现误导性的零值指标。要使用 PSI,节点必须运行 Linux 内核 4.20+,使用 cgroup v2,并在操作系统层面启用 PSI(CONFIG_PSI=y,且无 psi=0 启动参数)。PSI 指标在 v1.36 中通常可用,无需功能门控选项。用户可以通过抓取 /metrics/cadvisor 端点或查询 Summary API 来获取数据。PSI 是 Linux 内核功能,在 Windows 节点上不可用。通过控制平面的 API 服务器代理到 Kubelet 的 HTTP API 可从 Summary API 获取实时压力数据,但这属于特权操作。
CdXz5zHNQW_xWB13lRlZh.png
Kubernetes v1.36 为卷组快照(volume group snapshots)提供了通用可用(General Availability, GA)支持,该功能此前曾作为 Alpha 和 Beta 阶段的增强特性。此功能利用扩展 API,支持对多个卷同时创建崩溃一致性快照。系统通过标签选择器对 PersistentVolumeClaim 对象进行分组,从而实现将工作负载恢复到一致恢复点。该功能仅支持 CSI 卷驱动,为需要写入顺序一致性的多卷应用程序提供了显著优势。此前,若在不同时间点单独对卷进行快照,可能导致数据不一致,尤其对于多卷应用程序而言。卷组快照消除了手动使应用程序静默的需求,可在无需繁琐、顺序执行单个卷快照的情况下,为组内所有卷提供崩溃一致性。Kubernetes 通过三种自定义 API 类型管理卷组快照:VolumeGroupSnapshot、VolumeGroupSnapshotContent 和 VolumeGroupSnapshotClass。这些 CRD 在 GA 版本中已晋升至 v1,分别允许用户请求卷组快照、跟踪其已配置的资源以及定义其创建策略。GA 版本带来了增强的稳定性、错误修复以及基于先前 Beta 版本反馈改进的 restoreSize 报告。要使用此功能,用户需对其 PersistentVolumeClaim 添加标签以进行分组,然后定义一个 VolumeGroupSnapshot 对象,其选择器匹配这些标签,并指定一个 VolumeGroupSnapshotClass。在恢复过程中,新的 PersistentVolumeClaim 将从属于更大 VolumeGroupSnapshot 的单个 VolumeSnapshot 对象创建。存储供应商可通过在其 CSI 驱动中实现新的组控制器服务和 RPC 来添加支持。
Kubernetes v1.36 中的动态资源分配(DRA)引入了重大进展,将其能力从专用硬件扩展至原生资源(如 CPU 和内存)。对各类硬件(包括网络)的驱动支持正在扩展,使 DRA 成为一种更硬件无关的解决方案。多项关键功能已毕业,增强了调度灵活性和集群利用率。优先级列表功能为设备请求提供回退偏好,提升了资源分配效率。扩展资源支持允许通过传统的扩展资源逐步过渡到 DRA。可划分设备为物理硬件动态划分为更小的逻辑实例提供了原生的 DRA 支持。设备污点使管理员能够更有效地管理硬件,通过防止故障设备被分配或预留特定硬件。设备绑定条件通过延迟 Pod 提交直至外部资源完全就绪,提高了调度可靠性。资源健康状态直接在 Pod 状态中暴露设备健康信息,有助于快速识别和应对硬件故障。新的 Alpha 功能包括针对工作负载的 ResourceClaim 支持,通过跨 PodGroup 管理共享资源来优化大规模 AI/ML。节点可分配资源将 CPU 和内存分配纳入 DRA 范畴,支持细粒度性能调优。DRA 资源可用性可见性为管理员提供实时设备容量信息,以更好地进行规划。确定性设备选择允许驱动通过字典序排序影响调度。容器中的可发现设备元数据为驱动向容器暴露设备属性提供了标准协议。未来路线图侧重于成熟现有功能,提升性能、可扩展性,以及与工作负载感知和拓扑感知调度的集成,并重点强调将用户从 Device Plugin 迁移至 DRA。
Kubernetes v1.36 引入了作为 Alpha 特性的 Pod 级资源管理器(Pod-Level Resource Managers),以增强对性能敏感型工作负载的资源管理。该特性将 kubelet 的拓扑管理器(Topology Manager)、CPU 管理器和内存管理器的功能扩展至以 Pod 为中心的资源分配模型,超越了以往仅针对容器的规格定义。此举解决了为主应用容器提供独占且与 NUMA 对齐的资源,同时高效支持轻量级边车容器(sidecars)的挑战。此前,要实现可预测的性能,通常需为所有容器分配独占资源,这对边车容器而言是一种浪费;反之,若不这样做,则会牺牲 Pod 的 Guaranteed QoS。Pod 级资源管理器支持混合分配模式,使高性能工作负载能够在不浪费资源的前提下实现 NUMA 对齐。例如,一个对延迟敏感的数据库 Pod 可使其主容器获得独占的 CPU 和内存,而边车容器则共享一个独立的 Pod 共享池(pod shared pool),该池与其他节点资源隔离。另一个应用场景涉及机器学习工作负载,其中训练容器获得独占的 NUMA 对齐资源,而服务网格边车容器则在节点范围的共享池中运行。CPU 隔离通过为独占容器禁用 CFS 配额执行,并在共享池容器层面强制执行来实现。启用该功能需要特定的 kubelet 功能门控(feature gates)、Topology Manager 策略以及静态的 CPU 和内存管理器配置。新的 kubelet 指标提供了对资源分配和容器分配的可见性。该功能目前处于 Alpha 阶段,存在已知限制和注意事项,欢迎用户通过 Kubernetes 社区渠道提供反馈。
CdXz5zHNQW_2M0WB6HN35.png
CdXz5zHNQW_lzXiZD2Vjv.png