클러스터를 생성한 후, Amazon EKS 환경의 오류를 해결하려면 어떻게 해야 하나요?

4분 분량
0

클러스터를 생성한 후, Amazon Elastic Kubernetes Service(Amazon EKS) 환경에서 오류가 발생합니다.

간략한 설명

AWSPremiumSupport-TroubleshootEKSCluster 자동화 워크플로를 사용하여 Amazon EKS 환경에서 일반적으로 나타나는 오류를 해결할 수 있습니다. 이 워크플로는 오류, 경고 및 Amazon Web Services(AWS) 권장 모범 사례에 대한 링크를 나열한 세부 보고서를 제공합니다.

**참고:**AWSPremiumSupport-TroubleshootEKSCluster 자동화 워크플로를 사용하려면, 기업 또는 비즈니스 지원 플랜을 구독해야 합니다.

다음과 같은 문제가 발생하는 경우 AWSPremiumSupport-TroubleshootEKSCluster 자동화 워크플로를 사용할 수 있습니다.

  • Kubernetes Cluster Autoscaler가 작동하지 않습니다.
  • 내부 로드 밸런서가 프라이빗 또는 퍼블릭 서브넷에 생성되지 않습니다.
  • 워커 노드가 최신 Amazon Machine Image(AMI)를 사용하고 있는지 알 수 없습니다.
  • aws-node 포드에 액세스 거부 오류가 발생합니다.
  • Amazon Elastic Container Registry(Amazon ECR) 이미지를 가져올 수 없습니다.
  • 관리형 노드가 안정화되지 않거나 자체 관리형 노드가 클러스터에 조인되지 않습니다.

AWSPremiumSupport-TroubleshootEKSCluster 자동화 워크플로는 다음 검사를 실행합니다.

  • 오토 스케일링에서 내부 및 인터넷 연결 로드 밸런서와 워커 보안 그룹에 대한 Cluster AutoScaler 서브넷 태그를 확인합니다.
    중요: 워커 노드에 연결된 보안 그룹이 두 개 이상인 경우 보안 그룹 중 하나에 태그를 적용해야 합니다. 태그의 키를 kubernetes.io/cluster/your-cluster-name으로 설정합니다. 값을 owned(소유)로 설정합니다. 워커 노드에 연결된 보안 그룹이 하나뿐인 경우 이 태그는 선택 사항입니다.
  • 워커 노드에서 최신 AMI를 확인합니다.
  • 보안 그룹 규칙의 최소 설정 및 권장 설정을 확인합니다. 예를 들어 워크플로는 클러스터의 보안 그룹(즉, 클러스터에 첨부된 모든 보안 그룹) 및 워커 보안 그룹으로부터의 수신 및 송신을 확인합니다.
  • 사용자 지정 네트워크 액세스 제어 목록(네트워크 ACL) 구성 확인
  • AmazonEKSWorkerNodePolicyAmazonEC2ContainerRegistryReadOnly 정책을 포함한 워커 노드에 대한 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.    Execute automation(자동화 실행)을 선택합니다.

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 역할로 설정합니다.
(선택 사항) 필요한 경우, 보고서를 업로드하려는 Amazon Simple Storage Service(S3) 버킷으로 BucketName을 설정합니다.

참고: AutomationAssumeRole을 지정하려면 정책에 적용되는 IAM 역할과 S3 버킷을 생성하세요. 그런 다음, SSM 자동화를 위해 보고서를 자체 S3 버킷(BucketName)에 업로드합니다.

10.    Execute(실행)을 선택합니다.

11.    진행 상황을 모니터링하려면 실행 중인 Automation(자동화)을 선택한 다음 Steps(단계) 탭을 선택합니다.

12.    프로세스가 완료되면 Descriptions(설명) 탭을 선택한 다음, View output(출력 보기)을 선택하여 결과를 확인합니다.

참고: 결과는 클러스터의 모든 오류와 경고를 나열하는 보고서로 표시됩니다.

AWS CLI에서 자동화 워크플로 실행

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하는 경우, 최신 AWS CLI 버전을 사용하고 있는지 확인하세요. AutomationAssumeRole을 지정하고 자동화 워크플로 실행을 위해 보고서를 자체 SX3 버킷(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