AWSSupport-TroubleshootEbsCsiDriversForEks - AWS Systems Manager 自動化ランブックリファレンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWSSupport-TroubleshootEbsCsiDriversForEks

説明

AWSSupport-TroubleshootEbsCsiDriversForEks ランブックは、Amazon Elastic Kubernetes Service (Amazon EKS) および Amazon EBS Container Storage Interface (CSI) ドライバーの問題における Amazon Elastic Block Store ボリュームマウントに関する問題のトラブルシューティングに役立ちます。

重要

現在、 で実行されている Amazon EBS CSI ドライバー AWS Fargate はサポートされていません。

動作の仕組み

ランブックは、以下の大まかなステップAWSSupport-TroubleshootEbsCsiDriversForEksを実行します。

  • ターゲット Amazon EKS クラスターが存在し、アクティブ状態になっているかどうかを確認します。

  • アドオンが Amazon EKS マネージドかセルフマネージドかに基づいて、Kubernetes API コールを実行するために必要な認証リソースをデプロイします。

  • Amazon EBS CSI コントローラーのヘルスチェックと診断を実行します。

  • ノードロールとサービスアカウントロールに対して IAM アクセス許可チェックを実行します。

  • 指定されたアプリケーションポッドの永続的なボリューム作成の問題を診断します。

  • node-to-podスケジューリングを確認し、ポッドイベントを調べます。

  • 関連する Kubernetes ログとアプリケーションログを収集し、指定された Amazon S3 バケットにアップロードします。

  • ノードのヘルスチェックを実行し、Amazon EC2 エンドポイントとの接続を検証します。

  • 永続的なボリュームブロックデバイスのアタッチメントとマウントステータスを確認します。

  • トラブルシューティング中に作成された認証インフラストラクチャをクリーンアップします。

  • すべての診断結果を組み合わせた包括的なトラブルシューティングレポートを生成します。

注記
  • Amazon EKS クラスターの認証モードは、 APIまたは に設定する必要がありますAPI_AND_CONFIG_MAP。Amazon EKS Access エントリを使用することをお勧めします。ランブックには、必要な API コールを実行するための Kubernetes ロールベースのアクセスコントロール (RBAC) アクセス許可が必要です。

  • Lambda 関数の IAM ロール (LambdaRoleArn パラメータ) を指定しない場合、オートメーションはAutomation-K8sProxy-Role-<ExecutionId>アカウントに という名前のロールを作成します。このロールには、 管理ポリシーAWSLambdaBasicExecutionRoleと が含まれますAWSLambdaVPCAccessExecutionRole

  • 一部の診断ステップでは、Amazon EKS ワーカーノードを Systems Manager マネージドインスタンスにする必要があります。ノードが Systems Manager マネージドインスタンスでない場合、Systems Manager アクセスを必要とするステップはスキップされますが、他のチェックは続行されます。

  • 自動化には、認証インフラストラクチャリソースを削除するクリーンアップステップが含まれています。このクリーンアップステップは、前のステップが失敗しても実行され、 AWS アカウント内の孤立したリソースを防ぐのに役立ちます。

このオートメーションを実行する (コンソール)

ドキュメントタイプ

Automation

[所有者]

Amazon

[Platforms] (プラットフォーム)

/

必要な IAM アクセス許可

AutomationAssumeRole パラメータでは、ランブックを正常に使用するために、次のアクションが必要です。

  • ec2:DescribeIamInstanceProfileAssociations

  • ec2:DescribeInstanceStatus

  • ec2:GetEbsEncryptionByDefault

  • eks:DescribeAddon

  • eks:DescribeAddonVersions

  • eks:DescribeCluster

  • iam:GetInstanceProfile

  • iam:GetOpenIDConnectProvider

  • iam:GetRole

  • iam:ListOpenIDConnectProviders

  • iam:SimulatePrincipalPolicy

  • s3:GetBucketLocation

  • s3:GetBucketPolicyStatus

  • s3:GetBucketPublicAccessBlock

  • s3:GetBucketVersioning

  • s3:ListBucket

  • s3:ListBucketVersions

  • ssm:DescribeInstanceInformation

  • ssm:GetAutomationExecution

  • ssm:GetDocument

  • ssm:ListCommandInvocations

  • ssm:ListCommands

  • ssm:SendCommand

  • ssm:StartAutomationExecution

