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 在资源效率、安全性和运维体验上都有显著提升,建议在测试环境验证后尽快跟进升级。