スキップしてコンテンツを表示

Amazon EKS のクラスターバージョンをアップグレードする際に発生する API エラーを解決する方法を教えてください。

所要時間2分
0

クラスターで非推奨 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 マネジメントコンソール

次の手順を実行します。

  1. Amazon EKS コンソールを開きます。
  2. クラスター名を選択します。
  3. [クラスター情報][Upgrade Insights] を選択します。
  4. [インサイトステータス] で非推奨 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."

このエラーを解決するには、次の手順を実行します。

  1. 次のコマンドを実行し、クラスターが使用する PDB を一覧表示します。

    kubectl get pdb -A
  2. 次のコマンドを実行し、出力を参考に、最新の API バージョンまたは非推奨バージョンを使用する PDB を確認します。

    kubectl get pdb your-pdb-name -n your-namespace -o yaml

    注: 実際のものでそれぞれ、your-pdb-name を PDB に、your-namespace を名前空間に置き換えてください。

  3. 非推奨 API バージョンを使用している PDB がある場合は更新し、YAML 構成ファイル内の最新 API バージョンを使用する設定を行います。詳細については、Kubernetes のウェブサイトで「アプリケーションに中断予算を指定する」を参照してください。

  4. 特定のユーザーエージェント (例: kube-apiservernewrelickube-controller-manager) が原因で、非推奨 API を呼び出すエンティティを特定できない場合は、EKS クラスターの kube-api-server-audit ログファイルを参照し、そのエンティティを特定します。
    注: 次のクエリを実行するには、EKS クラスターで Cloudwatch 監査ログが有効になっている必要があります。

  5. [Amazon CloudWatch コンソール] を開きます。

  6. [Logs Insights] を選択し、メニューからロググループを選択します (例: -/aws/eks/eksworkshop/cluster)。

  7. 時間と日付をフィルターし、最終リクエスト時間を表示します。
    クエリ:

    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"
       }
    }
  8. 非推奨 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 日かかる可能性があります。

AWS公式更新しました 4ヶ月前