Amazon EKS のクラスターバージョンをアップグレードする際に発生する API エラーを解決する方法を教えてください。
クラスターで非推奨 API を使用しており、Error や Warning ステータスが発生しました。次回のアップグレードを行う前に修正が必要です。
簡単な説明
クラスターバージョンのアップグレード中、複数 Kubernetes コンポーネントのステータスは、Amazon EKS コンソールの [Upgrade insights] タブに表示されます。複数コンポーネントのアップグレードプロセス中に、次のステータスが表示されます。
- Error ステータスは、クラスターのアップグレード後、特定の API バージョンを参照する呼び出しがクラスターに拒否されたことを示します。
- Warning ステータスは、問題の発生を示していますが、すぐに対処する必要はありません。現在のクラスターバージョンよりも 2 バージョン以上古いバージョンを使用しており、当該 Kubernetes リソースの削除が予定されている場合に、このステータスが表示される可能性があります。
- Passing ステータスは、コンポーネントがすべてのアップグレードチェックと検証に合格したことを示します。アクションは不要です。
- Unknown ステータスは、アップグレードシステムがコンポーネントのステータスを判断できないことを示します。情報が不足しているか、処理中の状態が確定していない場合に、このステータスが表示される可能性があります。アクションを要する場合があります。
クラスターをアップグレードする前に、ステータスが Error または Warning であるコンポーネントを確認し、発生している問題を把握したり解決したりする必要があります。
解決策
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
API のステータスを確認する
クラスター内の非推奨 API のステータスを、AWS マネジメントコンソールまたは AWS CLI を使用して確認します。
AWS マネジメントコンソール
次の手順を実行します。
- Amazon EKS コンソールを開きます。
- クラスター名を選択します。
- [クラスター情報] で [Upgrade Insights] を選択します。
- [インサイトステータス] で非推奨 API に関する警告やエラーメッセージを確認します。
AWS CLI
すべての Upgrade Insights の詳細を YAML ファイルに一覧表示するには、次のコマンドを実行します。
[+] aws eks list-insights --cluster-name your-cluster-name --region your-region-name --output yaml >> insight.yaml
注: your-cluster-name および your-region-name をクラスターの実際の値に置き換えてください。
出力を任意のファイル形式で保存します。
インサイトをフィルターし、エラーのみを表示するには、次のコマンドを実行します。
[+] aws eks list-insights --cluster-name your-cluster-name --region your-region-name --filter categories=UPGRADE_READINESS,statuses=ERROR
注: your-cluster-name および your-region-name をクラスターの実際の値に置き換えてください。
出力はテキスト形式で保存されます。
非推奨 API に関するステータスエラーの解決
クラスターに非推奨 API が含まれることを示すステータスが [Upgrade Insights] タブのステータスに表示される場合、エラーが発生する可能性があります。たとえば、ポッド中断予算 (PDB) API エラーが発生した場合は、次のようなメッセージが表示される可能性があります。
"EKS using deprecated api version "/apis/policy/v1beta1/poddisruptionbudgets" and needs to replace it with "/apis/policy/v1/poddisruptionbudgets" before upgrading EKS cluster."
このエラーを解決するには、次の手順を実行します。
-
次のコマンドを実行し、クラスターが使用する PDB を一覧表示します。
kubectl get pdb -A -
次のコマンドを実行し、出力を参考に、最新の API バージョンまたは非推奨バージョンを使用する PDB を確認します。
kubectl get pdb your-pdb-name -n your-namespace -o yaml注: 実際のものでそれぞれ、your-pdb-name を PDB に、your-namespace を名前空間に置き換えてください。
-
非推奨 API バージョンを使用している PDB がある場合は更新し、YAML 構成ファイル内の最新 API バージョンを使用する設定を行います。詳細については、Kubernetes のウェブサイトで「アプリケーションに中断予算を指定する」を参照してください。
-
特定のユーザーエージェント (例: kube-apiserver、newrelic、kube-controller-manager) が原因で、非推奨 API を呼び出すエンティティを特定できない場合は、EKS クラスターの kube-api-server-audit ログファイルを参照し、そのエンティティを特定します。
注: 次のクエリを実行するには、EKS クラスターで Cloudwatch 監査ログが有効になっている必要があります。 -
[Amazon CloudWatch コンソール] を開きます。
-
[Logs Insights] を選択し、メニューからロググループを選択します (例: -/aws/eks/eksworkshop/cluster)。
-
時間と日付をフィルターし、最終リクエスト時間を表示します。
クエリ:fields @logStream, @timestamp, responseStatus.code, @message | filter @logStream like /^kube-apiserver-audit/ | filter requestURI like /\/apis\/autoscaling\/v2beta2\/horizontalpodautoscalers/ ### ---> Replace this with your Deprecated API's | sort @timestamp desc | limit 1000出力:
{ "kind":"Event", "apiVersion":"audit.k8s.io/v1", "level":"Request", "auditID":"bd2b2b0c-8556-4468-8b35-91e2e78759a6", "stage":"ResponseComplete", "requestURI":"/apis/autoscaling/v2beta2/horizontalpodautoscalers?allowWatchBookmarks=true\u0026resourceVersion=118801277\u0026timeout=5m51s\u0026timeoutSeconds=351\u0026watch=true", "verb":"watch", "user":{ "username":"system:serviceaccount:newrelic:newrelic-kube-state-metrics", "uid":"9b97a09a-cf70-4fe2-8fd8-6c87110ce672", "groups":[ "system:serviceaccounts", "system:serviceaccounts:newrelic", "system:authenticated" ], "extra":{ "authentication.kubernetes.io/pod-name":[ "newrelic-kube-state-metrics-5bb6ccc94d-8nj9v" ], "authentication.kubernetes.io/pod-uid":[ "5b156744-00b6-4dfb-a998-a32140409b8e" ] } }, "sourceIPs":[ "10.62.98.22" ], "userAgent":"v2.6.0", "objectRef":{ "resource":"horizontalpodautoscalers", "apiGroup":"autoscaling", "apiVersion":"v2beta2" }, "responseStatus":{ "metadata":{ }, "code":200 }, "requestReceivedTimestamp":"2024-12-13T20:13:04.438616Z", "stageTimestamp":"2024-12-13T20:18:55.441744Z", "annotations":{ "authorization.k8s.io/decision":"allow", "authorization.k8s.io/reason":"RBAC: allowed by ClusterRoleBinding \"newrelic-kube-state-metrics\" of ClusterRole \"newrelic-kube-state-metrics\" to ServiceAccount \"newrelic-kube-state-metrics/newrelic\"", "k8s.io/deprecated":"true", "k8s.io/removed-release":"1.26" } } -
非推奨 API を最新の API で更新するには、次のいずれかの手順を実行します。
ユーザー名が cluster-autoscaler と表示されている場合は、クラスターオートスケーラーを最新バージョンに更新します。
ユーザー名が newrelic-kube-state-metric と表示されている場合は、そのクラスターを最新 kube-state-metrics バージョンにアップグレードします (別々にインストールした場合)。または、kube-state-metrics がバンドルされている場合は、新しいレリックプラグインにアップグレードします。
注: AWS は、過去 30 日間にわたり非推奨 API をスキャンします。cluster-autoscaler または newrelic-kube-state-metric の更新後、AWS が非推奨 API をスキャンし、[Update Insights] タブに表示されるステータスを更新するまでには、最大 30 日かかる可能性があります。
- トピック
- Containers
- 言語
- 日本語

関連するコンテンツ
AWS公式更新しました 7ヶ月前