Translated message

A translation of this page exists in English.

Kubernetes API の非推奨化と削除について

更新 -

免責事項: 以下に示す外部の Web サイトへのリンクは、お客様の利便性のみを目的として提供しています。Red Hat はリンクの内容を確認しておらず、コンテンツまたは可用性について責任を負わないものとします。外部の Web サイトへのリンクを含めることは、Web サイトまたはそれらの法的主体、製品またはサービスについて Red Hat が承認したことを意味するものではありません。お客様は、外部サイトまたはコンテンツの使用 (または信頼) によって生じる損失または費用について、Red Hat が責任を負わないことに同意するものとします。

Kubernetes は、かなり厳格な API バージョン管理ポリシーに従っています。その結果、複数のリリースで、多数の v1beta1 および v2beta1 API の非推奨化が進行しています。ポリシー に従い、Beta API バージョンは非推奨化から 9 カ月または 3 リリース (どちらか長い方) 経過するまではサポートする必要があり、その後で削除可能になります。

クラスター上で実行されている、またはクラスターと対話しているワークロード、ツール、その他のコンポーネントが削除された API を引き続き使用している場所では、障害が発生するようになります。したがって、ユーザー/管理者は、クラスターが削除される予定の API を使用していないか評価し、影響を受けるコンポーネントを新しい適切な API バージョンを使用するように移行することが重要です。

これが完了すると、管理者は管理者完了通知を提供し、API の削除が発生する更新を続行できます。

削除された API を使用してアプリケーションを移行する

削除された Kubernetes API からの移行について、詳細は次を参照してください。

削除された API に関するクラスター評価

管理者はいくつかの方法で、削除予定の API が使用されている場所を特定できます。ただし、OpenShift Container Platform では、特にアイドル状態のワークロードや使用されている外部ツールなど、すべてのインスタンスを特定できるわけではありません。削除された API のインスタンスについて、すべてのワークロードとその他の統合を適切に評価するのは管理者の責任です。

アラートを確認して削除予定 API の使用を特定する

OpenShift Container Platform には、次のリリースで削除予定の API を使用していると発生するアラートが 2 つあります。

  • APIRemovedInNextReleaseInUse: 次の OpenShift Container Platform リリースで削除される API 用。
  • APIRemovedInNextEUSReleaseInUse: 次の OpenShift Container Platform Extended Update Support (EUS) リリースで削除される API 用。

上記アラートのいずれかがクラスター内で発生した場合、アラートを確認し、PI バージョンを使用するためにマニフェストと API クライアントを移行することでアラートをクリアします。

これらのアラートはクラスター全体の監視を目的としており、削除される API を使用しているワークロードを特定するための情報は提供されません。また、運用システムでのアラートによる疲弊を回避するために、これらのアラートの感度は過度に高くならないよう調整されています。APIRequestCount API を使用すると、どの API が使用されているか、どのワークロードが削除される API を使用しているかについて、詳しい情報を取得できます。一部の API は上記のアラートをトリガーしませんが、その場合も APIRequestCount によってキャプチャーされる可能性があります。

APIRequestCount を使用して削除予定 API の使用を特定する

APIRequestCount API を使用して、API リクエストを追跡し、削除された API を使用していないか確認できます。

重要: 以前の OCP 4.8 リリースには、APIRequestCount に影響を与えるバグがありました (BZ 2021629)。これは、OCP 4.8.25 で errata RHBA-2021:5209 により修正されています。APIRequestCount を確認する前に、新しい OCP 4.8.z リリースにアップグレードすることが推奨されます。

注記: APIRequestCount API を使用するには、cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる必要があります。

次のコマンドを実行し、出力の REMOVEDINRELEASE 列を調査して、現在使用中で、今後のリリースで削除が予定されている API を特定します。

$ oc get apirequestcounts

出力例:

NAME                                        REMOVEDINRELEASE   REQUESTSINCURRENTHOUR   REQUESTSINLAST24H
cloudcredentials.v1.operator.openshift.io                      32                      111
ingresses.v1.networking.k8s.io                                 28                      110
ingresses.v1beta1.extensions                1.22               16                      66
ingresses.v1beta1.networking.k8s.io         1.22               0                       1
installplans.v1alpha1.operators.coreos.com                     93                      167
...

-o jsonpath を使用して結果をフィルタリングすることもできます。

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

出力例:

1.22    11      certificatesigningrequests.v1beta1.certificates.k8s.io
1.22    356     ingresses.v1beta1.extensions
1.22    0       ingresses.v1beta1.networking.k8s.io

