Kubernetes 1.33 "Octarine":改变一切的革命性版本

 互联网   2025-08-01 10:56   16 人阅读  0 条评论

Kubernetes 1.33 "Octarine":改变一切的革命性版本  第1张

Kubernetes 1.33 "Octarine":改变一切的革命性版本

核心摘要:为什么这个版本比其他版本更重要

Kubernetes 1.33 不仅仅是一个增量更新——它是一个范式转变。这个版本包含 64 项增强功能,其中 18 项已升级为稳定版,20 项进入测试版,24 项进入 Alpha 版,2 项被弃用或撤销。Kubernetes 首次解决了困扰开发者多年的根本问题:Sidecar 容器现在可以原生工作Pod 可以在不重启的情况下调整大小,以及用户命名空间默认启用

如果你正在运行生产环境的 Kubernetes 工作负载,这个版本将彻底改变你对容器编排的认知。

"Octarine"背后的魔法

Kubernetes v1.33 的主题是 Octarine:魔法的颜色,灵感来自 Terry Pratchett 的 Discworld 系列。这个版本突出了 Kubernetes 在整个生态系统中实现的开源魔法。就像 Octarine 被描述为只有巫师才能看到的颜色一样,这个版本带来的功能对于任何曾经与 Kubernetes 限制搏斗的人来说都近乎神奇。

改变游戏规则的功能:重新定义 Kubernetes

1. 原生 Sidecar 容器:终于可以正常工作了

问题: 近十年来,Sidecar 容器一直是 Kubernetes 中的基本模式,为服务网格到日志解决方案等一切提供支持。然而它们从未得到官方支持,导致无数变通方案和脆弱的实现。

解决方案: Sidecar 容器是与主应用容器在同一 Pod 中运行的辅助容器。这些容器通过提供额外的服务或功能(如日志记录、监控、安全或数据同步)来增强或扩展主应用容器的功能,而无需直接修改主应用代码。

革命性在于生命周期管理。Sidecar 容器拥有自己独立生命周期。它们可以独立于应用容器启动、停止和重启。不再需要手动编排,不再有竞态条件,不再有因 Sidecar 无法终止而挂起的 Pod。

实际影响:

  • 服务网格实现(Istio、Linkerd)变得更可靠
  • 日志 Sidecar 不再阻塞 Pod 终止
  • 复杂的多容器应用获得可预测的启动和关闭顺序
apiVersion: v1
kind:Pod
metadata:
name:app-with-sidecar
spec:
initContainers:
-name:sidecar-proxy
    image:envoy:latest
    restartPolicy:Always# 这使它成为 Sidecar!
    # Sidecar 首先启动,保持运行,最后停止
containers:
-name:main-app
    image:my-app:latest
    # 主应用在 Sidecar 准备就绪后启动

2. 原地 Pod 调整大小:终结破坏性扩展

问题: 需要为数据库增加内存?是时候删除并重新创建 Pod 了,这会丢失连接并导致停机。这个根本限制迫使团队过度配置或接受服务中断。

解决方案: 原地 Pod 调整大小允许你更改分配给运行中 Pod 内容器的 CPU 和内存请求及限制,通常无需重启容器。

这不仅仅是方便——它对于有状态工作负载来说是变革性的:

更快扩展: 更快地满足临时资源需求。例如 Java 应用在启动时通常比稳定状态运行时需要更多 CPU。开始时使用更高的 CPU,之后可以调低。

工作原理:

  • 使用新的 /resize 子资源:kubectl patch pod <name> --subresource resize
  • 通过 Pod 条件监控进度:PodResizePending 和 PodResizeInProgress
  • Pod 规范中的 spec.containers[*].resources 字段现在表示所需资源,并且 CPU 和内存是可变的。

实际场景:

  • 数据库:在分析查询期间扩展内存,在低使用期间缩减
  • Java 应用:启动时高 CPU,稳定状态时较低
  • 批处理作业:基于工作负载特征的动态资源分配
# 将运行中 Pod 的内存从 1Gi 调整为 2Gi
kubectl patch pod my-database --subresource resize --patch '
spec:
  containers:
  - name: db
    resources:
      requests:
        memory: 2Gi
      limits:
        memory: 2Gi
'

3. 用户命名空间:真正有效的安全性

游戏规则改变者: Kubernetes v1.33 现在默认启用用户命名空间,这是一项重要的安全功能,增强了容器与主机系统之间的隔离。

用户命名空间通过将容器内的用户和组 ID (UIDs/GIDs) 映射到主机上不同的非特权 UIDs/GIDs 来工作。这至关重要,因为它防止了容器之间的横向移动,并增加了主机隔离,这意味着即使容器被入侵并在内部以 root 身份运行,它在主机上也没有提升的权限。

为什么这很重要:

  • 多租户集群变得更安全
  • 容器逃逸几乎不可能
  • 更容易满足合规要求
apiVersion: v1
kind:Pod
metadata:
name:secure-pod
spec:
hostUsers:false# 启用用户命名空间
containers:
-name:app
    image:my-app:latest
    # 在容器内以 root 身份运行,在主机上无特权

高级用户功能

OCI 镜像作为卷:模块化容器架构

Kubernetes 1.33 的一个突出增强是能够使用 OCI 工件和镜像作为卷源。这个 Alpha 功能允许容器镜像(如工具、二进制文件或配置包)直接作为卷挂载到 Pod 中,无需解压或打包到传统容器镜像中。

