美国时间 12 月 8 日,Kubernetes v1.20 正式发布,这是 2020 年的第三个新版本,也是最后一个版本。该版本包含 42 个增强功能:其中 11 个增强功能趋于稳定,15 个进入 Beta,16 个进入 Alpha。

之前扩展发布周期后,v1.20 发布周期恢复到正常的 11 周。这是近来功能最密集的版本之一:Kubernetes 更新速度仍在加快。该版本 Alpha 增强功能比稳定的增强功能更多,这表明在云原生生态系统中还有许多值得探索的空间。

Major Themes

新版本主要围绕以下主题:

存储卷快照功能趋于稳定

现在提供了触发存储卷快照功能的标准方法,并允许用户以可移植的方式在 Kubernetes 环境或任何受支持的存储提供程序上合并快照操作。同时,Kubernetes 快照原语可作为基础构建块,能提供 Kubernetes 开发企业级存储管理功能的能力,包括应用程序以及集群备份解决方案。

另外,快照支持需要 Kubernetes 发行厂商捆绑 Snapshot 控制器、Snapshot CRD 和验证 Webhook。支持快照功能的 CSI 驱动程序也要部署在集群上。

Kubectl Debug 进入 Beta

kubectl alpha debug 功能在 v1.20 进入 Beta 版,并更名为 kubectl debug。该功能能通过 kubectl 提供常见调试工作流的支持。现在 kubectl 支持的故障排除方案包括:

  • 通过创建使用其他容器镜像的 Pod 副本解决启动时工作负载崩溃的问题。
  • 通过在 Pod 的新副本或临时容器(临时容器是一项默认不启用的 Alpha 功能。)使用调试工具添加新容器来解决 Distroless 容器的故障。
  • 通过在主机命名空间中创建能运行并具有访问主机文件系统权限的容器,对节点进行故障排除。
作为新的内置命令,kubectl debug 比任何名字带有 “debug” 的 kubectl 插件优先级都要高,因此必须重命名受影响的插件。

在 v1.20 中,不建议继续使用 kubectl alpha debug。后续发行版中其也被删除,建议更新脚本使用 kubectl debug。

Beta:API 优先级和公平性

v1.18 版本引入的 API 优先级和公平性(APF)功能现在在 Kubernetes v1.20 默认启用,它能让 kube-apiserver 按优先级对传入的请求进行分类。

IPV4/IPV6 Alpha 功能更新

IPv4/IPv6 双协议栈基于用户和社区反馈重新实现,现在既可以将 IPv4 与 IPv6 服务集群 IP 地址分配给单个服务,也可以在服务中实现单 IP 栈与双 IP 栈的切换。

GA:限制进程 PID

进程 ID(PID)是 Linux 主机上的基本资源,为避免主机不稳定,要达到任务限制与资源限制的平衡。管理员需要一些机制来确保用户 Pod 不会导致 PID 耗尽,以避免主机守护程序(运行时、kubelet 等)停止运行。另外,也要确保在容器之间限制 PID,以确保不会对节点上其他工作负载造成影响。在一年前默认启用后,SIG Node 通过 SupportNodePidsLimit(node-to-pod PID 隔离)和 SupportPodPidsLimit(能在 Pod 限制 PID)将限制进程 PID 推向 GA。

Alpha:节点优雅关闭

用户和集群管理员希望 Pod 以预定的 Pod 生命周期运行,包括 Pod 终止。但目前节点关闭时,Pod 不会遵循预期的 Pod 终止生命周期,并无法正常终止,这可能会导致工作负载出现问题。GracefulNodeShutdown 功能现在进入 Alpha,它能让 kubelet 知道节点系统关闭,从而在系统关闭期间正常终止 Pod。

重要更新

以下是 v1.20 中值得关注的变化:

Dockershim 弃用

v1.20 将弃用 Dockershim,即 Docker 容器运行时接口(CRI),这意味着不再支持 Docker,并将在后续版本中删除。由于Docker 镜像遵循开放容器倡议(OCI)镜像规范,所以 Docker 产生的镜像能在所有 CRI 兼容运行时的集群中正常使用。详情可见《Kubernetes 弃用 Docker 来龙去脉》

Exec 探针超时处理

修正了长期存在的 exec 探针超时错误,该 bug 可能会对现有 pod 定义造成影响。在发布该修复程序之前,exec 探针未考虑 timeoutSeconds 字段,并会无限期运行,甚至超过配置限制,直到返回结果。此次修复后,如果未指定值,探针会默认为 1 秒;如果探针时间超过 1 秒,现有 Pod 定义可能无法满足。此次修复还添加了一个名为 ExecProbeTimeout 的 feature gate,它能让集群操作员还原到以前的行为,但在后续发行版中,它将被锁定并删除。如果要恢复以前的行为,要将该 feature gate 设置为 false。

其他更新

以下特性进入稳定

  • RuntimeClass
  • 内置 API 类型默认值
  • 添加 Pod-Startup Liveness-Probe 延迟
  • 在 Windows 上支持 CRI-ContainerD
  • SCTP 支持 Service
  • 将 AppProtocol 添加到 Service 和 Endpoint

重要功能更新

  • #19 CronJobs:用于执行所有与时间相关的操作,即备份,报告生成等。

发布 logo

对于许多人来说,2020 年是充满挑战的一年,但是 Kubernetes 的贡献者在此版本中提供了创纪录的增强功能。这是一项巨大的成就,因此发布负责人希望在今年结束时有所成就,并向 Kubernetes 1.14-Caturnetes 致敬,包括一只名为 “Humphrey” 的 “rad” 猫。