llm-wiki wiki · analysis 2026-07-07

这页合并讲 sig-node 里除 DRA 和 in-place resize 之外的核心 feature:kubelet/CRI runtime 边界、CPU/Memory/Topology Manager、Pod lifecycle、安全隔离、节点可观测和 resource health。逐个 KEP 的 Alpha/Beta/GA、是否实现和 feature gate 见 kubernetes-keps-implementation-matrix

一句话定位

SIG Node 的核心设计方向是把 kubelet 从“绑定某个 runtime 和一堆节点本地实现细节的执行器”,演进为“通过 CRI、resource managers、status/metrics、security primitives 管理节点执行状态的标准控制点”。

Runtime Boundary: kubelet / CRI / RuntimeClass

2040-kubelet-cri2221-remove-dockershim585-runtime-class 是 runtime 边界的基础线:

kubelet
  |
  +-- CRI
        |
        +-- containerd
        +-- CRI-O
        +-- sandboxed runtime
        +-- Windows / other runtimes

Pod.spec.runtimeClassName
  |
  +-- runtime handler selection

设计意义:

边界判断:kubelet 负责 Kubernetes Pod lifecycle 和节点资源语义;runtime 负责容器创建、运行、状态、日志和低层隔离执行。

Resource Managers

CPU Manager、Memory Manager、Topology Manager 是性能型 workload 的节点侧底座。

Manager 代表 KEP 作用
CPU Manager 3570 为 Guaranteed / latency-sensitive workload 分配 cpuset。
Memory Manager 1769 管理 memory locality,与 Topology Manager 交换 hint。
Topology Manager 693, 3545 聚合 CPU、memory、device 的 NUMA hint,决定是否满足拓扑对齐策略。
Pod-level resource managers 5526 从 container scope 扩展到 Pod scope。

这组 feature 和 kubernetes-in-place-pod-resize-design 强相关。resize 如果只改 spec,不理解 CPU Manager static policy、Memory Manager、Topology Manager,就会在高性能节点上失败或造成不可解释状态。

Device Plugin / CDI / PodResources

传统 device plugin 仍然是 Kubernetes 设备接入的稳定路径:

这条线和 kubernetes-dra-design-deep-dive 的关系是:device plugin 是旧但稳定的离散设备模型;DRA 是新的结构化 claim 模型;CDI 是两者都可使用的 runtime 注入表达。

Pod Lifecycle

SIG Node 的 lifecycle KEP 不是杂项,它们决定 kubelet 如何解释 Pod 内部容器关系:

Feature KEP 设计意义
Sidecar containers 753 用特殊 initContainer 语义表达 sidecar 启动、就绪、终止顺序。
Ephemeral containers 277 支持 debug container 注入,不改变正常 workload spec。
Graceful node shutdown 2000, 2712 节点关机时按优先级有序终止 Pod。
Container restart policy 5307 细化 container 级 restart 行为。
Container restart termination 4438 处理 Pod 终止期间 sidecar restart 行为。
EvictionRequest API 4563 给 eviction 请求更清晰的 API 表达。

Sidecar containers 对 Job、service mesh、agent runtime 都很重要:没有明确 sidecar 语义时,Job 完成、主容器退出、sidecar 终止顺序会变得混乱。

Security / Isolation

节点安全线覆盖 user namespace、rootless kubelet、seccomp、cgroup v2 和 kubelet authz:

Feature 代表 KEP 设计意义
User namespaces 127 Pod 内 root 不再等价宿主 root,降低逃逸影响面。
Rootless kubelet 2033 kubelet 自身降低特权运行需求。
HostNetwork userns 5607 让 HostNetwork Pod 也能受 user namespace 保护。
Seccomp by default 2413 默认系统调用限制。
Fine-grained kubelet authz 2862 缩小 kubelet API 权限面。
cgroup v2 / remove cgroup v1 2254, 5573 统一现代 Linux resource control 基础。

这组 KEP 的共同方向是:把“容器隔离靠 runtime 默认行为”升级为“Pod API、kubelet、runtime、kernel primitives 明确协作”。

Observability / Node Health

可观测线是 autoscaling、scheduling 和排障的输入信号:

Feature KEP 作用
Resource metrics endpoint 727 kubelet 资源指标标准入口。
CRI pod/container stats 2371 从 cAdvisor 依赖转向 CRI stats。
PSI metrics 4205 暴露 CPU/memory/io pressure stall information。
PSI node conditions 5394 将 PSI 上升为 Node Conditions,便于调度/自动化响应。
Resource health in Pod status 4680 Device Plugin / DRA 资源健康进入 Pod status。
Node declared features 5328 节点能力声明,为调度和控制器提供结构化输入。

