クラスターを作成した後、Amazon EKS 環境でエラーをトラブルシューティングする方法を教えてください。
最終更新日: 2022 年 7 月 14 日
クラスターを作成した後、Amazon Elastic Kubernetes Service (Amazon EKS) 環境でエラーが発生します。
簡単な説明
AWSPremiumSupport-TroubleshootEKSCluster 自動化ワークフローを使用して、Amazon EKS 環境の一般的なエラーのトラブルシューティングを行うことができます。ワークフローは、エラー、警告、およびアマゾン ウェブ サービス (AWS) が推奨するベストプラクティスへのリンクを一覧表示する詳細なレポートを提供します。
注:AWSPremiumSupport-TroubleshootEKSCluster 自動化ワークフローを使用するには、エンタープライズまたはビジネスサポートプランにサブスクライブする必要があります。
次のいずれかの問題が発生した場合は、AWSPremiumSupport-TroubleshootEKSCluster 自動化ワークフローを使用できます:
- Kubernetes クラスターオートスケーラは動作していません。
- 内部ロードバランサーは、プライベートサブネットまたはパブリックサブネットには作成されません。
- ワーカーノードが最新の Amazon マシンイメージ (AMI) を使用しているかどうかはわかりません。
- aws-node ポッドでアクセス拒否エラーが発生します。
- Amazon Elastic Container Registry (Amazon ECR) イメージをプルすることはできません。
- マネージドノードが安定しないか、セルフマネージドノードがクラスターに参加しません。
AWSPremiumSupport-TroubleshootEKSCluster 自動化ワークフローは次のチェックを実行します:
- 内部およびインターネット向けロードバランサーおよびワーカーセキュリティグループのクラスターオートスケーラサブネットタグのAuto Scaling グループをチェックします。
重要:ワーカーノードに複数のセキュリティグループが関連付けられている場合は、セキュリティグループの 1 つにタグを適用する必要があります。 タグのキーを kubernetes.io/cluster/your-cluster-name に設定します。値を[owned] (所有済み) に設定します。ワーカーノードに関連付けられているセキュリティグループが 1 つだけの場合、このタグはオプションです。 - ワーカーノードで最新の AMI をチェックします。
- セキュリティグループのルールの最小設定と推奨設定をチェックします。例えば、ワークフローでは、クラスターのセキュリティグループ (クラスターにアタッチされているすべてのセキュリティグループ) およびワーカーセキュリティグループからの入力と出力がチェックされます。
- カスタムネットワークアクセスコントロールリスト (ネットワーク ACL) の設定を確認します。
- AmazonEKSWorkerNodePolicy および AmazonEC2ContainerRegistryReadOnly ポリシーを含む、ワーカーノードの AWS Identity and Access Management (IAM) ポリシーを確認します。
- ワーカーノードが配置されているサブネットのルートテーブルをチェックして、ワーカーノードがインターネットに接続できるかどうかをチェックします。
解決方法
ワーカーノードを検出可能にする
ワークノードを検出できるようにするには、AWSPremiumSupport-TroubleshootEKSCluster オートメーションワークフローと Amazon EKS クラスターを使用します。
1. Amazon EC2 コンソールを開きます。
2. ナビゲーションペインで、[Instances] (インスタンス) を選択します。
3. ワーカーノードの Amazon Elastic Compute Cloud (Amazon EC2) インスタンスを選択し、[Tags] (タグ) タブを選択します。
4. [Add/Edit Tags] (タグの追加/編集) を選択します。
5. [Key] (キー) に kubernetes.io/cluster/your-cluster-name を入力します。[Value] (値) に['owned'/ 'shared'] (「所有済み/共有済み」) と入力します。
6. [Save] (保存) を選択します。
AWSPremiumSupport-TroubleshootEKSCluster 自動化ワークフローは次のポリシーで実行されます。このポリシーには、クラスターにアクセスするための最低限のアクセス許可を含める必要があります。クラスターには AutomationAssumeRole によってのみアクセスできます。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AWSPremiumSupportTroubleshootEKSCluster",
"Effect": "Allow",
"Action": [
"eks:ListNodegroups",
"eks:DescribeCluster",
"eks:DescribeNodegroup",
"iam:GetInstanceProfile",
"iam:ListInstanceProfiles",
"iam:ListAttachedRolePolicies",
"autoscaling:DescribeAutoScalingGroups",
"ec2:DescribeInstanceTypes",
"ec2:DescribeInstances",
"ec2:DescribeNatGateways",
"ec2:DescribeSecurityGroups",
"ec2:DescribeVpcs",
"ec2:DescribeSubnets",
"ec2:DescribeNetworkAcls",
"ec2:DescribeRouteTables"
],
"Resource": "*"
},
{
"Sid": "GetPublicSSMParams",
"Effect": "Allow",
"Action": "ssm:GetParameter",
"Resource": [
"arn:aws:ssm:*:*:parameter/aws/service/eks/optimized-ami/*/amazon-linux-2/recommended/image_id",
"arn:aws:ssm:*:*:parameter/aws/service/ami-windows-latest/Windows_Server-2019-English-Core-EKS_Optimized-*/image_id",
"arn:aws:ssm:*:*:parameter/aws/service/ami-windows-latest/Windows_Server-2019-English-Full-EKS_Optimized-*/image_id",
"arn:aws:ssm:*:*:parameter/aws/service/ami-windows-latest/Windows_Server-1909-English-Core-EKS_Optimized-*/image_id",
"arn:aws:ssm:*:*:parameter/aws/service/eks/optimized-ami/*/amazon-linux-2-gpu/recommended/image_id"
]
},
{
"Sid": "UploadObjectToS3",
"Effect": "Allow",
"Action": [
"s3:GetBucketPolicyStatus",
"s3:GetBucketAcl",
"s3:PutObject"
],
"Resource": [
"<BUCKET_ARN>",
"<BUCKET_ARN>/AWSPremiumSupport-TroubleshootEKSCluster-*"
]
}
]
}
AWS Systems Manager コンソールから自動化ワークフローを実行します
1. Systems Manager コンソールを開きます。
2. ナビゲーションペインで [Automation] (オートメーション) を選択します。
注: Systems Manager ホームページが最初に開く場合は、メニューアイコンを選択してナビゲーションペインを開き、[Automation] (オートメーション) をクリックします。
3. [オートメーションの実行] を選択します。
4. オートメーションドキュメント検索ボックスに AWSPremiumSupport-TroubleshootEKSCluster と入力し、[Enter] (エンター) キーを押します。
5. 検索結果から、AWSPremiumSupport-TroubleshootEKSCluster を選択します。
注: ドキュメントの所有者は Amazon です。
6. ドキュメントの説明タブ、ドキュメントバージョンがランタイムのデフォルトバージョンに設定されていることを確認します。
7. [次へ] を選択します。
8. [Execute automation document] (オートメーションドキュメントの実行) セクションで [Simple execution] (シンプルな実行) をクリックします。
9. [Input parameters] (入力パラメータ) セクションで、次のパラメータを指定します:
[ClusterName] (クラスターネーム) をクラスターの名前に設定します。このクラスターは AWS アカウントで実行される必要があります。
AutomationAssumeRole を、ワークフローに使用する IAM ロールに設定します。
(オプション) 必要に応じて、レポートをアップロードする Amazon Simple Storage Service (Amazon S3) バケットに BucketName を設定します。
注: AutomationAssumeRole を指定する場合は、ポリシーに適用する IAM ロールと S3 バケットを作成します。次に、SSM オートメーション用の独自の S3 バケット (BucketName) にレポートをアップロードします。
10. [Execute] (実行) を選択します。
11. 実行の進行状況をモニタリングするには、実行中のオートメーションを選択し、[Steps] (ステップ) タブをクリックします。
12. 実行が完了したら、[Description] (説明) タブを選択し、[View output] (出力を表示する) をクリックして結果を表示します。
注:結果は、クラスターのすべてのエラーと警告を一覧表示するレポートとして表示されます。
AWS CLI からオートメーションワークフローを実行する
注意: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、AWS CLI の最新バージョンを使用していることを確認してください。AutomationAssumeRole を指定し、オートメーションワークフローを実行するために独自の S3 バケット (S3BucketName) にレポートをアップロードする場合は、ポリシーに適用する IAM ロールと S3 バケットを作成します。
レポートを S3 バケットに入れたい場合は、次のコマンドを実行します:
aws ssm start-automation-execution --document-name "AWSPremiumSupport-TroubleshootEKSCluster" --document-version "\$DEFAULT" --parameters '{"ClusterName":["your-eks-cluster"],"AutomationAssumeRole":["arn:aws:iam::123456789012:role/eks-troubleshooter-role"],"S3BucketName":["your_bucket"]}' --region your_region
レポートを S3 バケットにアップロードしない場合は、次のコマンドを実行します:
aws ssm start-automation-execution --document-name "AWSPremiumSupport-TroubleshootEKSCluster" --document-version "\$DEFAULT" --parameters '{"ClusterName":["your-eks-cluster"],"AutomationAssumeRole":["arn:aws:iam::123456789012:role/eks-troubleshooter-role"]}' --region your_region