搜索

5.2. Kubernetes API 弃用和删除

download PDF

OpenShift Container Platform 4.13 使用 Kubernetes 1.26,它删除了几个已弃用的 API。

集群管理员必须在从 OpenShift Container Platform 4.12 升级到 4.13 前提供手动确认。这有助于防止升级到 OpenShift Container Platform 4.13 后出现问题,其中已删除的 API 仍在由运行或与集群交互的工作负载、工具或其他组件使用。管理员必须针对将要删除的任何 API 评估其集群,并迁移受影响的组件,以使用适当的新 API 版本。完成此评估和迁移后,管理员可以进行确认。

在将 OpenShift Container Platform 4.12 集群更新至 4.13 之前,您必须提供管理员确认。

5.2.1. 删除的 Kubernetes API

OpenShift Container Platform 4.13 使用 Kubernetes 1.26,它删除了以下已弃用的 API。您必须迁移清单和 API 客户端以使用适当的 API 版本。有关迁移已删除 API 的更多信息,请参阅 Kubernetes 文档

表 5.1. 从 Kubernetes 1.26 中删除的 API
资源删除的 API迁移到

FlowSchema

flowcontrol.apiserver.k8s.io/v1beta1

flowcontrol.apiserver.k8s.io/v1beta3

HorizontalPodAutoscaler

autoscaling/v2beta2

autoscaling/v2

PriorityLevelConfiguration

flowcontrol.apiserver.k8s.io/v1beta1

flowcontrol.apiserver.k8s.io/v1beta3

5.2.2. 为删除的 API 评估集群

有多种方法可帮助管理员确定将使用移除的 API 的位置。但是,OpenShift Container Platform 无法识别所有实例,尤其是使用闲置或外部工具的工作负载。管理员负责针对已删除 API 实例正确评估所有工作负载和其他集成。

5.2.2.1. 查看警报以识别已删除 API 的使用

当使用 API 时会触发两个警报,该 API 将在以后的版本中删除:

  • APIRemovedInNextReleaseInUse - 针对将在下一个 OpenShift Container Platform 发行版本中删除的 API。
  • APIRemovedInNextEUSReleaseInUse - 针对将在下一个 OpenShift Container Platform 扩展更新支持(EUS)版本中删除的 API。

如果其中任何一个警报在集群中触发,请查看警报并采取措施通过迁移清单和 API 客户端以使用新的 API 版本来清除警报。

使用 APIRequestCount API 获取有关使用哪些 API 的更多信息,以及哪些工作负载正在使用删除的 API,因为警报不提供此信息。此外,一些 API 可能不会触发这些警报,但仍然被 APIRequestCount 捕获。将警报调优为不太敏感,以避免在生产环境中出现警报。

5.2.2.2. 使用 APIRequestCount 来识别已删除 API 的使用

您可以使用 APIRequestCount API 来跟踪 API 请求,并检查它们中的任何请求是否使用其中一个已删除的 API。

先决条件

  • 您必须可以使用具有 cluster-admin 角色的用户访问集群。

流程

  • 运行以下命令并检查输出的 REMOVEDINRELEASE 列以确定当前正在使用的 API:

    $ oc get apirequestcounts

    输出示例

    NAME                                                                      REMOVEDINRELEASE   REQUESTSINCURRENTHOUR   REQUESTSINLAST24H
    ...
    flowschemas.v1beta1.flowcontrol.apiserver.k8s.io                          1.26               0                       16
    flowschemas.v1beta2.flowcontrol.apiserver.k8s.io                                             101                     857
    groups.v1.user.openshift.io                                                                  22                      201
    hardwaredata.v1alpha1.metal3.io                                                              3                       33
    helmchartrepositories.v1beta1.helm.openshift.io                                              142                     628
    horizontalpodautoscalers.v2.autoscaling                                                      11                      103
    horizontalpodautoscalers.v2beta2.autoscaling                              1.26               0                       15
    ...

    重要

    您可以安全地忽略结果中出现的以下条目:

    • system:serviceaccount:kube-system:generic-garbage-collectorsystem:serviceaccount:kube-system:namespace-controller 用户可能会出现在结果中,因为这些服务在搜索要删除的资源时调用所有注册的 API。
    • system:kube-controller-managersystem:cluster-policy-controller 用户可能会出现在结果中,因为它们在强制执行各种策略时遍历所有资源。

    您还可以使用 -o jsonpath 来过滤结果:

    $ oc get apirequestcounts -o jsonpath='{range .items[?(@.status.removedInRelease!="")]}{.status.removedInRelease}{"\t"}{.metadata.name}{"\n"}{end}'

    输出示例

    1.26	flowschemas.v1beta1.flowcontrol.apiserver.k8s.io
    1.26	horizontalpodautoscalers.v2beta2.autoscaling

5.2.2.3. 使用 APIRequestCount 来识别哪些工作负载正在使用删除的 API

您可以检查给定 API 版本的 APIRequestCount 资源,以帮助识别正在使用 API 的工作负载。

先决条件

  • 您必须可以使用具有 cluster-admin 角色的用户访问集群。

流程

  • 运行以下命令并检查 usernameuserAgent 字段,以帮助识别使用 API 的工作负载:

    $ oc get apirequestcounts <resource>.<version>.<group> -o yaml

    例如:

    $ oc get apirequestcounts flowschemas.v1beta1.flowcontrol.apiserver.k8s.io -o yaml

    您还可以使用 -o jsonpathAPIRequestCount 资源中提取 usernameuserAgent 值:

    $ oc get apirequestcounts flowschemas.v1beta1.flowcontrol.apiserver.k8s.io \
      -o jsonpath='{range .status.currentHour..byUser[*]}{..byVerb[*].verb}{","}{.username}{","}{.userAgent}{"\n"}{end}' \
      | sort -k 2 -t, -u | column -t -s, -NVERBS,USERNAME,USERAGENT

    输出示例

    VERBS  USERNAME                                                            USERAGENT
    get    system:serviceaccount:openshift-cluster-version:default             cluster-version-operator/v0.0.0
    watch  system:serviceaccount:openshift-oauth-apiserver:oauth-apiserver-sa  oauth-apiserver/v0.0.0

5.2.3. 迁移已删除 API 实例

有关如何迁移删除 Kubernetes API 的详情,请参阅 Kubernetes 文档中的已弃用 API 迁移指南

5.2.4. 管理员确认

在为任何已删除的 API 评估集群并迁移了任何删除 API 后,您可以确认集群已准备好从 OpenShift Container Platform 4.12 升级到 4.13。

警告

请注意,管理员须负责确保已移除 API 的所有使用都已根据需要得到解决和迁移,然后再提供此管理员的确认。OpenShift Container Platform 可以协助评估,但无法识别所有可能移除的 API 的使用,特别是空闲的工作负载或外部工具。

先决条件

  • 您必须可以使用具有 cluster-admin 角色的用户访问集群。

流程

  • 运行以下命令,确认您已完成评估,集群已准备好在 OpenShift Container Platform 4.13 中删除 Kubernetes API:

    $ oc -n openshift-config patch cm admin-acks --patch '{"data":{"ack-4.12-kube-1.26-api-removals-in-4.13":"true"}}' --type=merge
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.