火山引擎容器服务(VKE)严格遵循社区一致性认证。本文介绍容器服务发布 Kubernetes 1.28 版本所做的变更说明。
说明
【邀测·申请试用 】:该功能目前处于邀测阶段,如需使用,请提交申请。 Kubernetes 1.28 版本集群中暂不支持使用弹性容器实例(VCI)产品相关能力。 版本发布说明 表1:核心组件及说明
核心组件 当前版本号 注意事项 Kubernetes v1.28.3 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.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
配置。 在 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 版本的性能和功能演进的更多信息,请参见: