Amazon EKS 클러스터의 업그레이드 실패 문제를 해결하려면 어떻게 해야 합니까?

6분 분량
0

Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터가 업데이트되지 않습니다. 이 문제를 해결하려면 어떻게 해야 하나요?

간략한 설명

Amazon EKS 클러스터 업데이트 실패를 해결하려면 다음을 시도해 보세요.

  • IpNotAvailable 오류의 경우 클러스터와 연결된 서브넷에 사용 가능한 IP 주소가 충분한지 확인합니다.
  • SubnetNotFound 오류의 경우 서브넷이 존재하고 올바르게 태그가 지정되었는지 확인합니다.
  • SecurityGroupNotFound 오류의 경우 클러스터와 연결된 보안 그룹이 있는지 확인합니다.
  • EniLimitReached 오류의 경우 AWS 계정의 탄력적 네트워크 인터페이스 할당량을 늘립니다.
  • AccessDenied 오류의 경우 올바른 권한이 있는지 확인합니다.
  • OperationNotPermitted 오류의 경우 Amazon EKS 서비스 역할에 올바른 권한이 있는지 확인합니다.
  • VpcIdNotFound 오류의 경우 클러스터와 연결된 VPC가 존재하는지 확인합니다.
  • 클러스터를 생성하는 데 사용한 리소스가 삭제되었는지 확인합니다.
  • eksctl을 사용하여 생성한 클러스터의 경우 AWS CloudFormation 스택이 롤백에 실패했는지 확인합니다.
  • ResourceInUseException 오류가 발생한 경우 업데이트를 다시 시도하기 전에 잠시 기다립니다.
  • 일시적인 백엔드 워크플로 문제의 경우 클러스터를 다시 업데이트합니다.

해결 방법

서브넷에 사용 가능한 IP 주소가 있는지 확인(IpNotAvailable)

Amazon EKS 클러스터를 업데이트하려면 각 서브넷에서 사용 가능한 IP 주소 5개가 있어야 합니다. 사용 가능한 IP 주소가 충분하지 않으면 클러스터 서브넷 내에서 사용되지 않는 네트워크 인터페이스를 삭제할 수 있습니다. 네트워크 인터페이스를 삭제하면 IP 주소가 해제됩니다. 자세한 내용은 네트워크 인터페이스 삭제를 참조하세요.

Amazon EKS 클러스터 서브넷에서 사용 가능한 IP 주소를 확인하려면 다음을 수행합니다.

1.    클러스터를 생성한 리전에서 Amazon EKS 콘솔을 엽니다.

2.    사이드바에서 **클러스터(Clusters)**를 선택합니다. 그런 다음 Amazon EKS 클러스터를 선택합니다.

3.    [구성] 탭을 선택합니다.

4.    [네트워킹] 탭을 선택합니다.

5.    [서브넷]에서 서브넷을 선택하여 [서브넷] 페이지를 엽니다.

6.    **서브넷(Subnet)**을 선택하고 세부 정보(Details) 탭을 선택합니다.

7.    사용 가능한 IPv4 주소를 찾아 서브넷에 있는 사용 가능한 IP 주소 수를 확인합니다.

AWS 명령줄 인터페이스에서 다음 명령을 실행합니다.

1.    클러스터와 연결된 서브넷을 가져옵니다.

$ aws eks describe-cluster --name cluster-name --region your-region

참고: cluster-name을 클러스터 이름으로 바꾸고 your-region을 AWS 리전으로 바꿉니다.

출력:

...
   "subnetIds": [
                "subnet-6782e71e",
                "subnet-e7e761ac"
            ],
   ...

2.    앞의 출력의 서브넷 설명:

aws ec2 describe-subnets --subnet-ids subet-id --region your-region

참고: subnet-id를 서브넷의 ID로 바꾸고 your-region을 사용자의 리전으로 바꿉니다.

출력:

...
"AvailableIpAddressCount": 4089,
...

사용 가능한 IP 주소가 충분하지 않으면 aws-node 대몬 집합의 환경 변수를 WARM_IP_TARGET으로 설정할 수 있습니다. 이 값은 컨테이너 네트워크 인터페이스(CNI)가 포드를 위해 예약해야 하는 보조 IP 주소 수를 정의합니다.

$ kubectl set env ds aws-node -n kube-system WARM_IP_TARGET=number

참고: number를 서브넷에서 예약하려는 IP 주소 수로 바꿉니다.

또한 변수 MINIMUM_IP_TARGET을 사용하여 노드당 최소 IP 주소 수를 제어할 수 있습니다.

모범 사례는 이러한 구성 변수를 사용하여 유지 관리되는 네트워크 인터페이스 및 IP 주소 수를 제어하는 것입니다.

서브넷이 존재하고 올바르게 태그가 지정되었는지 확인(SubnetNotFound)

서브넷이 존재하는지 확인하려면 다음 명령을 실행합니다.

aws ec2 describe-subnets --subnet-ids subet-id --region region

참고: subnet-id를 서브넷의 ID로 바꾸고 region을 서브넷이 위치한 리전으로 바꿉니다.

서브넷이 존재하지 않으면 다음 오류가 발생합니다.

An error occurred (InvalidSubnetID.NotFound) when calling the DescribeSubnets operation: The subnet ID 'subnet-id' does not exist

서브넷에 태그가 올바르게 지정되었는지 확인하려면 다음을 수행합니다.

1.    사용 가능한 IP 주소가 충분한지 확인(IpNotAvailable) 섹션의 단계를 사용하여 클러스터와 연결된 서브넷을 식별합니다.

2.    VPC 콘솔을 엽니다.

3.    사이드바에서 **서브넷(Subnets)**을 선택합니다.

4.    클러스터와 연결해야 하는 서브넷을 선택하고 [세부 정보] 창에서 [태그] 탭을 선택합니다.

5.    각 서브넷의 태그가 올바른지 확인합니다.

Key - kubernetes.io/cluster/cluster-name

참고: 앞의 태그는 Amazon EKS 클러스터 버전 1.18 이하에만 추가됩니다. Kubernetes 버전 1.19 이상으로 생성된 클러스터의 경우 태그는 필수가 아닙니다. cluster-name을 클러스터 이름으로 바꿉니다.

태그의 값은 공유하거나 소유할 수 있습니다.

지원 플랜이 있는 경우 지원 팀에 연락하여 Amazon EKS 서브넷을 업데이트하세요.

클러스터와 연결된 보안 그룹이 존재하는지 확인(SecurityGroupNotFound)

클러스터와 연결된 보안 그룹을 식별하려면 다음을 수행합니다.

1.    클러스터를 생성한 리전에서 Amazon EKS 콘솔을 엽니다.

2.    클러스터를 선택합니다.

3.    [구성] 탭을 선택합니다.

4.    [네트워킹] 탭을 선택합니다.

5.    [클러스터 보안 그룹] 및 [추가 보안 그룹] 아래에 나열된 보안 그룹을 선택합니다.

보안 그룹이 있는 경우 콘솔이 열리고 보안 그룹 세부 정보가 표시됩니다.

AWS CLI에서 다음을 수행합니다.

1.    클러스터와 연결된 보안 그룹을 가져옵니다.

$ aws eks describe-cluster --name cluster-name --region your-region

참고: cluster-name을 클러스터 이름으로 바꾸고 your-region을 사용자의 리전으로 바꿉니다.

출력:

...
"securityGroupIds": [
    "sg-xxxxxxxx"
]
...

2.    앞의 출력의 보안 그룹 설명:

$ aws ec2 describe-security-groups --group-ids security-group-id --region your-region

참고: security-group-id를 보안 그룹의 ID로 바꾸고your-region을 사용자의 리전으로 바꿉니다.

AWS 계정의 탄력적 네트워크 인터페이스 할당량 증가(EniLimitReached)

네트워크 인터페이스 할당량에 도달한 경우 사용되지 않는 네트워크 인터페이스를 제거하거나 한도 증가를 요청 할 수 있습니다.

