Amazon EKS の kubelet と CNI プラグインの問題を解決するにはどうすればよいですか?

所要時間3分
0

Amazon Elastic Kubernetes Service (Amazon EKS) 用の kubelet と CNI プラグインの問題を解決したいと考えています。

簡単な説明

CNI プラグイン (Kubernetes のウェブサイト) を使用してワーカーノード上のポッドに IP アドレスを割り当てて実行するには、以下の設定が必要です。

  • AWS Identity and Access Management (IAM) アクセス許可 (ワーカーノードの IAM ロールにアタッチする CNI ポリシーを含む)。または、サービスアカウントの IAM ロールを通じて提供する IAM アクセス許可
  • ワーカーノードからアクセス可能な Amazon EKS API サーバーエンドポイント。
  • Amazon Elastic Compute Cloud (Amazon EC2)、Amazon Elastic Container Registry (Amazon ECR)、Amazon Simple Storage Service (Amazon S3) の API エンドポイントへのネットワークアクセス。
  • サブネットで十分に使用可能な IP アドレス。
  • aws-node ポッドが Ready ステータスに進むために正常に動作する kube-proxy。
  • Amazon EKS バージョンをサポートする kube-proxyバージョンVPC CNI バージョン

解決策

各ワーカーノードで aws-node ポッドが Running ステータスになっていることを確認する

aws-node ポッドがワーカーノードで Running ステータスになっていることを確認するには、次のコマンドを実行します:

kubectl get pods -n kube-system -l k8s-app=aws-node -o wide

コマンド出力で RESTARTS カウントが 0 であることが示された場合、aws-node ポッドは Running ステータスです。「サブネットに十分な空きIPアドレスがあることを確認する」セクションの手順を試してください。

コマンド出力で RESTARTS カウントが 0 より大きいことが示された場合は、ワーカーノードが Amazon EKS クラスターの API サーバーエンドポイントに到達できることを確認します。以下のコマンドを実行します。

curl -vk https://eks-api-server-endpoint-url

Amazon EKS クラスターへの接続を確認する

1. Amazon EKS のワーカーノードのセキュリティグループが正しく設定されていることを確認します。詳細については、「Amazon EKS セキュリティグループの要件および考慮事項」を参照してください。

2.サブネットのワーカーノードのネットワークアクセスコントロールリスト (ネットワーク ACL) ルールが Amazon EKS API サーバーエンドポイントとの通信を許可していることを確認します。

**重要:**ポート 443 でインバウンドトラフィックとアウトバウンドトラフィックを許可します。

3.各ワーカーノードで kube-proxy ポッドが Running ステータスになっていることを確認します:

kubectl get pods -n kube-system -l k8s-app=kube-proxy -o wide

4.ワーカーノードが Amazon EC2、Amazon ECR、および Amazon S3 の API エンドポイントにアクセスできることを確認します。

**注:**これらのサービスは、パブリックエンドポイントまたは AWS PrivateLink を使用して設定します。

サブネットに十分な空き IP アドレスがあることを確認する

Amazon Virtual Private Cloud (Amazon VPC)ID の各サブネットで使用可能な IP アドレスを一覧表示するには、次のコマンドを実行します。

aws ec2 describe-subnets --filters "Name=vpc-id,Values= VPCID" | jq '.Subnets[] | .SubnetId + "=" + "\(.AvailableIpAddressCount)"'

**注:**ポッドが起動されるサブネットの AvailableIPAddressCount0 より大きくなければなりません。

セキュリティグループの制限に達したかどうかを確認する

Elastic Network Interface ごとのセキュリティグループの制限に達すると、ポッドのネットワーキング設定が失敗する可能性があります。

詳細については、「Amazon VPC quotas 」を参照してください。

CNI プラグインの最新の安定版を実行していることを確認する

CNI プラグインの最新バージョンを使用していることを確認するには、「Amazon VPC CNI plugin for Kubernetes Amazon EKS アドオンの使用」を参照してください。

その他のトラブルシューティングについては、GitHub の AWS に関する問題のページと CNI プラグインのリリースノートを参照してください。

ワーカーノードの VPC CNI プラグインのログを確認する

