Amazon EKS クラスターでアップグレードが失敗した場合のトラブルシューティング方法を教えてください。

所要時間3分
0

Amazon Elastic Kubernetes Service (Amazon EKS) クラスターの更新に失敗します。このエラーを解決するにはどうすればよいですか?

簡単な説明

失敗した Amazon EKS クラスターの更新を解決するには、次の操作を試してください。

  • IpNotAvailable エラーの場合は、クラスターに関連付けられているサブネットに使用可能な IP アドレスが十分にあることを確認します。
  • SubnetNotFound エラーの場合は、サブネットが存在し、正しくタグ付けされていることを確認します。
  • SecurityGroupNotFound エラーの場合は、クラスターに関連付けられているセキュリティグループが存在することを確認します。
  • EniLimitReached エラーの場合は、AWS アカウントの Elastic Network Interface クォータを増やします。
  • AccessDenied エラーの場合は、正しい許可があることを確認します。
  • OperationNotPermitted エラーの場合は、Amazon EKS サービスロールに正しい許可があることを確認します。
  • VpcIdNotFound エラーの場合は、クラスターに関連付けられている VPCが存在していることを確認します。
  • クラスターの作成に使用したリソースが削除されていることを確認します。
  • eksctl で作成されたクラスターの場合、AWS CloudFormation スタックのロールバックが失敗したことを確認します。
  • ResourceInUseException エラーが発生した場合は、しばらく待ってから更新を再試行してください。
  • 一時的なバックエンドワークフローの問題の場合は、クラスターを再度更新してください。

解決方法

サブネットに使用可能な IP アドレス (IpNotAvailable) があることを確認します。

Amazon EKS クラスターを更新するには、各サブネットから 5 つの使用可能な IP アドレスが必要です。使用可能な IP アドレスが十分でない場合は、クラスターサブネット内の未使用のネットワークインターフェイスを削除できます。ネットワークインターフェイスを削除すると、IP アドレスが解放されます。詳細については、「ネットワークインターフェイスの削除」を参照してください。

Amazon EKS クラスターサブネットで使用可能な IP アドレスを確認するには:

1.    クラスターを作成したリージョンで Amazon EKS コンソールを開きます。

2.    サイドバーから [クラスター] を選択します。次に、Amazon EKS クラスターを選択します。

3.    設定タブを選択します。

4.    ネットワークタブを選択します。

5.    サブネットでサブネットを選択し、サブネット ページを開きます。 

6.    サブネットを選択し、詳細タブを選択します。

7.    使用可能な IPv4 アドレスを見つけて、サブネットで使用可能な IP アドレスの数を確認します。

AWS コマンドラインインターフェイスで、次のコマンドを実行します。

1.    クラスターに関連付けられているサブネットを取得します:

$ aws eks describe-cluster --name cluster-name --region your-region

**注:**クラスター名前 はあなたのクラスターの名前に置き換え、リージョン はお使いの AWS リージョンに置き換えます。

出力:

...
   "subnetIds": [
                "subnet-6782e71e",
                "subnet-e7e761ac"
            ],
   ...

2.    前述の出力から、サブネットを説明してください:

aws ec2 describe-subnets --subnet-ids subet-id --region your-region

**注:**サブネット‐ID をあなたのサブネットのIDに、リージョンをあなたのリージョンに置き換えます。

出力:

...
"AvailableIpAddressCount": 4089,
...

使用可能な IP アドレスが十分でない場合は、aws-node daemonset の環境変数を WARM_IP_TARGET に設定できます。これは、コンテナネットワークインターフェイス (CNI) が ポッド 用に予約する必要があるセカンダリ IP アドレスの数を定義します。

$ kubectl set env ds aws-node -n kube-system WARM_IP_TARGET=number

注: number は、サブネットから予約する IP アドレスの数で置き換えます。

また、変数 MINIMUM_IP_TARGET を使用して、ノードあたりの IP アドレスの最小数を制御することもできます。

維持するネットワークインターフェイスと IP アドレスの数を制御するには、これらの設定変数を使用するのがベストプラクティスです。

サブネットが存在し、正しくタグ付けされていることを確認する (SubnetNotFound)

サブネットが存在することを確認するには、次のコマンドを実行します。

aws ec2 describe-subnets --subnet-ids subet-id --region region

注: subnet-id を実際のサブネット ID に置き換え、region をサブネットが配置されているリージョンに置き換えます。

サブネットが存在しない場合、次のエラーが表示されます。

An error occurred (InvalidSubnetID.NotFound) when calling the DescribeSubnets operation: The subnet ID 'subnet-id' does not exist

サブネットが正しくタグ付けされていることを確認するには、次の手順を実行します。

1.    「使用可能な IP アドレスが十分にあるかどうかを確認する (IpNotAvailable)」セクションの手順を使用して、クラスターに関連付けられているサブネットを特定します。

2.    VPC コンソールを開きます。

3.    サイドバーから [サブネット] を選択します。

4.    クラスターに関連付けるサブネットを選択し、[Details] ペインでの [Tags] タブを選択します。

5.    各サブネットに正しいタグが付けられていることを確認します:

Key - kubernetes.io/cluster/cluster-name

