Amazon EKS
ユーザーガイド

Amazon EKS トラブルシューティング

この章では、Amazon EKS の使用中に表示される一般的なエラーとその回避方法について説明します。

容量不足

Amazon EKS を作成しようとするときに、次のエラーが表示された場合、指定したアベイラビリティーゾーンに、クラスターをサポートするために十分な容量がありません。

Cannot create cluster 'example-cluster' because us-east-1d, the targeted availability zone, does not currently have sufficient capacity to support the cluster. Retry and choose from these availability zones: us-east-1a, us-east-1b, us-east-1c

このエラーメッセージによって返されるアベイラビリティーゾーンでホストされているクラスター VPC 内のサブネットを使用して、クラスターを再作成してください。

aws-iam-authenticator Not Found

"aws-iam-authenticator": executable file not found in $PATH というエラーが発生した場合、kubectl は、Amazon EKS に設定されていません。詳細については、「aws-iam-authenticator のインストール」を参照してください。

ワーカーノードをクラスターに結合できません

ワーカーノードがクラスターに結合されない一般的な理由は 2 つあります。

  • aws-auth-cm.yaml ファイルでは、ワーカーノードに対する IAM ロール ARN が正しくない。ワーカーノードの IAM ロール ARN (インスタンスプロファイルの ARN ではない) が aws-auth-cm.yaml ファイルで指定されていることを確かめてください。詳細については、「Amazon EKS ワーカーノードを起動する」を参照してください。

  • ワーカーノードの AWS CloudFormation テンプレートの ClusterName がワーカーノードを参加させたいクラスターの名前と正確に一致しない。このフィールドに正しくない値を渡すと、ワーカーノードの /var/lib/kubelet/kubeconfig ファイルの設定が正しくないために、ノードはクラスターに結合されません。

許可されていないか、アクセスが拒否されました (kubectl)

kubectl コマンドの実行中に次のいずれかのエラーが発生した場合、kubectl が Amazon EKS に対して適切に設定されていないか、使用している IAM ユーザーまたはロール認証情報が Amazon EKS クラスターで十分なアクセス許可を持つ Kubernetes RBAC ユーザーにマッピングされていません。

  • could not get token: AccessDenied: Access denied

  • error: You must be logged in to the server (Unauthorized)

  • error: the server doesn't have a resource type "svc"

これは、クラスターが AWS 認証情報のあるセット (IAM ユーザーまたはロール) から作成されたが、kubectl は別の認証情報のセットを使用していることが原因である可能性があります。

Amazon EKS クラスターが作成されたら、クラスターを作成する IAM エンティティ (ユーザーまたはロール) は、管理者 (system:master アクセス許可が付与されている) として Kubernetes RBAC 認証テーブルに追加されます。最初は、その IAM ユーザーだけが kubectl を使用して Kubernetes API サーバーを呼び出すことができます。詳細については、「クラスターのユーザーまたは IAM ロールの管理」を参照してください。また、AWS IAM Authenticator for Kubernetes では、AWS SDK for Go を使用して、Amazon EKS クラスターに対して認証を行います。コンソールを使用してクラスターを作成する場合は、クラスター上で kubectl コマンドを実行する際、同じ IAM ユーザー認証情報が AWS SDK 認証情報チェーンにあることを確認する必要があります。

AWS CLI をインストールして設定する場合は、ユーザーの IAM 認証情報を設定できます。AWS CLI がユーザーに対して適切に設定されている場合は、AWS IAM Authenticator for Kubernetes を使用してこれらの認証情報も検索できます。詳細については、AWS Command Line Interface ユーザーガイド の「AWS CLI の設定」を参照してください。

Amazon EKS クラスターを作成するロールを引き受ける場合は、kubectl が同じロールを引き受けるように設定されていることを確認する必要があります。次のコマンドを使用して、IAM ロールを使用するように kubeconfig ファイルを更新します。詳細については、「kubeconfig を Amazon EKS 用に作成します。」を参照してください。

aws --region region eks update-kubeconfig --name cluster_name --role-arn arn:aws:iam::aws_account_id:role/role_name

IAM ユーザーを Kubernetes RBAC ユーザーにマッピングするには、クラスターのユーザーまたは IAM ロールの管理を参照してください。

hostname doesn't match

システムの Python のバージョンは 2.7.9 以上であることが必要です。そうでない場合は、AWS CLI で Amazon EKS を呼び出すと hostname doesn't match エラーが発生します。詳細については、Python Requests FAQ の「What are "hostname doesn't match" errors?」 を参照してください。

getsockopt: no route to host

Docker は Amazon EKS クラスターの 172.17.0.0/16 CIDR 範囲で実行されます。クラスターの VPC サブネットがこの範囲と重ならないようにすることをお勧めします。重なっている場合は、以下のエラーが発生します。

Error: : error upgrading connection: error dialing backend: dial tcp 172.17.nn.nn:10250: getsockopt: no route to host

CNI ログ収集ツール

Amazon VPC CNI plugin for Kubernetes には、独自のトラブルシューティングスクリプト (ワーカーノードの /opt/cni/bin/aws-cni-support.sh で閲覧化) があり、サポートケースや一般的なトラブルシューティング用の診断ログ収集のため利用できます。

このスクリプトは、次の診断情報を収集します。

  • L-IPAMD 詳細分析データ

  • メトリクス

  • Kubelet 詳細分析データ

  • ifconfig (出力)

  • ip rule show (出力)

  • iptables-save (出力)

  • iptables -nvL (出力)

  • iptables -nvL -t nat (出力)

  • CNI 設定のダンプ

  • Kubelet ログ

  • 保存された /var/log/messages

  • ワーカーノードのルートテーブル情報 (ip route を使用)

  • /proc/sys/net/ipv4/conf/{all,default,eth0}/rp_filtersysctls 出力

ワーカーノードでスクリプトを実行するには、以下のコマンドを使用します。

sudo bash /opt/cni/bin/aws-cni-support.sh

注記

指定された場所にスクリプトが存在しない場合は、CNI コンテナの実行に失敗します。手動でスクリプトをダウンロードして実行するには、次のコマンドを使用します。

curl https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/master/scripts/aws-cni-support.sh | sudo bash

診断情報が収集され、/var/log/aws-routed-eni/aws-cni-support.tar.gz で保存されます。