云容器引擎 CCE-Kubernetes 1.28版本说明:新增特性及特性增强

时间:2024-04-12 16:00:51

新增特性及特性增强

社区特性的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 名称。更多使用细节请参考默认StorageClass赋值

  • 原生边车容器(Alpha)

    在Kubernetes 1.28版本,原生边车容器以Alpha版本正式发布。其在 Init 容器中添加了一个新的 restartPolicy 字段, 该字段在 SidecarContainers 特性门控启用时可用。需要注意的是,原生边车容器目前仍有些问题需要解决,因此K8S社区建议仅在 Alpha 阶段的短期测试集群中使用边车功能。 更多使用细节请参考原生边车容器

  • 混合版本代理(Alpha)

    在Kubernetes 1.28版本,发布了用于改进集群安全升级的新机制(混合版本代理)。该特性为Alpha特性。 当集群进行升级时,集群中不同版本的 kube-apiserver 为不同的内置资源集(组、版本、资源)提供服务。在这种情况下资源请求如果由任一可用的 apiserver 提供服务,请求可能会到达无法解析此请求资源的 apiserver 中,导致请求失败。该特性能解决该问题。(主要注意的是,CCE本身提供的升级能力即可做到无损升级,因此不存在该特性涉及的场景)。更多使用细节请参考混合版本代理

  • 节点非体面关闭特性达到 GA

    在Kubernetes 1.28版本,节点非体面关闭特性达到GA阶段。当一个节点被关闭但没有被 Kubelet 的 Node Shutdown Manager 检测到时,StatefulSet 的 Pod 将会停留在终止状态,并且不能移动到新运行的节点上。当用户确认该节点已经处于不可恢复的情况下,可以手动为Node打上out-of-service的污点,以使得该节点上的StatefulSet的Pod和VolumeAttachments被强制删除,并在健康的Node上创建相应的Pod。更多使用细节请参考节点非体面关闭

  • NodeSwap特性达到Beta

    在Kubernetes 1.28版本,NodeSwap能力进阶至Beta版本。目前仍然处于默认关闭状态,需要使用NodeSwap门控打开。该特性可以为Linux节点上运行的Kubernetes工作负载逐个节点地配置内存交换。需要注意的是,该特性虽然进阶至Beta特性,但仍然存在一些需要增强的问题和安全风险。更多使用细节请参考NodeSwap特性

  • Job相关特性

    在Kubernetes 1.28版本,增加了Pod更换策略和基于索引的回退限制两个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(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) 的准入控制是可定制的,对于 kube-apiserver 接受到的请求,可以使用 CEL 表达式来决定是否接受或拒绝请求,可作为 Webhook 准入控制的一种替代方案。在 v1.28 中,CEL 准入控制被升级为 Beta,同时添加了一些新功能,包括但不限于:

      • ValidatingAdmissionPolicy 类型检查现在可以正确处理 CEL 表达式中的 “authorizer” 变量。
      • ValidatingAdmissionPolicy 支持对 messageExpression 字段进行类型检查。
      • kube-controller-manager 组件新增 ValidatingAdmissionPolicy 控制器,用来对 ValidatingAdmissionPolicy 中的 CEL 表达式做类型检查,并将原因保存在状态字段中。
      • 支持变量组合,可以在 ValidatingAdmissionPolicy 中定义变量,然后在定义其他变量时使用它。
      • 新增 CEL 库函数支持对 Kubernetes 的 resource.Quantity 类型进行解析。
  • 其它特性说明
    • 在Kubernetes 1.28版本,ServiceNodePortStaticSubrange 特性为beta,允许保留静态端口范围,避免与动态分配端口冲突。具体细节请参考为NodePort Service分配端口时避免冲突
    • 在Kubernetes 1.28版本,增加了alpha特性ConsistentListFromCache,允许kube-apiserver从缓存中提供一致性列表,Get和List请求可以从缓存中读取数据,而不需要从etcd中获取。
    • 在Kubernetes 1.28版本,kubelet能够配置drop-in目录(alpha特性)。该特性允许向kubelet添加对“--config-dir”标志的支持,以允许用户指定一个插入目录,该目录将覆盖位于/etc/kubernetes/kubelet.conf位置的Kubelet的配置。
    • 在Kubernetes 1.28版本,ExpandedDNSConfig 升级至GA,默认会被打开。该参数用于允许扩展DNS的配置。
    • 在Kubernetes 1.28版本,提供Alpha特性CRD Validation Ratcheting。该特性允许Patch或者Update请求没有更改任何不合法的字段,将允许CR验证失败。
    • 在Kubernetes 1.28版本,kube-controller-manager添加了--concurrent-cron-job-syncs flag用来设置cron job controller的workers数。
support.huaweicloud.com/bulletin-cce/cce_bulletin_0068.html