Kubernetes v1.24版特性介绍篇

Kubernetes-v1.24介绍

早在 2020 年 12 月,Kubernetes 就宣布弃用 Dockershim。在 Kubernetes 中,dockershim 是一个软件 shim,它允许您将Docker引擎用作 Kubernetes 中的容器运行时。在即将发布的 v1.24 版本中,我们将移除 Dockershim,弃用和移除之间的间隔,符合项目在弃用后至少一年支持功能的政策。如果您是集群操作员,则本指南包含您在此版本中需要了解的实际情况。此外,您需要做些什么来确保您的集群不会倒塌!

有什么影响吗?

如果您正在滚动自己的集群或不确定此删除是否会影响您,请保持安全并检查您是否对 Docker Engine 有任何依赖关系

注意:使用 Docker Desktop 构建的应用程序容器,不是集群的 Docker 依赖项。由 Docker 创建的容器镜像符合开放容器倡议 (OCI),这是一种 Linux 基金会治理结构,围绕容器格式和运行时定义行业标准。它们可以在 Kubernetes 支持的任何容器运行时上正常工作。

如果您使用来自云提供商的托管 Kubernetes 服务,并且您没有显式更改容器运行时,那么您可能不需要做任何事。Amazon EKS、Azure AKS 和 Google GKE 现在都默认使用 containerd,但如果您有任何节点自定义,您应该确保它们不需要更新。要检查节点的运行时,请遵循找出节点上使用的容器运行时

无论您是滚动自己的集群还是使用来自云提供商的托管 Kubernetes 服务,您都可能需要迁移依赖于 Docker Engine 的遥测或安全代理

Docker 依赖项怎么办?

如果您的 Kubernetes 集群依赖于 Docker Engine,并且您打算升级到 Kubernetes v1.24(出于安全和类似原因,您最终应该这样做),您需要将容器运行时从 Docker Engine 更改为其他内容或使用cri-dockerd . 由于containerd是一个毕业的 CNCF 项目和 Docker 本身的运行时,因此作为替代容器运行时是一个安全的选择。幸运的是,Kubernetes 项目已经记录了更改节点容器运行时的过程,以 containerd 为例。切换到其他支持的运行时之一的说明类似。

升级要点汇总

从kubelet中移除dockershim

自1.20版本被弃用之后,dockershim组件终于在1.24的kubelet中被删除。从1.24开始,大家需要使用其他受到支持的运行时选项(例如containerd或CRI-O);如果您选择Docker Engine作为运行时,则需要使用cri-dockerd。关于dockershim移除的更多详细信息,请参上述所述。

各beta API默认关闭

之前的版本,默认会启用被认为不稳定的 Beta API,这加速了这些功能的采用,然而也会造成问题。例如,一个测试版 API 有一个错误,它将出现在 90% 的已部署集群上。

从 Kubernetes 1.24 开始,新的 beta API 将默认禁用。

签名发布工件

在1.24版本中,发布工件将使用cosign进行签名,同时提供实验性的镜像签名验证支持。发布工件的签名与验证属于Kubernetes软件发布供应链的安全性改进举措之一。

OpenAPI v3

Kubernetes 1.24开始为API的OpenAPI v3发布格式提供beta支持。

存储容量与存储卷扩展双双迎来通用版本

存储容量跟踪通过CSIStorageCapacity对象公开当前可用的存储容量,并对使用后续绑定的CSI存储卷的pod进行调度增强。

存储卷扩展则新增对现有持久卷的重新调整功能。

NonPreemptingPriority迎来稳定版

此功能为PriorityClasses添加了新的选项,可开启或关闭Pod抢占机制。

存储插件迁移

目前Kubernetes开发团队正在迁移树内存储插件,希望在实现CSI插件的同时、保持原有API的正常起效。Azure Disk与OpenStack Cinder等插件已经完成了迁移。

gRPC探针升级至beta版