2371metrics-server 和 HPA 都重要:如果 kubelet 的 stats 来源不稳定,autoscaling 的输入就不可靠。4680 对 GPU/DRA workload 重要:Pod pending 或 degraded 时,用户需要知道是设备健康而不是普通资源不足。

合并设计图

Pod API
  |
  +-- runtimeClass / sidecar / userns / resize / resource claims
  |
kubelet
  |
  +-- CRI runtime boundary
  +-- CPU / Memory / Topology Manager
  +-- Device Plugin / DRA kubelet plugin / CDI
  +-- Pod lifecycle and eviction
  +-- Pod status / Node conditions / metrics
  |
container runtime + kernel
  |
  +-- cgroups / namespaces / seccomp / devices

和其他设计页的关系

关键失败模式

失败模式 设计处理
kubelet/runtime 配置不一致 CRI cgroup driver detection、RuntimeClass。
container stats 来源不统一 CRI pod/container stats。
NUMA/CPU/device 不对齐 Topology Manager 聚合 hints。
sidecar 阻塞 Job 完成或终止 Sidecar containers 明确 lifecycle。
Pod root 权限过大 user namespaces、rootless kubelet、seccomp。
设备异常不可见 resource health in Pod status。
节点 pressure 只能靠人工看指标 PSI metrics -> Node Conditions。

关键 KEP 实现状态

KEP 当前状态 Alpha / Beta / GA Feature gate 关键实现路径
2040-kubelet-cri implementable / beta,CRI 支撑主线已长期使用但 metadata 未 GA v1.5 / v1.23 / - - kubelet 通过 CRI 管理 runtime,Docker 细节退出 kubelet 核心。
2221-remove-dockershim implemented / stable,已实现/GA - / - / - - 移除 kubelet 内置 dockershim。
585-runtime-class implemented / stable,已实现/GA v1.12 / v1.14 / v1.20 RuntimeClass Pod 通过 runtimeClassName 选择 runtime handler。
3570-cpumanager implemented / stable,已实现/GA v1.8 / v1.10 / v1.26 CPUManager kubelet static policy 为 Guaranteed Pod 分配 cpuset。
1769-memory-manager implemented / stable,已实现/GA v1.21 / v1.22 / v1.32 MemoryManager kubelet 管理 NUMA-aware memory allocation。
693-topology-manager implemented / stable,已实现/GA v1.16 / v1.18 / v1.27 TopologyManager 聚合 CPU/memory/device hints,决定 NUMA 对齐。
3573-device-plugin implemented / stable,已实现/GA v1.8 / v1.10 / v1.26 DevicePlugins kubelet device plugin API。
4009-add-cdi-devices-to-device-plugin-api implemented / stable,已实现/GA v1.28 / v1.29 / v1.31 DevicePluginCDIDevices device plugin 可返回 CDI devices。
3695-pod-resources-for-dra implemented / stable,已实现/GA v1.27 / v1.34 / v1.36 KubeletPodResourcesDynamicResource PodResources API 暴露 DRA resources。
753-sidecar-containers implemented / stable,已实现/GA v1.28 / v1.29 / v1.33 SidecarContainers 用 restartable init containers 表达 sidecar lifecycle。
127-user-namespaces implemented / stable,已实现/GA v1.25 / v1.35 / v1.36 UserNamespacesSupport Pod user namespace 隔离。
2033-kubelet-in-userns-aka-rootless implementable / beta,仍在 beta v1.22 / v1.37 / - KubeletInUserNamespace kubelet rootless/user namespace 运行。
5607-hostnetwork-userns implementable / alpha,仍在 alpha v1.35 / - / - UserNamespacesHostNetworkSupport HostNetwork Pod 使用 user namespaces。
2371-cri-pod-container-stats implementable / beta,仍在 beta v1.29 / v1.37 / - PodAndContainerStatsFromCRI kubelet Pod/container stats 迁往 CRI。
4205-psi-metric implemented / stable,已实现/GA v1.33 / v1.34 / v1.36 KubeletPSI kubelet 暴露 PSI metrics。
5394-psi-node-conditions implementable / alpha,仍在 alpha v1.36 / - / - PSINodeCondition PSI pressure 转为 Node Conditions。
4680-add-resource-health-to-pod-status implementable / beta,仍在 beta v1.31 / v1.36 / v1.37 ResourceHealthStatus Device Plugin/DRA resource health 写入 Pod status。
5328-node-declared-features implementable / stable,GA 目标已达 v1.35 / v1.36 / v1.37 NodeDeclaredFeatures 节点能力结构化声明,供调度/控制器消费。

追踪重点