这实现了:

  • 减少容器镜像膨胀:将共享内容移动到可重用工件中
  • 动态工具:在运行时挂载 CLI 工具或配置
  • 安全工件交付:版本化、签名内容分发
apiVersion: v1
kind:Pod
metadata:
name:image-volume-pod
spec:
containers:
-name:app
    image:my-app:latest
    volumeMounts:
    -name:shared-data
      mountPath:/app/data
      readOnly:true
volumes:
-name:shared-data
    image:
      reference:my-registry.io/data-image:1.0

增强的作业管理:AI 和 ML 工作负载变得更智能

在 Kubernetes 1.33 中,Job API 得到增强,允许用户为索引作业定义自定义条件(成功策略)以确定何时应被视为成功。以前,只有当所有索引都成功时,作业才会被标记为完成,这对于像 MPI 或 PyTorch 这样只需要某些关键任务(如领导节点)成功的工作负载来说并不理想。

非常适合:

  • 分布式 ML 训练:只需要领导节点成功
  • MPI 作业:主进程完成决定成功
  • 批处理:部分完成场景

kubectl 获得配置文件:.kuberc

在 v1.33 中,kubectl 引入了一个新的 Alpha 功能,带有选择加入的配置文件 .kuberc 用于用户偏好。该文件可以包含 kubectl 别名和覆盖(例如默认使用服务器端应用),同时将集群凭据和主机信息留在 kubeconfig 中。

终于,个人 kubectl 偏好与集群配置分离了!

 性能和扩展改进

服务 IP 扩展:突破 CIDR 上限

将 MultiCIDRServiceAllocator 功能门升级为稳定版,并将 DisableAllocatorDualWrite 功能门升级为测试版(默认禁用)。Kubernetes 现在允许用户通过 API 对象 ServiceCIDR 定义集群服务 CIDR。

这解决了大型集群中服务 IP 耗尽的老问题。

nftables kube-proxy:性能革命

新的基于 nftables 的 kube-proxy 后端比传统的 iptables 实现提供了显著的性能改进,特别是在有数千个服务的集群中。

HPA 容差定制

Kubernetes v1.33 引入了一个 Alpha 功能,允许为 HorizontalPodAutoscalers (HPA) 设置自定义容差值。以前,HPA 控制器使用固定的全局容差值 0.1(10%)来决定何时扩展 Pod。

为具有独特要求的应用程序微调扩展行为——非常适合对延迟敏感的工作负载。

破坏性变更和弃用

Endpoints API:是时候迁移了

EndpointSlices API 自 v1.21 以来一直稳定,实际上取代了原始的 Endpoints API。虽然原始的 Endpoints API 简单直接,但在扩展到大量网络端点时也带来了一些挑战。

需要采取的行动: 将脚本和应用程序从 Endpoints API 迁移到 EndpointSlices。

移除的功能

按照 v1.31 中的弃用公告,status.nodeInfo.kubeProxyVersion 字段将在 v1.33 中移除。

更新依赖此字段的监控和操作脚本。

这对你的基础设施意味着什么

对于平台工程师

  • 简化的 Sidecar 管理:不再需要复杂的 init 容器变通方案
  • 动态资源优化:无需停机即可调整工作负载大小
  • 增强的安全态势:用户命名空间提供真正的多租户

对于 DevOps 团队

  • 减少操作开销:原生功能取代自定义解决方案
  • 提高可靠性:复杂应用程序的适当生命周期管理
  • 更好的成本优化:原地调整大小实现更高效的资源使用

对于安全团队

  • 更强的隔离边界:用户命名空间防止权限提升
  • 更好的合规性:内置安全功能减少审计复杂性
  • 减少攻击面:容器到主机的隔离改进

入门:升级策略

先决条件

  • Kubernetes 1.31+ 以获得平滑的升级路径
  • 支持最新功能的容器运行时(推荐 containerd 2.0)
  • 检查你的清单中是否有弃用的 API 使用

测试方法

  1. 从开发集群开始:在非生产环境中测试新功能
  2. 逐步推出:一次升级一个集群
  3. 仔细监控:注意弃用 API 的问题

功能采用时间表

  • 立即:原生 Sidecar(稳定版,默认启用)
  • 短期:原地 Pod 调整大小(测试版,默认启用)
  • 中期:OCI 镜像卷(Alpha 版,选择加入)

总结

Kubernetes 1.33 "Octarine" 代表了自引入自定义资源定义以来容器编排领域最重大的进步。原生 Sidecar 支持、原地 Pod 调整大小和增强的安全功能的组合解决了限制 Kubernetes 在某些场景中采用的根本问题。

真正的魔法不在于任何单一功能——而在于这些功能如何协同工作,创建一个更可靠、更安全、更高效的平台。 无论你是运行传统的 Web 应用程序、AI/ML 工作负载还是复杂的分布式系统,Kubernetes 1.33 都为下一代云原生应用程序提供了基础。

巫师的颜色已经到来,它正在改变我们对容器编排的思考方式。问题不在于是否升级——而在于你能多快开始利用这些功能,给你的应用程序应得的魔法属性。


本文地址:https://www.dockerworld.cn/?id=424
温馨提示:文章内容系作者个人观点,不代表Docker中文对观点赞同或支持。
版权声明:本文为转载文章,来源于 互联网 ,版权归原作者所有,欢迎分享本文,转载请保留出处!

 发表评论


表情

还没有留言,还不快点抢沙发?