

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# `AWSSupport-TroubleshootEbsCsiDriversForEks`
<a name="automation-awssupport-troubleshoot-ebs-csi-drivers-for-eks"></a>

 **Description** 

 `AWSSupport-TroubleshootEbsCsiDriversForEks` Runbook 可協助疑難排解 Amazon Elastic Kubernetes Service (Amazon EKS) 和 Amazon EBS 容器儲存介面 (CSI) 驅動程式問題中 Amazon Elastic Block Store 磁碟區掛載的問題 

**重要**  
目前 AWS Fargate 不支援在 上執行的 Amazon EBS CSI 驅動程式。

 **如何運作？** 

 Runbook 會`AWSSupport-TroubleshootEbsCsiDriversForEks`執行下列高階步驟：
+ 驗證目標 Amazon EKS 叢集是否存在且處於作用中狀態。
+ 根據附加元件是 Amazon EKS 受管或自我管理，部署進行 Kubernetes API 呼叫所需的身分驗證資源。
+ 執行 Amazon EBS CSI 控制器運作狀態檢查和診斷。
+ 對節點角色和服務帳戶角色執行 IAM 許可檢查。
+ 診斷指定應用程式 Pod 的持久性磁碟區建立問題。
+ 檢查node-to-pod排程，並檢查 Pod 事件。
+ 收集相關的 Kubernetes 和應用程式日誌，將它們上傳到指定的 Amazon S3 儲存貯體。
+ 執行節點運作狀態檢查，並驗證與 Amazon EC2 端點的連線。
+ 檢閱持久性磁碟區區塊型設備附件和掛載狀態。
+ 清除在疑難排解期間建立的身分驗證基礎設施。
+ 產生結合所有診斷結果的全方位故障診斷報告。

**注意**  
Amazon EKS 叢集的身分驗證模式必須設定為 `API`或 `API_AND_CONFIG_MAP`。建議使用 Amazon EKS Access 項目。Runbook 需要 Kubernetes 角色型存取控制 (RBAC) 許可才能執行必要的 API 呼叫。
如果您未指定 Lambda 函數 (`LambdaRoleArn` 參數） 的 IAM 角色，自動化會在您的帳戶`Automation-K8sProxy-Role-<ExecutionId>`中建立名為 的角色。此角色包含 受管政策和 `AWSLambdaBasicExecutionRole` `AWSLambdaVPCAccessExecutionRole`。
某些診斷步驟需要 Amazon EKS 工作者節點為 Systems Manager 受管執行個體。如果節點不是 Systems Manager 受管執行個體，則會略過需要 Systems Manager 存取的步驟，但其他檢查會繼續進行。
自動化包含移除身分驗證基礎設施資源的清除步驟。即使先前的步驟失敗，此清除步驟仍會執行，這有助於防止 AWS 帳戶中的孤立資源。

 [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/automation/execute/AWSSupport-TroubleshootEbsCsiDriversForEks) 

**文件類型**

 自動化

**擁有者**

Amazon

**平台**

/

**必要的 IAM 許可**

`AutomationAssumeRole` 參數需要下列動作才能成功使用 Runbook。
+ `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 自動化角色。確認信任關係包含下列政策。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "",
               "Effect": "Allow",
               "Principal": {
                   "Service": "ssm.amazonaws.com"
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

1. 將下列政策連接至 IAM 角色，以授予對指定資源執行指定動作所需的許可。
   + 如果您預期將執行和資源日誌上傳到相同區域中的 Amazon S3 儲存貯 AWS 體，請將 取代`arn:{partition}:s3:::BUCKET_NAME/*`為 中的 `OptionalRestrictPutObjects`。
     + 如果您要在 SSM Amazon S3 儲存貯體應指向正確的 Amazon S3 儲存貯體。 `S3BucketName`
     + 如果您未指定 ，則此許可為選用 `S3BucketName`
     + Amazon S3 儲存貯體必須是私有的，且位於執行 SSM 自動化的相同 AWS 區域中。

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "OptionalRestrictPutObjects",
               "Effect": "Allow",
               "Action": [
                   "s3:PutObject"
               ],
               "Resource": [
                   "arn:aws:s3:::amzn-s3-demo-bucket/*"
               ]
           },
           {
               "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:aws:iam::*:role/TroubleshootEbsCsiDriversForEks-SSM-Role",
                   "arn:aws: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"
                   }
               }
           }
       ]
   }
   ```

------

1. 授予 Amazon EKS 叢集 RBAC （以角色為基礎的存取控制） 所需的許可。建議的方法是在 Amazon EKS 叢集中建立存取項目。

    在 Amazon EKS 主控台中，導覽至您的叢集。對於 Amazon EKS 存取項目，請確認您的存取組態設定為 `API_AND_CONFIG_MAP`或 `API`。如需設定存取項目身分驗證模式的步驟，請參閱[設定存取項目](https://docs.aws.amazon.com//eks/latest/userguide/setting-up-access-entries.html)。

   選擇**建立存取項目**。
   + 針對 *IAM 主體 ARN*，選取您在上一個步驟中為 SSM 自動化建立的 IAM 角色。
   + 針對*類型*，選取 `Standard`。

1. 新增存取政策：
   + 針對*存取範圍*，選取 `Cluster`。
   + 針對*政策名稱*，選取 `AmazonEKSAdminViewPolicy`。

   選擇 **Add Policy (新增政策)**。

   如果您未使用存取項目來管理 Kubernetes API 許可，則必須更新 `aws-auth` ConfigMap，並在 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`

1. 執行自動化 [AWSSupport-TroubleshootEbsCsiDriversForEks （主控台）](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootEbsCsiDriversForEks/description)

1. 選擇 **Execute automation** (執行自動化)。

1. 針對輸入參數，輸入下列內容：
   + **AutomationAssumeRole （選用）：**
     + 描述：（選用） 允許 SSM Automation 代表您執行動作的 (IAM) 角色的 AWS Identity and Access Management Amazon Resource Name (ARN)。角色需要新增到您的 Amazon EKS 叢集存取項目或 RBAC 許可，以允許 Kubernetes API 呼叫。
     + 類型：`AWS::IAM::Role::Arn`
     + 範例：`TroubleshootEbsCsiDriversForEks-SSM-Role`
   + **EksClusterName：**
     + 描述：目標 Amazon Elastic Kubernetes Service (Amazon EKS) 叢集的名稱。
     + 類型：`String`
   + **ApplicationPodName：**
     + 描述：Amazon EBS CSI 驅動程式發生問題的 Kubernetes 應用程式 Pod 名稱。
     + 類型：`String`
   + **ApplicationNamespace：**
     + 描述：Amazon EBS CSI 驅動程式發生問題之應用程式 Pod 的 Kubernetes 命名空間。
     + 類型：`String`
   + **EbsCsiControllerDeploymentName （選用）：**
     + 描述：（選用） Amazon EBS CSI 控制器 Pod 的部署名稱。
     + 類型：`String`
     + 預設：`ebs-csi-controller`
   + **EbsCsiControllerNamespace （選用）：**
     + 描述：（選用） Amazon EBS CSI 控制器 Pod 的 Kubernetes 命名空間。
     + 類型：`String`
     + 預設：`kube-system`
   + **S3BucketName （選用）：**
     + 描述：（選用） 將上傳故障診斷日誌的目標 Amazon S3 儲存貯體名稱。
     + 類型：`AWS::S3::Bucket::Name`
   + **LambdaRoleArn （選用）：**
     + 描述：（選用） 允許 AWS Lambda 函數存取所需 AWS 服務和資源的 IAM 角色 ARN。
     + 類型：`AWS::IAM::Role::Arn`

   選取**執行**。

1. 完成後，請檢閱*輸出*區段以取得執行的詳細結果。

**參考**

Systems Manager Automation
+ [執行此自動化 （主控台）](https://console.aws.amazon.com/systems-manager/documents/AWSSupport-TroubleshootEbsCsiDriversForEks/description)
+ [執行自動化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-working-executing.html)
+ [設定 自動化](https://docs.aws.amazon.com//systems-manager/latest/userguide/automation-setup.html)
+ [支援自動化工作流程](https://aws.amazon.com/premiumsupport/technology/saw/)

如需 Amazon EBS CSI 驅動程式的詳細資訊，請參閱 [Amazon EBS CSI 驅動程式](https://docs.aws.amazon.com//eks/latest/userguide/ebs-csi.html)。