注: 前述のタグは、Amazon EKS クラスターバージョン 1.18 以前にのみ追加されます。Kubernetes バージョン 1.19 以降で作成されたクラスターの場合、タグは必須ではありません。クラスター名前を自分のクラスター名前に置き換えます。

タグの値は、shared (共有) または owned (所有) のいずれでもかまいません。

サポートプランをご利用の場合は、サポートチームに連絡して Amazon EKS サブネットを更新してください。

クラスターに関連付けられているセキュリティグループが存在することを確認する (SecurityGroupNotFound)

クラスターに関連付けられているセキュリティグループを特定するには、以下を実行します。

1.    クラスターを作成したリージョンで Amazon EKS コンソールを開きます。

2.    クラスタを選択します

3.    設定タブを選択します。

4.    ネットワークタブを選択します。

5.    クラスターセキュリティグループ追加のセキュリティグループ の下に表示されているセキュリティグループを選択します。

セキュリティグループが存在する場合、コンソールが開き、セキュリティグループの詳細が表示されます。

AWS CLI から:

1.    選択したインスタンスに関連付けられたセキュリティグループを確認します:

$ aws eks describe-cluster --name cluster-name --region your-region

**注:**クラスター名前 は自分のクラスター名前に置き換え、リージョンはお使いリージョンに置き換えます。

出力:

...
"securityGroupIds": [
    "sg-xxxxxxxx"
]
...

2.    上記の出力から、セキュリティグループを記述します:

$ aws ec2 describe-security-groups --group-ids security-group-id --region your-region

**注:**セキュリティグループの ID を自分のセキュリティグループの ID に、リージョン を自分のリージョンに置き換えます。

AWS アカウントの Elastic Network Interface クォータを増やします。(EniLimitReached)

ネットワークインターフェースクォータに達した場合は、未使用のネットワークインターフェースを削除する、または制限の引き上げをリクエストすることができます

ネットワークインターフェースがクラスターにアタッチされている場合は、クラスターを削除してネットワークインターフェースを削除します。ネットワークインターフェイスが未使用のワーカーノードにアタッチされている場合は、自己管理型ノードグループの Auto Scaling グループを削除しますマネージドノードグループの場合は、Amazon EKS コンソールからノードグループを削除します。あるノードグループから別のノードグループにワークロードを移動するには、「新しいノードグループへの移行」を参照してください。

正しい許可があることを確認します。(AccessDenied)

1.    IAM コンソールを開きます。

2.    ナビゲーションペインで、ロールまたはユーザーを選択します。

3.    ロールまたはユーザーを選択します。

4.    IAM ロールまたはユーザーに正しい許可があることを確認します。

サービスロールに正しい許可 (OperationNotPermitted) があることを確認します。

1.    IAM コンソールを開きます。

2.    ナビゲーションペインで、ロールを選択します。

3.    AWSServiceRoleForAmazonEKS をフィルタリングし、ロールを選択します。

4.    ロールに AmazonEKSServiceRolePolicy ポリシーがアタッチされていることを確認します。

ポリシーがアタッチされていない場合は、「IAM ID のアクセス許可の追加」を参照してください。

クラスターに関連付けられている VPC が存在することを確認します。(VpcNotFound)

1.    クラスターを作成したリージョンで Amazon EKS コンソールを開きます。

2.    クラスタを選択します。

3.    設定タブを選択します。

4.    ネットワークタブを選択します。

5.    VPC IDリンクを選択して、VPC が存在するかどうかを確認します。

VPC が存在しない場合は、新しいクラスターを作成する必要があります。

クラスターに関連するリソースが削除されたことを確認する

Amazon EKS コンソールでクラスターを作成し、クラスターの作成に使用されたサブネットが削除された場合、クラスターは更新できません。クラスターを再作成し、古いクラスターから新しいクラスターにワークロードを移動する必要があります。サポートプランをご利用の場合は、サポートチームに連絡して Amazon EKS サブネットを更新してください。

AWS CloudFormation スタックがロールバックに失敗したことを確認する (eksctl)

CloudFormation スタックのロールバックに失敗した場合は、「CloudFormation スタックが UPDATE_ROLLBACK_FAILED 状態のままになっている場合に、このスタックを更新するにはどうすればよいですか?」を参照してください。

コントロールプレーンの更新を再度開始する前にしばらく待つ (ResourceInUseException)

このエラーは、更新を開始したときに、プラットフォームバージョンの更新などの自動化された Amazon EKS コントロールプレーンアクションが進行中の場合に発生します。Amazon EKS は、異常なコントロールプレーンインスタンスを自動的に検出して置換するため、コントロールプレーンインスタンスのバージョンのアップグレードやパッチ適用を自動的に行います。自動アクションが完了するまでしばらく待ってからコントロールプレーンの更新を再度開始してください。

注: 待機時間は、自動更新がいつ開始されたかによって異なります。自動アクションがいつ解決されるかわからない場合は、1 時間待ってからコントロールプレーンの更新を再試行してください。

クラスターを再度更新します

一時的な問題により、バックエンドワークフローが不安定になることがあります。前述のトラブルシューティング手順が問題に関係しない場合は、クラスターの更新をもう一度試してください。


AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