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

最終更新日:2021年12月22日

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

簡単な説明

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

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

注:[解決策] セクションの AWS コンソールのリンクから、 us-east-1 AWS リージョンに移動できます。リソースが別の AWS リージョンにある場合は、必ずリージョンをリソースが存在するリージョンに変更してください。

解決方法

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

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

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

1.    Amazon EKS コンソールを開いてください。

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

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

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

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

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

6.    使用可能な 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 ノードデーモンセットの環境変数を WARM_IP_TARGET に設定できます:

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

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

WARM_IP_TARGET は、コンテナネットワークインターフェイス (CNI) が ポッド 用に予約する必要があるセカンダリ IP アドレスの数を定義します。WARM_IP_TARGETおよびその他の設定変数の詳細については、Amazon EKSでVPCサブネットのIPアドレスを使用するようにAmazon VPC CNIプラグインを設定するためのベストプラクティスは何ですか?を参照してください。

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

サブネットが存在するかどうかを確認するには、以下のコマンドを実行します:

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

注:サブネットの ID は自分のサブネットの ID に、リージョンはサブネットが配置されているリージョンに置き換えます

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

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 以前にのみ追加されます。バージョン 1.19 では、タグは必須ではありません。クラスター名をご自分のクラスター名に置き換えます。

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

クラスターに関連付けられているセキュリティグループが存在するかどうかを確認します (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 ネットワークインターフェイスの割り当てを増やす (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 コンソールでクラスターを作成し、クラスターの作成に使用されたサブネットが削除された場合、クラスターは更新できません。クラスタを再作成し、ワークロードを古いクラスタから新しいクラスタに移動する必要があります。

AWS CloudFormation スタックがロールバック (eksctl) に失敗したかどうかを確認します

クラスターをもう一度更新します

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


この記事は役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?