Kubernetes 1.33 新特性解析:原地扩缩容、Gateway API GA 与安全增强

Kubernetes 1.33 于 2025 年 4 月发布,代号”Octarine”。这个版本有几个对生产运维影响深远的特性正式 GA,值得每个 K8s 运维工程师重点关注。

In-place Pod Resize(原地资源调整)GA

这是 1.33 最受期待的特性。以前调整 Pod 的 CPU/Memory 必须重建 Pod,现在可以原地修改:

# 以前:修改 resources 会触发 Pod 重建
kubectl set resources deployment/my-app \
  --containers=app \
  --requests=cpu=500m,memory=512Mi

# 现在(1.33+):直接 patch,无需重建
kubectl patch pod my-app-xxx -p '{
  "spec": {
    "containers": [{
      "name": "app",
      "resources": {
        "requests": {"cpu": "500m", "memory": "512Mi"},
        "limits": {"cpu": "1", "memory": "1Gi"}
      }
    }]
  }
}'

查看调整状态:

kubectl get pod my-app-xxx -o jsonpath='{.status.resize}'
# 输出:InProgress / Deferred / Infeasible / 空(已完成)

对运维的影响:

  • VPA 可以真正实现无中断的垂直扩缩容
  • 流量高峰时临时扩容,不影响在线请求
  • Java 应用调整堆内存无需重启 JVM

Gateway API 正式稳定

Gateway API 是 Ingress 的继任者,1.33 中核心资源全部 GA:

# GatewayClass:定义网关类型(由基础设施提供商实现)
apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
  name: nginx
spec:
  controllerName: k8s.nginx.org/nginx-gateway-controller

---
# Gateway:实例化一个网关
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: prod-gateway
  namespace: infra
spec:
  gatewayClassName: nginx
  listeners:
  - name: https
    port: 443
    protocol: HTTPS
    tls:
      certificateRefs:
      - name: prod-tls-cert

---
# HTTPRoute:路由规则(由应用团队管理)
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: api-route
  namespace: production
spec:
  parentRefs:
  - name: prod-gateway
    namespace: infra
  hostnames:
  - "api.example.com"
  rules:
  - matches:
    - path:
        type: PathPrefix
        value: /v1
    backendRefs:
    - name: api-service
      port: 8080
      weight: 90
    - name: api-service-canary
      port: 8080
      weight: 10   # 金丝雀发布 10% 流量

相比 Ingress 的优势:

  • 职责分离:基础设施团队管 Gateway,应用团队管 HTTPRoute
  • 原生流量分割:内置金丝雀发布支持
  • 跨命名空间路由:HTTPRoute 可以跨 namespace 引用 Gateway
  • 更丰富的匹配规则:Header、Query 参数匹配

User Namespace 增强

1.33 增强了 Linux User Namespace 支持,容器内的 root 用户映射到宿主机的非特权用户:

apiVersion: v1
kind: Pod
metadata:
  name: secure-pod
spec:
  hostUsers: false   # 启用 User Namespace
  containers:
  - name: app
    image: my-app:latest
    securityContext:
      runAsUser: 0   # 容器内是 root
      # 但映射到宿主机上是 UID 100000+,无特权

这解决了一个长期痛点:很多遗留应用需要以 root 运行,但这在 K8s 中是安全风险。User Namespace 让容器内的 root 与宿主机完全隔离。

Sidecar Container 正式 GA

Sidecar 容器在 1.33 正式 GA,解决了 Init Container 无法长期运行的问题:

spec:
  initContainers:
  - name: log-collector        # 声明为 sidecar
    image: fluentd:latest
    restartPolicy: Always      # 关键:Always 表示这是 sidecar
    volumeMounts:
    - name: logs
      mountPath: /var/log/app
  containers:
  - name: app
    image: my-app:latest

Sidecar 容器的生命周期与主容器绑定,主容器退出后 sidecar 才退出,解决了 Job 场景下日志收集容器提前退出的问题。

废弃与移除

1.33 移除了一些旧特性,升级前需要检查:

# 检查集群中是否使用了废弃 API
kubectl api-resources --verbs=list -o name | xargs -I{} kubectl get {} -A 2>/dev/null

# 使用 pluto 工具扫描废弃 API
pluto detect-all-in-cluster --target-versions k8s=v1.33.0

主要变化:

  • flowcontrol.apiserver.k8s.io/v1beta3 移除,使用 v1
  • 部分 alpha 特性门控被清理

升级建议

# 升级前备份 etcd
etcdctl snapshot save /backup/etcd-$(date +%Y%m%d).db

# 检查节点版本兼容性(控制面先升,工作节点后升)
kubectl get nodes -o wide

# 使用 kubeadm 升级
kubeadm upgrade plan v1.33.0
kubeadm upgrade apply v1.33.0

1.33 的这些特性让 Kubernetes 在资源效率、安全性和运维体验上都有显著提升,建议在测试环境验证后尽快跟进升级。

← 返回文章列表