ポッドを作成したときに IP アドレスがコンテナに割り当てられない場合は、次のエラーが表示されます。

failed to assign an IP address to container

ログを確認するには、/var/log/aws-routed-eni/ ディレクトリに移動し、plugin.logipamd.log というファイル名を探します。

kubelet が Docker コンテナイメージをプルすることを確認する

kubelet が kube-proxy コンテナと amazon-k8s-cni コンテナの Docker コンテナイメージをプルしない場合は、次のエラーが表示されます:

network plugin is not ready: cni config uninitialized

ワーカーノードから Amazon EKS API サーバーエンドポイントにアクセスできることを確認します。

WARM\ _PREFIX\ _TARGET 値が正しく設定されていることを確認する

**注:**これは、プレフィックス委任がオンになっている場合にのみ適用されます。プレフィックス委任が有効になっている場合は、次のエラーメッセージがログに記録されていないか確認してください。

Error: Setting WARM_PREFIX_TARGET = 0 is not supported while WARM_IP_TARGET/MINIMUM_IP_TARGET is not set.
Please configure either one of the WARM_{PREFIX/IP}_TARGET or MINIMUM_IP_TARGET env variable

WARM\ _PREFIX\ _TARGET1 以上の値に設定する必要があります。0 に設定すると、次のエラーが表示されます。

詳細については、GitHub ウェブサイトの「CNI configuration variables」を参照してください。

サブネット内の予約スペースを確認する

**注:**これは、プレフィックス委任がオンになっている場合にのみ適用されます。プレフィックス委任が有効になっている場合は、次のエラーメッセージがログに記録されていないか確認してください。

InsufficientCidrBlocks

サブネットに十分な /28 IP CIDR (16 IP) ブロックがあることを確認してください。16 個の IP はすべて連続している必要があります。連続する IP アドレスが /28 の範囲にない場合は、「 InsufficientCidrBlocks 」というエラーが表示されます。

エラーを解決するには、新しいサブネットを作成し、そこからポッドを起動します。また、Amazon EC2 サブネット CIDR 予約を使用して、プレフィックスが割り当てられたサブネット内のスペースを予約します。詳細については、「 Use subnet CIDR reservations」を参照してください。

Infrastructure as Code (IaC) で行われた更新は、競合が発生するとロールバックされます

Amazon EKS マネージドアドオンを使用する場合、次のサービスを使用する更新エラーは、競合方法が定義されていないとロールバックされます。

正しい方法は、NONEOVERWRITE、または PRESERVE です。

  • メソッドが定義されていない場合、デフォルトは NONE です。システムが競合を検出すると、CloudFormation スタックの更新はロールバックされ、変更は行われません。
  • アドオンのデフォルトを設定するには、OVERWRITE を使用します。自己管理型アドオンから Amazon EKS マネージドアドオンに移行するときは、OVERWRITE を使用する必要があります。
  • WARM_IP_TARGET または カスタムネットワーキングなどのカスタム定義の設定を使用する場合は、PRESERVE を使用します。

ノードは NotReady ステータスです

Runningステータスではない aws-node がある場合、ノードは NotReady ステータスになるのが一般的です。詳しくは、「ノードのステータスを NotReady または Unknown から Ready に変更するにはどうすればよいですか?」を参照してください。

カスタムネットワーク設定の課題

VPC CNIのカスタムネットワーキングが有効になっている場合、EniConfigカスタムリソース定義 (CRD) で正しいサブネットとセキュリティグループを定義する必要があります。

カスタムネットワークが有効かどうかを確認するには、kube-system 名前空間の aws-node ポッドを記述します。その後、次の環境変数が true に設定されているかどうかを確認します:

AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG

カスタムネットワークがアクティブな場合は、CRD が正しく設定されていることを確認します。

kubectl get ENIConfig -A -o yaml

アベイラビリティーゾーン名と一致する各エントリを記述します。サブネット ID は VPC とワーカーノードの配置と一致します。セキュリティグループは、クラスターセキュリティグループにアクセスしたり、クラスターセキュリティグループと共有したりできます。ベストプラクティスの詳細については、GitHub ウェブサイトの「 EKS Best Practices Guides 」を参照してください。


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

関連するコンテンツ