APIRequestCount を使用して削除予定 API を使用しているワークロードを特定する

API バージョンを指定して APIRequestCount リソースを調査すると、その API を使用しているワークロードを特定できます。

重要: 以前の OCP 4.8 リリースには、APIRequestCount に影響を与えるバグがありました (BZ 2021629)。これは、OCP 4.8.25 で errata RHBA-2021:5209 により修正されています。APIRequestCount を確認する前に、新しい OCP 4.8.z リリースにアップグレードすることが推奨されます。

注記: APIRequestCount API を使用するには、cluster-admin ロールを持つユーザーとしてクラスターにアクセスできる必要があります。

次のコマンドを実行して username フィールドと userAgent フィールドを調査し、該当する API を使用しているワークロードを特定します。

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

以下に例を示します。

$ oc get apirequestcounts ingresses.v1beta1.networking.k8s.io -o yaml

-o jsonpath を使用して、APIRequestCount リソースから usernameuserAgent の値を抽出することもできます。

$ oc get apirequestcounts ingresses.v1beta1.networking.k8s.io 
  -o jsonpath='{range .status.last24h..byUser[*]}{..byVerb[*].verb}{","}{.username}{","}{.userAgent}{"n"}{end}' 
  | sort -k 2 -t, -u | column -t -s ","

注記: コマンド内の ingresses.v1beta1.networking.k8s.io を、引き続き使用されている非推奨 API の名前に変更してください。
注記: 上記のコマンドは、選択した API が 24 時間以内に使用されたかどうかを示します。新しい API を使用するために一部のアプリケーションを変更/アップグレードした場合、last24hcurrentHour に変更して、1 時間以内にその API が使用されたか確認できます。

出力例:

VERBS  USERNAME                        USERAGENT
watch  bob                             oc/v4.8.11
watch  system:kube-controller-manager  cluster-policy-controller/v0.0.0

重要な注記: 結果に表示される次のエントリーは無視しても問題ありません。

  • system:serviceaccount:kube-system:generic-garbage-collector および system:serviceaccount:kube-system:namespace-controller ユーザーは、登録されているすべての API で削除するリソースを検索するため、結果に表示される場合があります。
  • system:kube-controller-manager および system:cluster-policy-controller ユーザーは、各種ポリシーを適用しながらすべてのリソースを確認するため、結果に表示される場合があります。
  • OpenShift GitOps がクラスターにインストールされている場合は system:serviceaccount:openshift-gitops:openshift-gitops-argocd-application-controller ユーザー (追加情報は KCS 6635361 を参照)。
  • OpenShift Pipelines がクラスターにインストールされている場合は openshift-pipelines-operator userAgent (追加情報は KCS 6821411 を参照)。
  • OSD および ROSA クラスターの場合、または Velero がクラスターにインストールされている場合は system:serviceaccount:openshift-velero:velero および system:serviceaccount:openshift-oadp:velero ユーザー (追加情報は KCS 6351332 を参照)。
  • 4.10 で system:serviceaccount:openshift-ovn-kubernetes:ovn-kubernetes-controllerendpointslices.v1beta1.discovery.k8s.io を使用中と表示される場合がありますが、この API は 4.12 で削除されています。4.11 では OVN-Kubernetes が v1 endpointslices API に切り替わり、4.10 から 4.12 への EUS アップグレードではコントロールプレーンが 4.11 をトラバースする必要があるため、問題ありません。
  • 4.10 で system:serviceaccount:openshift-network-operatorpoddisruptionbudgets.v1beta1.policy を使用中と表示される場合がありますが、この API は 4.12 で削除されています。4.11 では cluster-network-operator が v1 poddisruptionbudgets API に切り替わり、4.10 から 4.12 への EUS アップグレードではコントロールプレーンが 4.11 をトラバースする必要があるため、問題ありません。
  • system:serviceaccount:openshift-monitoring:kube-state-metricsntalpodautoscalers.v2beta2.autoscaling を使用中と表示される場合があります。OCPBUGS-4112 の解決策に従い、すべての 4.12 バージョンは v2 API に切り替わるため、これは無視しても問題ありません。
  • 4.12 にアップグレードしようとすると、system:serviceaccount:prod-rhsso:rhsso-operatorpoddisruptionbudgets.v1beta1.policy を使用中と表示される場合があります。RHSSO が最新バージョンであれば、Red Hat Single Sign-On (RH SSO) Operator is using deprecated 'poddisruptionbudgets.v1beta1.policy' API で説明されているように、これは無視しても問題ありません。

Comments