在1.24版本中,gRPC探针功能已经进入beta阶段且默认启用。现在,大家可以在Kubernetes中为自己的gRPC应用程序原生配置启动、活动与就绪探测,而且无需公开HTTP商战或者使用额外的可执行文件。

Kubelet证书提供程序升级至beta版

最初在Kubernetes 1.20版本中以alpha版亮相的kubelet镜像证书提供程序现已升级至beta版。现在,kubelet将使用exec插件动态检索容器镜像注册表的凭证,而不再将凭证存储在节点文件系统之上。

上下文日志记录进入alpha阶段

Kubernetes 1.24还引入了上下文日志记录功能,允许函数调用方能够控制日志记录的各项细则(包括输出格式、详尽程度、附加值和名称)。

避免为服务分配IP时发生冲突

Kubernetes 1.24引入了一项新的选择性功能,允许用户为服务的静态IP分配地址保留一个软范围。通过手动启用此项功能,集群将从您指定的服务IP池中自动获取地址,从而降低冲突风险。

也就是说,服务的ClusterIP能够以下列方式分配:

  • 动态分配,即集群将在配置的服务IP范围内自动选择一个空闲IP。
  • 静态分配,意味着用户需要在已配置的服务IP范围内指定一个IP。

服务ClusterIP是唯一的;因此若尝试使用已被分配的ClusterIP进行服务创建,则会返回错误结果。

从kubelet中移除动态kubelet配置

在Kubernetes 1.22版本中被弃用后,动态kubelet配置现已从kubelet中正式移除。在未来的1.26版本中,此功能还将从API服务器中删除。

关于CNI版本的重要变更

在升级至1.24之前,请确认并测试你所使用的容器运行时能够在新版本中正常工作。

例如,以下容器运行时已经或即将全面兼容Kubernetes 1.24:

  • containerd v1.6.4及更高,v1.5.11及更高
  • CRI-O 1.24及更高

若CNI插件尚未升级且/或CNI配置文件中未声明CNI配置版本时,则containerd v1.6.0-v1.6.3版本将导致Pod CNI网络setup及tear down发生问题。containerd团队报告称,“这些问题已经在containerd v1.6.4中得到解决。”

在containerd v1.6.0-v1.6.3时,如果你未升级CNI插件且/或声明CNI配置版本,则可能遇到“CNI版本不兼容”或“无法为沙箱删除网络”等错误。

其他更新

毕业至稳定版

在1.24版本中,共有14项增强功能迎来稳定版:

  • 容器存储接口(CSI)存储卷扩展
  • Pod Overhead:统计绑定至Pod沙箱、但未绑定至指定容器的资源。
  • 向PriorityClasses添加非抢占选项
  • 存储容量跟踪
  • OpenStack Cinder In-Tree迁移至CSI Driver
  • Azure Disk In-Tree迁移至CSI Driver
  • 高效watch恢复:可在kube-apiserver重启后,对watch进行高效恢复
  • 服务类型=负载均衡器类字段:引入一种新的服务注释service.kubernetes.io/load-balancer-class,允许在同一集群中实现多种type: LoadBalancer服务。
  • 索引作业:为具有固定完成计数的作业Pod添加完成索引。
  • 为Jobs API添加暂停字段:为Jobs API添加暂停字段,这样编排程序即可创建作业、从而更好地控制Pod创建时间。
  • Pod Affinity NamespaceSelector:为Pod亲和性/反亲和性规范添加namespaceSelector字段。
  • 面向控制器管理器的leader迁移:kube-controller-manager与cloud-controller-manager现可在HA控制平面中使用新的控制器到控制器管理器分配功能,全程无需停机。
  • CSR持续时间:为CertificateSigningRequest API提供新的扩展机制,允许客户端为已颁发的证书请求特定持续时长。

重要变更

1.24版本包含2项重要变更:

  • 移除Dockershim
  • 默认关闭各Beta APIs