Kubernetes 1.25 已弃用的 API


本页面介绍如何准备集群以升级到 GKE 1.25 版。您可以找到对 1.25 版中移除的已弃用 API 进行调用的 API 客户端,并更新这些客户端以使用正式版 API。如需了解详情,请参阅 Kubernetes 已弃用的 API 迁移指南

1.25 中已移除的 API

Kubernetes 1.25 版中大多数已弃用的 API 是以前的 Beta 版 API,这些 API 已从 Beta 版(例如 v1beta1)升级到正式版(例如 v1)。正式版 API 提供长期的兼容性保证,应用于取代已弃用的 Beta 版 API。

已升级到正式版 API 的所有现有对象都可以使用正式版 API 进行交互。

EndpointSlice

从 1.25 版开始,我们不再提供 EndpointSlice 的 Beta 版 API (discovery.k8s.io/v1beta1)。此 API 已在 1.21 版中弃用。

  • 迁移清单和 API 客户端以使用 discovery.k8s.io/v1 API 版本。
  • 请参阅下表,了解正式版 API 中的重大更改:

    字段 更改
    endpoints[*].topology["kubernetes.io/hostname"] 请使用 endpoints[*].nodeName
    endpoints[*].topology["topology.kubernetes.io/zone"] 请使用 endpoints[*].zone
    endpoints[*].topology 替换为 endpoints[*].deprecatedTopology,该字段在 v1 中不可写入。

PodDisruptionBudget

从 1.25 版开始,我们不再提供 PodDisruptionBudget 的 Beta 版 API (policy/v1beta1)。此 API 已在 1.21 版中弃用。

  • 迁移清单和 API 客户端以使用 policy/v1 API 版本。
  • 请参阅下表,了解正式版 API 中的重大更改:

    字段 更改
    spec.selector 写入 policy/v1 PodDisruptionBudget 的空值 ({}) 会选择命名空间中的所有 Pod。未设置的值仍然不选择任何 Pod。

CronJob

从 1.25 版开始,我们不再提供 CronJob 的 Beta 版 API (batch/v1beta1)。此 API 已在 1.21 版中弃用。迁移清单和 API 客户端以使用 batch/v1 API 版本。

PodSecurityPolicy

从 1.25 版开始,我们不再提供 PodSecurityPolicy 的 Beta 版 API (policy/v1beta1)。此 API 已在 1.21 版中弃用。

如需了解详情,请参阅 PodSecurityPolicy 弃用

RuntimeClass

从 1.25 版开始,我们不再提供 RuntimeClass 的 Beta 版 API (node.k8s.io/v1beta1)。此 API 已在 1.20 版中弃用。迁移清单和 API 客户端以使用 node.k8s.io/v1 API 版本。

Events

从 1.25 版开始,我们不再提供 Events 的 Beta 版 API (events.k8s.io/v1beta1)。此 API 已在 1.19 版中弃用。

  • 迁移清单和 API 客户端以使用 v1 API 版本或 events.k8s.io/v1 API 版本。
  • 请参阅下表,了解正式版 API 中的重大更改:

    字段 更改
    type 限制为 NormalWarning
    involvedObject 已重命名为 regarding
    actionreasonreportingControllerreportingInstance 创建 Events 时,这些字段现在为必填字段。
    firstTimestamp 已重命名为 deprecatedFirstTimestamp,并且不再允许在新 Events 中使用。请改用 eventTime
    lastTimestamp 已重命名为 deprecatedLastTimestamp,并且不再允许在新 Events 中使用。请改用 series.lastObservedTime
    count 已重命名为 deprecatedCount,并且不再允许在新 Events 中使用。请改用 series.count
    source.component 已重命名为 deprecatedSource.component,并且不再允许在新 Events 中使用。请改用 reportingController
    source.host 已重命名为 deprecatedSource.host,并且不再允许在新 Events 中使用。请改用 reportingInstance

HorizontalPodAutoscaler

从 1.25 版开始,我们不再提供 HorizontalPodAutoscaler 的 Beta 版 API (autoscaling/v2beta1)。此 API 已在 1.23 版中弃用。迁移清单和 API 客户端以使用 autoscaling/v2 HorizontalPodAutoscaler API 版本。

准备升级到版本 1.25

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

不过,在升级到 Kubernetes 1.25 之前,我们建议您先迁移客户端和清单。 如需了解详情,请参阅 Kubernetes 已弃用的 API 迁移指南

您可以查看弃用数据分析和建议,以确定集群是否正在使用 Kubernetes 1.25 已弃用的 API。GKE 会在用户代理调用已弃用的 API 时(而不是通过 Kubernetes 对象配置)生成弃用数据分析。

查找使用已弃用 API 的集群

您可以通过弃用数据分析查找哪些集群在使用已弃用的 API。弃用数据分析还提供哪些 API 客户端正在调用集群中的已弃用 API 等信息。

您还可以使用审核日志来查找哪些客户端在调用已弃用的 API。

找到对已弃用的 API 进行写入调用的 API 客户端

对于启用了 Google Cloud Observability 的集群,您可以使用以下管理员活动审核日志查询来显示非 Google 管理的用户代理使用已弃用 API 的情况:

resource.type="k8s_cluster"
labels."k8s.io/removed-release"="DEPRECATED_API_MINOR_VERSION"
protoPayload.authenticationInfo.principalEmail:("system:serviceaccount" OR "@")
protoPayload.authenticationInfo.principalEmail!~("system:serviceaccount:kube-system:")

DEPRECATED_API_MINOR_VERSION 替换为已移除弃用的 API 的次要版本,例如 1.22

系统会自动为 GKE 集群启用管理员活动审核日志。运行此查询后,日志会显示对已弃用的 API 进行写入调用的用户代理。

找到对已弃用的 API 进行读取调用的 API 客户端

默认情况下,审核日志仅显示对已弃用 API 的写入调用。如需显示对已弃用 API 的读取调用,请配置数据访问审核日志。

按照说明使用 Google Cloud 控制台配置数据访问审核日志。在 Google Cloud 控制台中,选择 Kubernetes Engine API。在信息面板的“日志类型”标签页中,选择 Admin ReadData Read

启用这些日志后,您现在可以使用原始查询来查看已弃用 API 的读取调用和写入调用。

升级第三方组件

弃用数据洞见可能会显示调用集群中已弃用 API 的第三方代理的结果。

如需解决调用已弃用的 API 的第三方代理,我们建议您采用以下最佳实践:

  1. 请咨询您的第三方软件提供商以获取更新的版本。
  2. 将第三方软件升级到最新版本。如果您无法升级软件,则应测试将 GKE 升级到已移除的 API 的版本是否会破坏您的服务。

我们建议您在预演集群上执行此升级和 GKE 版本升级以监控中断情况,然后再升级生产集群。

更新受弃用影响的集群

如需升级受弃用影响的集群,请执行以下步骤:

  1. 日志中检查哪些用户代理使用已弃用的 API。
  2. 更新使用已弃用的 API 的用户代理,以使用受支持的 API 版本。
  3. 将调用已弃用的 API 的所有第三方软件更新为最新版本。
  4. 升级测试集群并在升级生产集群之前在测试环境中测试应用,以降低弃用 API 不再可用时的中断风险。
  5. 如果您无法更新受影响的用户代理,请升级单独的测试集群以检查升级是否会导致中断。如果升级不会导致中断,您可以手动升级集群
  6. 更新所有用户代理后,GKE 会等待 30 天,以便不再观察到已弃用 API 的使用,然后取消屏蔽自动升级。自动升级根据发布时间表进行。

资源

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