火山引擎容器服务(VKE)严格遵循社区一致性认证。本文介绍容器服务发布 Kubernetes 1.28 版本所做的变更说明。
版本发布说明 表1:核心组件及说明
核心组件 当前版本号 注意事项 Kubernetes v1.28.15 Kubernetes v1.27 和 v1.28 对测试版本 API 进行废弃和移除,使用新版本需进行兼容性检查。详情请参见本文下方:废弃和移除功能 和 API 版本弃用 。 ETCD v3.5.9 无 Containerd Runtime 1.6.21 无 CoreDNS 1.10.1 无 Ingress-nginx 1.9.5-vke.1 无
表2:Kubernetes 版本与容器服务版本对应关系
Kubernetes 版本 VKE 版本 发布说明 v1.28.15 vke.18 同步 Kubernetes 社区 v1.28.15 代码。 v1.28.3
vke.17
强化扩展调度器,支持感知 Vitual Kubelet Service 变化。 支持 Inplace VPA 特性。 v1.28.3 vke.16 强化扩展调度器,支持本地存储感知调度。 v1.28.3 vke.15 强化扩展调度器,支持 NUMA 拓扑感知调度和 RDMA 拓扑感知调度。 v1.28.3 vke.14 修复扩展调度器感知 vePFS 存储时不支持 Local Path PV 的问题。 v1.28.3
vke.13
强化扩展调度器,mGPU 跨卡共享功能支持使用全量算力分配策略。 强化扩展调度器,支持感知 vePFS 存储。 v1.28.3 vke.12 修复扩展调度器插件初始化异常问题。 v1.28.3 vke.11 优化核心组件发布规范。 v1.28.3 vke.10 修复 Kubelet 重启导致的容器 Ready 状态变化问题。 v1.28.3 vke.9 强化扩展调度器,支持 mGPU 抢占调度。 v1.28.3 vke.8 强化扩展调度器,支持感知 VCI 资源库存。 v1.28.3 vke.7 强化 API Server 自签名证书。 v1.28.3
vke.6
强化 Kubelet,支持配置容器资源视图。 强化 Kubelet,支持通过 Annotation 配置被驱逐 Pod 的优雅退出时间。 修复扩展调度器负载感知调度异常问题。
Kubernetes 社区版本解读 重大更新 在 Kubernetes v1.28 中,Scheduling Framework 对插件调用进行优化,减少不必要重试。如果集群中使用了自定义调度器插件,建议对扩展插件进行改造以提升整体调度性能。详情请参见:Scheduling Framework 优化 。 在 Kubernetes v1.28 中,废弃 CephFS 和 RBD 树内存储插件,并计划在 Kubernetes v1.31 中删除,建议转为使用第三方存储驱动 CephFS CSI 。 增量功能和特性 在 Kubernetes v1.28 版本 控制面和节点的版本兼容偏差从 n-2 变更为 n-3 ,兼容版本数的增加可以减少节点升级带来的中断次数。详情请参见:版本偏差策略 。 节点非优雅关闭(Non-graceful node shutdown)功能进入 GA 阶段,节点由于断电等故障导致非正常关闭时,有状态应用程序需要及时在正常运行的节点上重新启动,以免影响业务正常运行。详情请参见:节点非优雅关闭 。 可追溯的默认 StorageClass 功能进入 GA 阶段,用户无需再进行先创建默认的 StorageClass,再创建 PVC 的流程。未分配 StorageClass 的所有 PVC 都将被自动使用默认的 StorageClass。详情请参见:可追溯的默认 StorageClass 赋值 。 针对 Job 失效处理,新增两项特性:
Pod 更换策略:新增 JobPodReplacementPolicy 特性门控,开启后支持在 Pod Spec 中定义podReplacementPolicy
为Failed
。设置该策略后,Pod 只有在到达Failed
阶段才会被替换,而不是Terminating
时就被替换,以避免出现 2 个 Pod 同时占用索引和节点资源。详情请参见:延迟创建替换 Pod 。 基于索引的回退机制:新增 JobBackoffLimitPerIndex 特性门控,开启后支持在创建 Indexed Job 时配置.spec.backoffLimitPerIndex
,避免单个索引持续失败达到.spec.backoffLimit
限制而导致整体失败。详情请参见:基于索引的回退限制 。 NodeSwap 进入 Beta 阶段,开启 NodeSwap 特性门控后,支持为运行的工作负载配置内存交换。详情请参见:在 Linux 上使用交换内存 。 原生边车容器进入 Alpha 阶段,新增 SidecarContainers 特性门控,开启后支持在 Init 容器中配置restartPolicy
字段。详情请参见:原生边车容器 。 podresources API 进入 GA 阶段,它是由 kubelet 提供的节点本地 API,最初为了 监控设备信息 提出,逐步扩大范围,目前可用于查询分配给容器的计算资源。详情请参见:podresource API 。 针对 CEL 表达式能力新增了多项特性:
CRD 使用 CEL 进行 Validate 功能进入 Beta 阶段,通过将 CEL 集成在 CRD 中,可以使开发中在不使用 Webhook 的情况下解决大部分 CR 示例的验证用例。详情请参见:CRD 校验表达式语言 。 基于 CEL 的准入控制进入 Beta 阶段,支持通过声明式的方式验证资源请求,支持使用 CEL 表达式 编写复杂的验证规则,代替部署 Webhook 准入控制。详情请参见:验证准入策略 。 ServiceNodePortStatic 功能进入 Beta 阶段,允许保留静态端口范围,避免与动态分配端口冲突。详情请参见:为 NodePort Service 分配端口时避免冲突 。 混合版本代理功能进入 Alpha 阶段,当集群中存在多个不同版本的 kube-apiserver 时,混合版本代理使对资源的 HTTP 请求能够被正确的 kube-apiserver 处理。详情请参见:混合版本代理 。 缓存一致性读取功能进入 Alpha 阶段,新增 ConsistentListFromCache 特性门控,允许通过监视缓存(Watch cache)实现 List 一致性读取,详情请参见:缓存一致性读取 。 kubelet 支持配置 drop-in 目录功能进入 Alpha 阶段,新增--config-dir
配置,允许用户插入指定目录覆盖原始的/etc/kubernetes/kubelet.conf
配置。 Pod 的 InPlace VPA 功能进入 Beta 阶段。通过对 API Server、Scheduler 和 Kubelet 进行升级改造,支持在不重启 Pod 的情况下修改 CPU 和内存的 Request/Limit 值。详情请参见:调整分配给容器的 CPU 和内存资源 。 在 Kubernetes v1.27 版本 SeccompDefault 功能进入 GA 阶段,支持通过 kubelet 命令行参数--seccomp-default
启用 RuntimeDefault 作为所有工作负载的默认 seccomp 配置文件。详情请参见:kubelet 启动参数 。 Pod 拓扑分布约束控制有多项功能进入 Beta 阶段,包括支持设定 Pod 最少分布域、支持拓扑约束调度时考虑亲和性和污点、解决滚动更新时无法约束拓扑分布的问题等。详情请参见:更多细粒度的 Pod 拓扑分布策略 。 StatefulSet 有多项功能进入 Beta 阶段,包括支持 Pod 从非零数作为起始序号、支持指定删除关联创建的 PVC、缩容时自动删除关联创建的 PVC。详情请参见:StatefulSet Start Ordinal Simplifies Migration 、StatefulSet PVC Auto-Deletion 。 kubelet 新增maxParallelImagePulls
字段配置,限制并行拉取的镜像数量,防止镜像拉取消耗过多的网络带宽或磁盘 I/O。详情请参见:maxParallelImagePulls 。 Job 可变调度指令进入 GA 阶段,支持 Job 在挂起阶段修改 Pod 中的调度部分,包括节点选择器、节点亲和性、反亲和性、容忍度。详情请参见:Job 可变调度指令 。 Downward API HugePages 进入 GA 阶段,支持在 Pod 的spec.resources
里通过资源hugepages-2Mi
或者hugepages-1Gi
来配置 HugePages 限制。如果需要配置多种类型 HugePages,需要配置 HugePages 类型的 Volume。详情请参见:Manage HugePages 。 Pod 调度就绪态进入 Beta 阶段。在 Pod 中引入.spec.schedulingGates
字段,表示定义 Pod 是否允许开始调度。 ReadWriteOncePod 访问模式进入 Beta 阶段,该访问模式用于限制 PV 被单个节点上的单个 Pod 的访问。ReadWriteOnce 模式限制了单节点访问,但并不限制多个 Pod 同时访问同一个节点。详情请参见:持久卷的单 Pod 访问模式升级到 Beta 。 快速标记 SELinux 卷标签功能进入 Beta 阶段,优化卷挂载过程中 SELinux 标签的使用,加快容器启动速度,详情请参见:Speed up SELinux volume relabeling using mounts 。 VolumeManager 重构进入 Beta 阶段,允许 kubelet 在启动期间带上关于现有卷如何挂载的附加信息。 服务器端字段校验和 OpenAPI 的最新标准 OpenAPI v3 进入 GA 阶段。详情请参见:服务器端字段校验和 OpenAPI V3 进阶至 GA 。 控制 StatefulSet 启动顺序功能进入 Beta 阶段,默认允许通过spec.ordinals.start
在 StatefulSet 中配置启动序号。详情请参见:StatefulSet 启动序号简化了迁移 。 StatefulSet PVC 自动删除功能进入 Beta 阶段,用户可以配置 whenDeleted 或 whenScaled,触发 Retain 或 Delete 行为。其中 Retain 是默认行为,只有配置了 Delete 策略的 StatefulSet 在被删除时才会触发对应的 PVC 删除动作,详情请参见:KEP-1847 、PersistentVolumeClaim 保留 。 磁盘卷组快照功能进入 Alpha 阶段,支持 Pod 维度所有卷的 组快照 功能,无需担心备份不同卷时的时间差。详情请参见:KEP-3476 、用于磁盘卷组快照的新 API 。 重构kubectl apply --prune
以提升性能,增加kubectl apply --prune --applyset
的剪裁方式。详情请参见:使用配置文件对 Kubernetes 对象进行声明式管理 。 新增 ServiceNodePortStaticSubrange 特性门控,开启后 NodePort Service 会使用不同的端口分配策略。 原地调整 Pod 资源功能进入 Alpha 阶段,新增 InPlacePodVerticalScaling 特性门控,支持在不重启 Pod 和容器的情况下调整 Pod 容器中resources
字段下的 CPU 和 Memory,即纵向弹性伸缩。详情请参见:KEP-1287 、原地调整 Pod 资源 。 KMS V2 进入 Beta 阶段,对 KMS 加密提供程序的性能进行优化。详情请参见:使用 KMS 驱动进行数据加密 。 废弃和移除功能 在 Kubernetes v1.28 版本 废弃 CephFS 和 RBD 树内存储插件,建议转为使用第三方存储驱动 CephFS CSI 。 kube-scheduler 移除命令行参数--lock-object-namespace
和--lock-object-name
,使用--leader-elect-resource-namespace
和--leader-elect-resource-name
替代。 kubectl 移除命令行参数--short
,kubectl version
的默认输出与kubectl version --short
相同。 kube-controller-manager 开始废弃命令行参数--volume-host-cidr-denylist
和--volume-host-allow-local-loopback
。 kubelet 开始废弃命令行参数--azure-container-registry-config
参数,使用--image-credential-provider-config
和--image-credential-provider-bin-dir
替代。 KMSv1 已经废弃。如果仍需兼容使用 KMSv1,需设置--feature-gates=KMSv1=true
特性门控,建议使用 KMSv2。 kube-controller-manager 中新增--concurrent-cron-job-syncs
参数,用于配置 CronJob 控制器的并发度,新增--concurrent-job-syncs
参数,用于配置 Job 控制器的并发度。详情请参见:#117550 、#117138 。 移除了如下特性门禁:DelegateFSGroupToCSIDriver、DevicePlugins、KubeletCredentialProviders、MixedProtocolLBService、ServiceInternalTrafficPolicy、ServiceIPStaticSubrange、EndpointSliceTerminatingCondition。 在 Kubernetes v1.27 版本 kube-controller-manager 移除命令行参数--pod-eviction-timeout
和--enable-taint-manager
。 kubelet 移除命令行参数--container-runtime
、--container-runtime-endpoint
和--image-service-endpoint
。 kube-apiserver 移除命令行参数--master-service-namespace
。 kube-controller-manager 移除命令行参数--enable-taint-manager
和--pod-eviction-timeout
。 kubelet 移除命令行参数--container-runtime
和--master-service-namespace
。 metrics 发生如下变更:node_collector_evictions_number
被替代为node_collector_evictions_total
、scheduler_e2e_scheduling_duration_seconds
被替代为scheduler_scheduling_attempt_duration_seconds
。 移除如下特性门禁:IPv6DualStack、ExpandCSIVolumes、ExpandInUsePersistentVolumes、ExpandPersistentVolumes、ControllerManagerLeaderMigration、CSI Migration、CSIInlineVolume、EphemeralContainers、LocalStorageCapacityIsolation、NetworkPolicyEndPort、StatefulSetMinReadySeconds、IdentifyPodOS、DaemonSetUpdateSurge。详情请参见:Kubernetes v1.27 Removal 。 API 版本弃用 从容器服务发布 Kubernetes v1.28 版本起,容器服务集群中扩展调度器使用的 PodGroup CRD APIGroup 发生变化,将使用scheduling.x-k8s.io
取代scheduling.sigs.k8s.io
。详情请参见 BREAKING CHANGE: switch API group to x-k8s.io 。 在 Kubernetes v1.28,移除 KubeSchedulerConfiguration 的kubescheduler.config.k8s.io/v1beta2
版本 API,建议使用kubescheduler.config.k8s.io/v1
。详情请参见:移除 v1beta2 KubeSchedulerConfiguration 。 在 Kubernetes v1.28,移除 PVC 的.status.resizeStatus
字段,替换为 Map 结构字段.status.allocatedResourceStatus
,表示调整 PVC 大小时的状态。详情请参见: PersistentVolumeClaimStatus 。 在 Kubernetes v1.28,移除特性 NetworkPolicyStatus,Network Policy,不再有 Status 属性。 在 Kubernetes v1.27,移除 CSIStorageCapacity 的storage.k8s.io/v1beta1
版本 API,建议使用storage.k8s.io/v1
。 参考链接 关于 Kubernetes v1.28 版本的性能和功能演进的更多信息,请参见: