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 使用
测试方法
从开发集群开始:在非生产环境中测试新功能 逐步推出:一次升级一个集群 仔细监控:注意弃用 API 的问题
功能采用时间表
立即:原生 Sidecar(稳定版,默认启用) 短期:原地 Pod 调整大小(测试版,默认启用) 中期:OCI 镜像卷(Alpha 版,选择加入)
总结
Kubernetes 1.33 "Octarine" 代表了自引入自定义资源定义以来容器编排领域最重大的进步。原生 Sidecar 支持、原地 Pod 调整大小和增强的安全功能的组合解决了限制 Kubernetes 在某些场景中采用的根本问题。
真正的魔法不在于任何单一功能——而在于这些功能如何协同工作,创建一个更可靠、更安全、更高效的平台。 无论你是运行传统的 Web 应用程序、AI/ML 工作负载还是复杂的分布式系统,Kubernetes 1.33 都为下一代云原生应用程序提供了基础。
巫师的颜色已经到来,它正在改变我们对容器编排的思考方式。问题不在于是否升级——而在于你能多快开始利用这些功能,给你的应用程序应得的魔法属性。
温馨提示:文章内容系作者个人观点,不代表Docker中文对观点赞同或支持。
版权声明:本文为转载文章,来源于 互联网 ,版权归原作者所有,欢迎分享本文,转载请保留出处!
发表评论