CCE发布Kubernetes 1.28版本说明 本节主要介绍CCE发布Kubernetes 1.28版本 云容器引擎(CCE)严格遵循社区一致性认证,现已支持创建Kubernetes 1.28集群。本文介绍Kubernetes 1.28版本的变更说明。 重要说明 在Kubernetes 1.28版本,调度框架发生变化,减少无用的重试,从而提高调度程序的整体性能。 在Kubernetes 1.28 版本,Ceph FS 树内插件已在 v1.28 中弃用,并计划在 v1.31 中删除(社区没有计划进行 CSI 迁移)。 建议使用 Ceph CSI 第三方存储驱动程序作为替代方案。 在Kubernetes 1.28 版本,Ceph RBD 树内插件已在 v1.28 中弃用,并计划在 v1.31 中删除(社区没有计划进行 CSI 迁移)。建议使用 RBD 模式的 Ceph CSI 第三方存储驱动程序作为替代方案。 新增特性及特性增强 社区特性的Alpha阶段默认禁用、Beta阶段一般默认启用、GA阶段将一直默认启用,且不能禁用(会在后续版本中删除这个开关功能)。CCE对新特性的策略与社区保持一致。 版本偏差策略扩展至3个版本 从1.28控制平面/1.25 工作节点开始,Kubernetes版本偏差策略将支持的控制平面/工作节点偏差扩展到 3 个版本。 这使得节点的年度次要版本升级成为可能,同时保持受支持的次要版本。 可追溯的默认StorageClass 进阶至 GA 在Kubernetes 1.28版本,可追溯默认 StorageClass 赋值现已进阶至GA。 这项增强特性极大地改进了默认的StorageClasses为PersistentVolumeClaim (PVC) 赋值的方式。 PersistentVolume (PV) 控制器已修改为:当未设置 storageClassName 时,自动向任何未绑定的 PersistentVolumeClaim 分配一个默认的 StorageClass。此外,API 服务器中的 PersistentVolumeClaim 准入验证机制也已调整为允许将值从未设置状态更改为实际的 StorageClass 名称。 原生边车容器(Alpha) 在Kubernetes 1.28版本,原生边车容器以Alpha版本正式发布。其在 Init 容器中添加了一个新的 restartPolicy 字段, 该字段在 SidecarContainers 特性门控启用时可用。需要注意的是,原生边车容器目前仍有些问题需要解决,因此K8S社区建议仅在 Alpha 阶段的短期测试集群中使用边车功能。 混合版本代理(Alpha) 在Kubernetes 1.28版本,发布了用于改进集群安全升级的新机制(混合版本代理)。该特性为Alpha特性。 当集群进行升级时,集群中不同版本的 kubeapiserver 为不同的内置资源集(组、版本、资源)提供服务。在这种情况下资源请求如果由任一可用的 apiserver 提供服务,请求可能会到达无法解析此请求资源的 apiserver 中,导致请求失败。该特性能解决该问题。(主要注意的是,CCE本身提供的升级能力即可做到无损升级,因此不存在该特性涉及的场景)。 节点非体面关闭特性达到GA 在Kubernetes 1.28版本,节点非体面关闭特性达到GA阶段。当一个节点被关闭但没有被 Kubelet 的 Node Shutdown Manager 检测到时,StatefulSet 的 Pod 将会停留在终止状态,并且不能移动到新运行的节点上。当用户确认该节点已经处于不可恢复的情况下,可以手动为Node打上outofservice的污点,以使得该节点上的StatefulSet的Pod和VolumeAttachments被强制删除,并在健康的Node上创建相应的Pod。 NodeSwap特性达到Beta 在Kubernetes 1.28版本,NodeSwap能力进阶至Beta版本。目前仍然处于默认关闭状态,需要使用NodeSwap门控打开。该特性可以为Linux节点上运行的Kubernetes工作负载逐个节点地配置内存交换。需要注意的是,该特性虽然进阶至Beta特性,但仍然存在一些需要增强的问题和安全风险。 Job相关特性 在Kubernetes 1.28版本,增加了Pod更换策略和基于带索引Job的回退限制两个alpha特性。 Pod更换策略 默认情况下,当Pod 进入终止(Terminating)状态(例如由于抢占或驱逐机制)时,Kubernetes 会立即创建一个替换的 Pod,因此这时会有两个 Pod 同时运行。在Kubernetes 1.28版本中可以使用JobPodReplacementPolicy 来启用该特性。可以在Job的Spec中定义podReplacementPolicy,目前仅可设置为Failed。在设置为Failed之后,Pod 仅在达到 Failed 阶段时才会被替换,而不是在它们处于终止过程中(Terminating)时被替换。此外,您可以检查 Job 的 .status.termination 字段。该字段的值表示终止过程中的 Job 所关联的 Pod 数量。 带索引Job的回退限制 默认情况下,带索引的Job(Indexed Job)的 Pod 失败情况会被记录下来,受 .spec.backoffLimit 字段所设置的全局重试次数限制。这意味着,如果存在某个索引值的 Pod 一直持续失败,则会 Pod 会被重新启动,直到重试次数达到限制值。 一旦达到限制值,整个 Job 将被标记为失败,并且对应某些索引的 Pod 甚至可能从不曾被启动。在Kubernetes 1.28版本中,可以通过启用集群的 JobBackoffLimitPerIndex 特性门控来启用此特性。开启之后,允许在创建带索引的 Job(Indexed Job)时指定 .spec.backoffLimitPerIndex 字段。当某个Job的失败次数超过设定的上限时,将不再进行重试。 CEL相关特性 在Kubernetes 1.28版本,CEL能力进行了相应的增强。 CRD 使用 CEL 进行 Validate 的特性进阶至Beta 该特性在v1.25版本就已经升级为Beta版本。通过将 CEL 表达式直接集成在 CRD 中, 可以使开发者在不使用 Webhook 的情况下解决大部分对 CR 实例进行验证的用例。在未来的版本,将继续扩展 CEL 表达式的功能,以支持默认值和 CRD 转换。 基于CEL的准入控制进阶至Beta 基于通用表达式语言(CEL) 的准入控制是可定制的,对于 kubeapiserver 接受到的请求,可以使用 CEL 表达式来决定是否接受或拒绝请求,可作为 Webhook 准入控制的一种替代方案。在 v1.28 中,CEL 准入控制被升级为 Beta,同时添加了一些新功能,包括但不限于: ValidatingAdmissionPolicy 类型检查现在可以正确处理 CEL 表达式中的 “authorizer” 变量。 ValidatingAdmissionPolicy 支持对 messageExpression 字段进行类型检查。 kubecontrollermanager 组件新增 ValidatingAdmissionPolicy 控制器,用来对 ValidatingAdmissionPolicy 中的 CEL 表达式做类型检查,并将原因保存在状态字段中。 支持变量组合,可以在ValidatingAdmissionPolicy 中定义变量,然后在定义其他变量时使用它。 新增CEL 库函数支持对 Kubernetes 的 resource.Quantity 类型进行解析。 其它特性说明 在Kubernetes 1.28版本,ServiceNodePortStaticSubrange 特性为beta,允许保留静态端口范围,避免与动态分配端口冲突。 在Kubernetes 1.28版本,增加了alpha特性ConsistentListFromCache,允许kubeapiserver从缓存中提供一致性列表,Get和List请求可以从缓存中读取数据,而不需要从etcd中获取。 在Kubernetes 1.28版本,kubelet能够配置dropin目录(alpha特性)。该特性允许向kubelet添加对“configdir”标志的支持,以允许用户指定一个插入目录,该目录将覆盖位于/etc/kubernetes/kubelet.conf位置的Kubelet的配置。 在Kubernetes 1.28版本,ExpandedDNSConfig 升级至GA,默认会被打开。该参数用于允许扩展DNS的配置。 在Kubernetes 1.28版本,提供Alpha特性CRD Validation Ratcheting。该特性允许Patch或者Update请求没有更改任何不合法的字段,将允许CR验证失败。 在Kubernetes 1.28版本,kubecontrollermanager添加了concurrentcronjobsyncs flag用来设置cron job controller的workers数。