创建集群后,如何排查 Amazon EKS 环境中的错误?

上次更新时间:2021-08-24

创建集群后,我的 Amazon Elastic Kubernetes Service (Amazon EKS) 环境中出现错误。

简短描述

您可以使用 AWSPremiumSupport-TroubleshootEKSCluster 自动化工作流,排查 Amazon EKS 环境中的常见错误。此工作流会提供详细报告,列出错误、警告以及 AWS 推荐的最佳实践的链接。

如果遇到以下问题,您可以使用 AWSPremiumSupport-TroubleshootEKSCluster 自动化工作流:

  • 您的 Kubernetes Cluster Autoscaler 无法正常工作。
  • 您的内部负载均衡器无法在私有或公有子网中创建。
  • 您不清楚工件节点是否正在使用最新的 Amazon Machine Image (AMI)。
  • 您的 aws-node pod 中出现访问被拒的错误。
  • 您无法拉取 Amazon Elastic Container Registry (Amazon ECR) 镜像。
  • 您的托管节点不稳定,或者您的自行管理节点没有加入集群。

AWSPremiumSupport-TroubleshootEKSCluster 自动化工作流会进行以下检查:

  • 检查 Auto Scaling 组的 Cluster AutoScaler 子网标签,此标签用于内部及面向互联网的负载均衡器与工件安全组。
    重要提示:如果您有多个安全组与工件节点相关联,必须将标签应用于其中一个安全组。 将标签的键设置为 kubernetes.io/cluster/your-cluster-name。将值设置为 owned。如果您只有一个安全组与工件节点相关联,则此标签是可选的。
  • 检查工件节点以获取最新的 AMI。
  • 检查安全组规则以获取最低设置和推荐设置。例如,工作流会检查来自集群的安全组(即所有连接到集群的安全组)和工件安全组的入口与出口。
  • 检查自定义网络访问控制列表(网络 ACL)配置。
  • 检查工件节点上的 AWS Identity and Access Management (IAM) 策略,包括 AmazonEKSWorkerNodePolicyAmazonEC2ContainerRegistryReadOnly 策略
  • 通过检查工件节点所在子网的路由表,检查工件节点是否可以连接到互联网。

解决方案

使您的工件节点可被发现

要使您的工件节点可被发现,请使用 AWSPremiumSupport-TroubleshootEKSCluster 自动化工作流和您的 Amazon EKS 集群:

1.    打开 Amazon EC2 控制台

2.    在导航窗格中,选择 Instances(实例)

3.    为您的工件节点选择 Amazon Elastic Compute Cloud (Amazon EC2) 实例,然后选择 Tags(标签)选项卡。

4.    选择 Add/Edit Tags(添加/编辑标签)

5.    对于,请输入 kubernetes.io/cluster/your-cluster-name。对于,请输入 '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": "YOUR_BUCKET_NAME>"
        }
    ]
}

从 AWS Systems Manager 控制台运行自动化工作流

1.    打开 Systems Manager 控制台

2.    在导航窗格中,选择 Automation(自动化)

注意:如果 Systems Manager 主页先打开,则选择菜单图标打开导航窗格,然后选择 Automation(自动化)

3.    选择执行自动化

4.    在 Automation document(自动化文档)搜索框中,输入 AWSPremiumSupport-TroubleshootEKSCluster,然后按 Enter 键。

5.    从搜索结果中,选择 AWSPremiumSupport-TroubleshootEKSCluster

注意:文档拥有者为 Amazon

6.    在 Document description(文档描述)选项卡中,验证 Document version(文档版本)是否设置为 Default version at runtime(运行时默认版本)

7.    选择 Next(下一步)

8.    在 Execute automation document(执行自动化文档)部分,选择 Simple execution(简单执行)

9.    在 Input parameters(输入参数)部分,指定以下参数:

ClusterName 设置为集群的名称。此集群必须在您的 AWS 账户中运行。
AutomationAssumeRole 设置为要用于工作流的 IAM 角色。
(可选)如果需要,将 BucketName 设置到要上传报告的 Amazon Simple Storage Service (Amazon S3) 存储桶。

10.    选择 Execute(执行)

11.    要监控执行过程,请选择正在运行的 Automation(自动化),然后选择 Steps(步骤)选项卡。

12.    执行完成后,选择 Descriptions(描述)选项卡,然后选择 View output(查看输出)以查看结果。

注意:结果采用详细报告的形式,列出了集群的所有错误和警告。

从 AWS CLI 运行自动化工作流

注意:如果您在运行 AWS Command Line Interface (AWS CLI) 命令时收到错误,请确保您运行的是最新版本的 AWS CLI

如果要将报告放在 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

这篇文章对您有帮助吗?


您是否需要账单或技术支持?