技术博客

Kubernetes v1.36 Haru 发布:70 个增强功能全解析

Kubernetes v1.36(代号 Haru)于 2026 年 4 月正式发布,带来 70 个增强功能——18 个晋升 Stable、25 个进入 Beta、25 个全新 Alpha。本文重点解析最具实用价值的变化:User Namespaces 正式 GA(容器隔离再进一步)、Mutating Admission Policies GA(无需 Webhook 即可做变更控制)、In-Place Pod 资源调整 GA(不重启修改 CPU/内存)、Sidecar 容器生命周期正式稳定,以及 Ingress NGINX 已于 2026 年 3 月正式退役、社区建议迁往 Gateway API。

Kubernetesv1.36HaruUser NamespacesGateway APISidecar云原生容器

Kubernetes v1.36 于 2026 年 4 月 22 日正式发布,代号 Haru(春),是 2026 年第一个主要版本。这次发布包含 70 个增强功能:18 个晋升 Stable、25 个进入 Beta、25 个全新 Alpha。

本文挑出最值得运维和开发团队关注的变化,逐一说清楚它能解决什么问题。


版本信息速览

版本:  v1.36.0(2026-04-22 发布)
代号:  Haru(日语"春")
最新补丁:v1.36.2(2026-06-09)
EOL:   2027-06-28

增强统计:
  Stable(GA):18 个
  Beta:        25 个
  Alpha:       25 个
  总计:        70 个

重要:Ingress NGINX 已正式退役

在讲新功能之前,先说一个影响面最广的变化。

Ingress NGINX 于 2026 年 3 月 24 日停止维护,Kubernetes SIG Network 和安全响应委员会宣布:从该日起,不再有新版本发布、不再修复 Bug、不再修补安全漏洞。

受影响的仓库:kubernetes/ingress-nginx
停止维护时间:2026-03-24

如果你的集群仍在使用 ingress-nginx:
  ✗ 不会再有安全补丁
  ✗ 不会再有 Kubernetes 新版本的兼容性更新
  → 应当尽快迁移到替代方案

推荐迁移方向:
  Gateway API(官方推荐,是 Ingress 的继任者)
  Envoy Gateway(基于 Gateway API 的实现)
  Cilium Gateway(如果集群已用 Cilium CNI)
  Nginx Gateway Fabric(NGINX 官方支持的 Gateway API 实现)

迁移方法会在另一篇文章中详细讲解,这里先提醒大家尽快评估影响范围。


GA(Stable)重点功能

1. User Namespaces 正式 GA

User Namespaces 是 Linux 内核功能,允许容器内的 root 用户映射到宿主机上的非特权用户。v1.36 让这个功能正式进入 Stable 状态。

功能解决的问题:
  容器内进程以 root(UID 0)运行很常见
  但如果容器逃逸,宿主机上对应的也是 root → 危险
  
  User Namespaces 的作用:
  容器内 UID 0(root)→ 宿主机 UID 65536(普通用户)
  即使容器被突破,攻击者拿到的也只是宿主机的非特权身份

启用方式:
  在 Pod spec 中设置 hostUsers: false

示例:
apiVersion: v1
kind: Pod
metadata:
  name: secure-pod
spec:
  hostUsers: false    # 启用 User Namespace 隔离
  containers:
  - name: app
    image: nginx:alpine
    securityContext:
      runAsUser: 0    # 容器内以 root 运行
                      # 但宿主机上映射到非特权 UID
注意事项:
  需要宿主机内核 >= 5.19(推荐 6.x)
  需要使用支持 idmap 挂载的文件系统(ext4/xfs/overlayfs)
  hostNetwork: true 或 hostPID: true 时不可用
  
安全收益:
  明显降低容器逃逸的影响半径
  不需要改应用代码,只改 Pod spec

2. Mutating Admission Policies GA

v1.36 之前,如果你需要自动修改进入集群的资源(比如给所有 Pod 自动加标签、注入 sidecar),必须部署和维护一个 Webhook 服务。

现在有了 MutatingAdmissionPolicy——直接在集群内用 CEL 表达式写变更逻辑,不需要额外的 Webhook 服务。

# 示例:给所有没有 environment 标签的 Pod 自动加上 environment=default
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingAdmissionPolicy
metadata:
  name: add-default-environment-label
spec:
  failurePolicy: Fail
  matchConstraints:
    resourceRules:
    - apiGroups: [""]
      apiVersions: ["v1"]
      operations: ["CREATE", "UPDATE"]
      resources: ["pods"]
  mutations:
  - patchType: ApplyConfiguration
    applyConfiguration:
      expression: >
        Object{
          metadata: Object.metadata{
            labels: object.metadata.?labels.orValue({}) +
              (has(object.metadata.labels) && 
               "environment" in object.metadata.labels 
               ? {} 
               : {"environment": "default"})
          }
        }
---
apiVersion: admissionregistration.k8s.io/v1
kind: MutatingAdmissionPolicyBinding
metadata:
  name: add-default-environment-label-binding
spec:
  policyName: add-default-environment-label
  validationActions: [Deny]
对比传统 Webhook 的优势:
  不需要部署额外服务(减少运维负担)
  不需要维护 TLS 证书
  逻辑直接存在 etcd 中,审计更方便
  CEL 表达式有沙箱保护,不会因代码 Bug 导致集群不可用

适用场景:
  自动注入标准标签/注解
  强制设置资源默认值(如 imagePullPolicy)
  自动调整资源限制(如内存 limit 不能超过 request 的 2 倍)

