Kubernetes 1.16 已弃用的 API

Kubernetes 1.16 版本不再提供特定 API 的长期弃用版本。当前的 API 版本已从 v1.10 开始提供,并且可以在所有受支持的 Google Kubernetes Engine (GKE) 版本上使用。

1.16 版中的变化

大多数已弃用的 API 都是以前的 Beta 版 API,这些 API 已从 Beta 版升级为稳定版。稳定版 API 可以提供长期的兼容性保证,您应使用稳定版 API 来代替已弃用的 Beta 版 API。

更改了默认值

下表介绍了您在从 apps/v1beta1 迁移时未定义的参数默认值的变化。

对象 变化 新行为
DaemonSet spec.updateStrategy.type:OnDelete 已更改为 RollingUpdate 使用 RollingUpdate 时,如果更改 DaemonSet 定义,则系统会自动重新创建 Pod。
Deployment spec.progressDeadlineSeconds:2147483647 减少到 600 缩短 Deployment 在被声明为失败之前保持“正在进行”状态的时间。
spec.revisionHistoryLimit:2147483647 减少到 10 限制 ReplicaSet 对象在被 Deployment 控制器删除之前所保留的数量。
spec.strategy.rollingUpdate.maxSurge:增加到 25% 定义滚动更新可以在 specs.replicas 中指定的所需 Pod 数量基础上额外创建的 Pod 数量上限。
spec.strategy.rollingUpdate.maxUnavailable:增加到 25% 只有在不可用的 Pod 数量少于此数量时,滚动更新才会继续进行。如果是百分数,则在 spec.replicas 中指定。
StatefulSet spec.updateStrategy.type:OnDelete 已更改为 RollingUpdate 使用 RollingUpdate 时,如果更改 StatefulSet 定义,则系统会自动重新创建 Pod。

准备升级到 1.16

您无需删除并重新创建任何 API 对象。所有现有的 API 对象都可以使用新的 API 版本进行读取和更新。

不过,在升级到 Kubernetes 1.16 之前,我们建议您迁移您的客户端和清单。所有 GKE 版本都提供了新的 API 版本。

问题排查

查找写入已弃用的 API 的 API 客户端

启用了 Google Cloud 的运维套件的集群可以使用以下查询来识别写入已弃用的 API 的客户端:

resource.type="k8s_cluster"
resource.labels.cluster_name="$CLUSTER_NAME"
protoPayload.authenticationInfo.principalEmail:("system:serviceaccount" OR "@")
protoPayload.request.apiVersion=("extensions/v1beta1" OR "apps/v1beta1" OR "apps/v1beta2")
protoPayload.request.kind!="Ingress"
NOT ("kube-system")

运行 kubectl get ... -o yaml 后,系统会显示已弃用的版本

如果正在使用的集群上有可用的扩展程序/v1beta1 版本,则 kubectl get ... 会优先使用这些扩展程序/v1beta1 版本。例如,以下命令可以获取 1.15 版集群上的扩展程序/v1beta1 部署:

kubectl get deployments -o yaml

将集群升级到 Kubernetes 1.16 后,同一命令会自动使用新的 API。

您可以明确指定 API 组或版本。例如,如需提取应用/v1 部署,请运行以下命令:

kubectl get deployments.v1.apps -o yaml

资源

如需了解详情,请参阅 OSS Kubernetes 文档: