5.2. Kubernetes API 弃用和删除
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 文档。
资源 | 删除的 API | 迁移到 |
---|---|---|
|
|
|
|
|
|
|
|
|
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-collector
和system:serviceaccount:kube-system:namespace-controller
用户可能会出现在结果中,因为这些服务在搜索要删除的资源时调用所有注册的 API。 -
system:kube-controller-manager
和system: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
角色的用户访问集群。
流程
运行以下命令并检查
username
和userAgent
字段,以帮助识别使用 API 的工作负载:$ oc get apirequestcounts <resource>.<version>.<group> -o yaml
例如:
$ oc get apirequestcounts flowschemas.v1beta1.flowcontrol.apiserver.k8s.io -o yaml
您还可以使用
-o jsonpath
从APIRequestCount
资源中提取username
和userAgent
值:$ 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