네트워크 인터페이스가 클러스터에 연결된 경우 클러스터를 삭제하여 네트워크 인터페이스를 제거합니다. 네트워크 인터페이스가 사용되지 않는 작업자 노드에 연결된 경우 자체 관리형 노드 그룹에 대한 Auto Scaling 그룹을 삭제합니다. 관리형 노드 그룹의 경우 Amazon EKS 콘솔에서 노드 그룹을 삭제합니다. 한 노드 그룹에서 다른 노드 그룹으로 워크로드를 이동하려면 새 노드 그룹으로 마이그레이션을 참조하세요.

올바른 사용 권한이 있는지 확인(AccessDenied)

1.    IAM 콘솔을 엽니다.

2.    탐색 창에서 [역할] 또는 [사용자]를 선택합니다.

3.    역할 또는 사용자를 선택합니다.

4.    IAM 역할 또는 사용자에게 올바른 권한이 있는지 확인합니다.

서비스 역할에 올바른 권한이 있는지 확인(OperationNotPermitted)

1.    IAM 콘솔을 엽니다.

2.    탐색 창에서 [역할]을 선택합니다.

3.    AWSServiceRoleForAmazonEKS를 필터링하고 역할을 선택합니다.

4.    역할에 AmazonEKSServiceRolePolicy 정책이 연결되어 있는지 확인합니다.

정책이 연결되지 않은 경우 IAM 자격 증명 권한 추가를 참조하세요.

클러스터와 연결된 VPC가 존재하는지 확인(VpcNotFound)

1.    클러스터를 생성한 리전에서 Amazon EKS 콘솔을 엽니다.

2.    클러스터를 선택합니다.

3.    [구성] 탭을 선택합니다.

4.    [네트워킹] 탭을 선택합니다.

5.    [VPC ID] 링크를 선택하여 VPC가 존재하는지 확인합니다.

VPC가 없는 경우 새 클러스터를 생성해야 합니다.

클러스터와 연결된 리소스가 삭제되었는지 확인

Amazon EKS 콘솔에서 클러스터를 생성했고 클러스터를 생성하는 데 사용된 서브넷이 삭제된 경우 클러스터를 업데이트할 수 없습니다. 클러스터를 다시 생성하고 워크로드를 이전 클러스터에서 새 클러스터로 이동해야 합니다. 지원 플랜이 있는 경우 지원 팀에 연락하여 Amazon EKS 서브넷을 업데이트하세요.

AWS CloudFormation 스택이 롤백에 실패했는지 확인(eksctl)

CloudFormation 스택이 롤백되지 않은 경우 UPDATE_ROLLBACK_FAILED 상태에서 멈춘 경우 CloudFormation 스택을 업데이트하려면 어떻게 해야 하나요?를 참조하세요.

컨트롤 플레인 업데이트를 다시 시작하기 전에 잠시 대기(ResourceInUseException)

이 오류는 업데이트를 시작할 때 플랫폼 버전 업데이트와 같은 자동화된 Amazon EKS 컨트롤 플레인 작업이 진행 중인 경우 발생합니다. Amazon EKS에서는 비정상 컨트롤 플레인 인스턴스를 자동으로 탐지하여 교체하고 해당 인스턴스에 대한 버전 업그레이드 및 패치를 자동으로 실행합니다. 컨트롤 플레인 업데이트를 다시 시작하기 전에 자동화된 작업이 완료될 때까지 잠시 기다리세요.

참고: 대기 시간은 자동 업데이트가 시작된 시기에 따라 달라집니다. 자동 작업이 언제 해결될지 확실하지 않은 경우 한 시간 정도 기다린 후 컨트롤 플레인 업데이트를 다시 시도하세요.

클러스터를 다시 업데이트

일시적인 문제로 인해 백엔드 워크플로가 불안정해질 수 있습니다. 위의 문제 해결 단계가 문제와 관련이 없는 경우 클러스터를 다시 업데이트해 봅니다.


AWS 공식
AWS 공식업데이트됨 일 년 전