3. Fine-Grained Kubelet API Authorization GA

之前 Kubelet API 的权限控制比较粗糙——要么能访问,要么不能访问。v1.36 让这个权限可以细粒度控制。

实际意义:
  可以给不同的系统组件分配不同的 Kubelet API 权限
  比如:监控系统只能读 /metrics,不能执行 exec
  减少最小权限原则下的过度授权
  
对 CIS 安全基线合规有帮助

4. SELinux 卷挂载优化 GA

涉及 SELinux 的卷挂载现在有了更好的性能优化,减少了容器启动时 SELinux 标签重新打标的开销。

影响场景:
  容器挂载大量文件的 Volume 时启动很慢(SELinux 打标导致)
  GA 后,通过 idmap 挂载绕过逐文件打标,启动速度大幅提升
  
对运行 SELinux 的 RHEL/CentOS 集群有明显收益

Beta 重点功能

In-Place Pod 资源调整(进入 Beta)

这是 v1.36 中最实用的功能之一。传统上,修改 Pod 的 CPU/Memory 限制必须删除重建 Pod(Deployment 会触发滚动更新)。

In-Place Pod Resizing 允许在不重启 Pod 的情况下动态调整资源配额。

# 创建一个 Pod
apiVersion: v1
kind: Pod
metadata:
  name: resize-demo
spec:
  containers:
  - name: app
    image: nginx:alpine
    resources:
      requests:
        cpu: "100m"
        memory: "128Mi"
      limits:
        cpu: "200m"
        memory: "256Mi"
    resizePolicy:
    - resourceName: cpu
      restartPolicy: NotRequired    # CPU 调整不需要重启
    - resourceName: memory
      restartPolicy: NotRequired    # 内存调整不需要重启
# 直接 patch,不触发 Pod 重建
kubectl patch pod resize-demo --subresource=resize \
  --patch='{"spec":{"containers":[{"name":"app","resources":{"requests":{"cpu":"200m","memory":"256Mi"},"limits":{"cpu":"400m","memory":"512Mi"}}}]}}'

# 查看调整状态
kubectl describe pod resize-demo | grep -A 5 "Resize"
使用场景:
  流量高峰临时扩容(不影响正在处理的请求)
  HPA 纵向扩展(VPA + In-Place)
  减少不必要的 Pod 重启带来的服务中断
  
注意:
  部分内存调整仍可能需要重启(取决于应用行为)
  restartPolicy 字段控制调整策略

Sidecar 容器生命周期稳定化(Beta)

v1.29 引入的 Sidecar 容器(通过 initContainers + restartPolicy: Always 实现)在 v1.36 进一步稳定,解决了更多边缘场景下的生命周期问题。

apiVersion: v1
kind: Pod
metadata:
  name: pod-with-sidecar
spec:
  initContainers:
  - name: log-agent         # Sidecar:以 initContainer 形式声明
    image: fluent/fluent-bit:latest
    restartPolicy: Always   # 关键:设为 Always 才是 Sidecar 语义
    volumeMounts:
    - name: logs
      mountPath: /var/log/app
  containers:
  - name: app
    image: my-app:latest
    volumeMounts:
    - name: logs
      mountPath: /var/log/app
  volumes:
  - name: logs
    emptyDir: {}
Sidecar 语义保证:
  主容器启动前,Sidecar 先启动并 Ready
  主容器退出后,Sidecar 才退出(不会先于主容器被杀)
  Job 完成时,Sidecar 跟随正确关闭(解决了旧方式 Job hang 的问题)

典型使用场景:
  日志采集(Fluentd/Fluent Bit)
  服务网格代理(Envoy/Istio)
  配置热加载 Agent

Dynamic Resource Allocation(DRA)进入 Beta

DRA 解决的是 GPU、FPGA、高速网卡等特殊硬件资源的调度问题。

当前状态(v1.36 Beta):
  Structured Parameters(结构化参数)GA
  基本的 ResourceClaim API 稳定
  
意义:
  GPU 调度不再只能依赖简单的 nvidia.com/gpu: 1
  可以描述复杂的硬件拓扑需求(比如要求两个 GPU 在同一个 NVLink 域内)
  AI 训练集群的调度效率明显提升

升级注意事项

从 v1.35 升级到 v1.36:

移除/变更的 API(需提前确认):
  检查命令:kubectl api-resources --verbs=list
  
重点检查:
  如果使用了 Ingress NGINX → 制定迁移计划
  如果使用了旧的 Admission Webhook → 评估迁移到 CEL Policy
  
升级顺序(多节点集群):
  1. 升级控制平面(先备份 etcd)
  2. 确认控制平面健康
  3. 逐节点升级工作节点(drain → 升级 → uncordon)

kubeadm 升级命令:
# 查看可用版本
kubeadm upgrade plan

# 升级控制平面
kubeadm upgrade apply v1.36.2

# 升级 kubelet(每个节点)
apt-get update && apt-get install -y kubelet=1.36.2-* kubeadm=1.36.2-*
systemctl daemon-reload && systemctl restart kubelet

小结

v1.36 的核心主题是安全加固和 AI 工作负载支持。

User Namespaces GA 和 Fine-Grained Kubelet Authorization GA 让集群安全基线更高;In-Place Pod Resizing Beta 和 DRA Beta 直接针对 AI 训练/推理工作负载的动态资源管理痛点;Mutating Admission Policies GA 则让策略管理更简单、更安全。

Ingress NGINX 退役是这次最需要行动的变化——如果你的集群还在使用,现在就应该开始规划迁移了。