
Kubernetesクラスタの作成中、原因を特定できるログがないままこのエラーに直面したお客様は数多くいらっしゃいます。本記事ではDoiTが実際に行っている解決方法をご紹介します。
AWS EKSでKubernetesクラスタを作成する際に`eksctl`を使うと、ノードのクラスタ参加を待ち続けたままプロセスが進まなくなり、次のようなエラーが表示されることがあります。
> nodegroup "my-cluster" has 0 node(s) > waiting for at least 3 node(s) to become ready in "my-cluster" > timed out (after 25m0s) waiting for at least 3 nodes to join the cluster and become ready in "my-cluster"
このメッセージが追加のログもなく表示されたまま、最終的にプロセスはタイムアウトし、新しく作成されたノードはKubernetesクラスタと通信できない状態に陥ります。DoiT Internationalでの経験上、この問題の主な原因は2つです。VPCの設定ミス、もしくはポリシーの不足です。
VPCの設定ミス
既存のVPCネットワークを使う場合は、そのVPCがEKS固有の要件 [1, 2] をすべて満たしているか確認する必要があります。logz.ioのブログ記事では、VPCネットワークの構築手順が詳しく解説されており、ベースとして活用できるAWS Cloud Formationテンプレートのサンプルも紹介されています [3]。
IAMポリシーの不足
もう1つの主な原因は、EKSワーカーノードがクラスタと通信するために必要なAmazonEKSWorkerNodePolicyおよびAmazonEKS_CNI_Policy [4] に関係するものです。eksctlはデフォルトでこれらのポリシーを含むロールを自動生成しますが、「attachPolicyARNs」プロパティでARNを指定して特定のポリシーをアタッチする場合は、以下のように明示的に含める必要があります[5]。
nodeGroups: - name: my-special-nodegroup iam: attachPolicyARNs:- arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy - arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy
- arn:aws:iam::aws:policy/ElasticLoadBalancingFullAccessこれでも同じエラーが出る場合は、状況をこの記事のコメント欄にお寄せください。
[1] https://docs.aws.amazon.com/eks/latest/userguide/create-public-private-vpc.html
[2] https://eksctl.io/usage/vpc-networking/
[3] https://logz.io/blog/amazon-eks/
[4] https://docs.aws.amazon.com/eks/latest/userguide/worker_node_IAM_role.html