指示

次の手順に従って自動化を設定します。

  1. TroubleshootEbsCsiDriversForEks-SSM-Role アカウントに SSM 自動化ロールを作成します。信頼関係に以下のポリシーが含まれていることを確認します。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "ssm.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
  2. 以下のポリシーを IAM ロールにアタッチして、指定されたリソースで指定されたアクションを実行するために必要なアクセス許可を付与します。

    • 同じ AWS リージョンの Amazon S3 バケットに実行ログとリソースログをアップロードする場合は、 の を自分の arn:{partition}:s3:::BUCKET_NAME/* として置き換えますOptionalRestrictPutObjects

      • Amazon S3 バケットは正しい Amazon S3 バケットを指す必要があります。 S3BucketName

      • を指定しない場合、このアクセス許可はオプションです。 S3BucketName

      • Amazon S3 バケットはプライベートで、SSM オートメーションを実行するのと同じ AWS リージョンにある必要があります。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "OptionalRestrictPutObjects", "Effect": "Allow", "Action": ["s3:PutObject"], "Resource": ["arn:{partition}:s3:::BUCKET_NAME/*"] }, { "Effect": "Allow", "Action": [ "ec2:DescribeIamInstanceProfileAssociations", "ec2:DescribeInstanceStatus", "ec2:GetEbsEncryptionByDefault", "eks:DescribeAddon", "eks:DescribeAddonVersions", "eks:DescribeCluster", "iam:GetInstanceProfile", "iam:GetOpenIDConnectProvider", "iam:GetRole", "iam:ListOpenIDConnectProviders", "iam:SimulatePrincipalPolicy", "s3:GetBucketLocation", "s3:GetBucketPolicyStatus", "s3:GetBucketPublicAccessBlock", "s3:GetBucketVersioning", "s3:ListBucket", "s3:ListBucketVersions", "ssm:DescribeInstanceInformation", "ssm:GetAutomationExecution", "ssm:GetDocument", "ssm:ListCommandInvocations", "ssm:ListCommands", "ssm:SendCommand", "ssm:StartAutomationExecution" ], "Resource": "*" }, { "Sid": "SetupK8sApiProxyForEKSActions", "Effect": "Allow", "Action": [ "cloudformation:CreateStack", "cloudformation:DeleteStack", "cloudformation:DescribeStacks", "cloudformation:UpdateStack", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeNetworkInterfaces", "ec2:DescribeRouteTables", "ec2:DescribeSecurityGroups", "ec2:DescribeSubnets", "ec2:DescribeVpcs", "eks:DescribeCluster", "iam:CreateRole", "iam:DeleteRole", "iam:GetRole", "iam:TagRole", "iam:UntagRole", "lambda:CreateFunction", "lambda:DeleteFunction", "lambda:GetFunction", "lambda:InvokeFunction", "lambda:ListTags", "lambda:TagResource", "lambda:UntagResource", "lambda:UpdateFunctionCode", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:ListTagsForResource", "logs:PutLogEvents", "logs:PutRetentionPolicy", "logs:TagResource", "logs:UntagResource", "ssm:DescribeAutomationExecutions", "tag:GetResources", "tag:TagResources" ], "Resource": "*" }, { "Sid": "PassRoleToAutomation", "Effect": "Allow", "Action": "iam:PassRole", "Resource": [ "arn:*:iam::*:role/TroubleshootEbsCsiDriversForEks-SSM-Role", "arn:*:iam::*:role/Automation-K8sProxy-Role-*" ], "Condition": { "StringLikeIfExists": { "iam:PassedToService": [ "lambda.amazonaws.com", "ssm.amazonaws.com" ] } } }, { "Sid": "AttachRolePolicy", "Effect": "Allow", "Action": [ "iam:AttachRolePolicy", "iam:DetachRolePolicy" ], "Resource": "*", "Condition": { "StringLikeIfExists": { "iam:ResourceTag/AWSSupport-SetupK8sApiProxyForEKS": "true" } } } ] }
  3. Amazon EKS クラスター RBAC (ロールベースのアクセスコントロール) に必要なアクセス許可を付与します。推奨されるアプローチは、Amazon EKS クラスターでアクセスエントリを作成することです。

    Amazon EKS コンソールで、クラスターに移動します。Amazon EKS アクセスエントリの場合は、アクセス設定が API_AND_CONFIG_MAPまたは に設定されていることを確認しますAPI。アクセスエントリの認証モードを設定する手順については、「アクセスエントリの設定」を参照してください。

    [アクセスエントリの作成] を選択してください。

    • IAM プリンシパル ARN で、前のステップで SSM 自動化用に作成した IAM ロールを選択します。

    • [タイプ] では、Standard[] を選択します。

  4. アクセスポリシーを追加します。

    • アクセススコープで、 を選択しますCluster

    • ポリシー名 で、 を選択しますAmazonEKSAdminViewPolicy

    [Add policy] を選択します。

    アクセスエントリを使用して Kubernetes API アクセス許可を管理していない場合は、ConfigMap aws-auth を更新し、IAM ユーザーまたはロール間にロールバインディングを作成する必要があります。IAM エンティティに次の読み取り専用 Kubernetes API アクセス許可があることを確認します。

    • GET /apis/apps/v1/namespaces/{namespace}/deployments/{name}

    • GET /apis/apps/v1/namespaces/{namespace}/replicasets/{name}

    • GET /apis/apps/v1/namespaces/{namespace}/daemonsets/{name}

    • GET /api/v1/nodes/{name}

    • GET /api/v1/namespaces/{namespace}/serviceaccounts/{name}

    • GET /api/v1/namespaces/{namespace}/persistentvolumeclaims/{name}

    • GET /api/v1/persistentvolumes/{name}

    • GET /apis/storage.k8s.io/v1/storageclasses/{name}

    • GET /api/v1/namespaces/{namespace}/pods/{name}

    • GET /api/v1/namespaces/{namespace}/pods

    • GET /api/v1/namespaces/{namespace}/pods/{name}/log

    • GET /api/v1/events

  5. オートメーション AWSSupport-TroubleshootEbsCsiDriversForEks を実行する (コンソール)

  6. [Execute automation] (オートメーションを実行) を選択します。

  7. 入力パラメータには、次のように入力します。

    • AutomationAssumeRole(オプション):

      • 説明: (オプション) SSM Automation がユーザーに代わってアクションを実行できるようにする AWS Identity and Access Management (IAM) ロールの Amazon リソースネーム (ARN)。Kubernetes API コールを許可するには、ロールを Amazon EKS クラスターアクセスエントリまたは RBAC アクセス許可に追加する必要があります。

      • 型: AWS::IAM::Role::Arn

      • 例: TroubleshootEbsCsiDriversForEks-SSM-Role

    • EksClusterName:

      • 説明: ターゲット Amazon Elastic Kubernetes Service (Amazon EKS) クラスターの名前。

      • 型: String

    • ApplicationPodName:

      • 説明: Amazon EBS CSI ドライバーに問題がある Kubernetes アプリケーションポッドの名前。

      • 型: String

    • ApplicationNamespace:

      • 説明: Amazon EBS CSI ドライバーに問題があるアプリケーションポッドの Kubernetes 名前空間。

      • 型: String

    • EbsCsiControllerDeploymentName (オプション):

      • 説明: (オプション) Amazon EBS CSI コントローラーポッドのデプロイ名。

      • 型: String

      • デフォルト: ebs-csi-controller

    • EbsCsiControllerNamespace (オプション):

      • 説明: (オプション) Amazon EBS CSI コントローラーポッドの Kubernetes 名前空間。

      • 型: String

      • デフォルト: kube-system

    • S3BucketName (オプション):

      • 説明: (オプション) トラブルシューティングログがアップロードされるターゲット Amazon S3 バケット名。

      • 型: AWS::S3::Bucket::Name

    • LambdaRoleArn (オプション):

      • 説明: (オプション) AWS Lambda 関数が必要な AWS サービスとリソースにアクセスできるようにする IAM ロールの ARN。

      • 型: AWS::IAM::Role::Arn

    [実行] を選択します。

  8. 完了したら、出力セクションで実行の詳細な結果を確認します。

リファレンス

Systems Manager Automation

Amazon EBS CSI ドライバーの詳細については、「Amazon EBS CSI ドライバー」を参照してください。