Amazon EKS의 관리형 노드 그룹 업데이트 문제를 해결하려면 어떻게 해야 하나요?

4분 분량
0

Amazon Elastic Kubernetes Service(Amazon EKS) 관리형 노드 그룹을 업데이트하려고 하는데 문제가 있습니다.

간략한 설명

Amazon EKS 관리 노드 그룹을 업데이트할 때 다음 오류 중 하나가 발생할 수 있습니다.

  • "PodEvictionFailure이 노드 그룹 nodegroup-1234의 노드에서 포드를 제거하려고 시도하는 동안 최대 재시도 횟수에 도달함"
  • "오류: Nodegroup 상태에 AsgInstanceLaunchFailures, InstanceLimitExceeded, InsufficientFreeAddresses, ClusterUnreachable 이외의 문제가 있음"
  • "오류: InvalidParameterException: 시작 템플릿 세부 정보는 사용자 지정 ami 유형 노드 그룹에 대해 null일 수 없음"

          -또는-

         "UpdateNodegroupVersion 작업을 호출하는 동안 오류 발생(잘못된 매개 변수 예외): 사용자 지정 AMI를 사용할 때는 kubernetesVersion 필드를 지정할 수 없음"

  • "UPDATE_FAILED 리소스 핸들러에서 메시지 반환: 요청한 릴리스 버전 1.xx는 Kubernetes 버전 1.yy에 유효하지 않음"

해결 방법

Amazon EKS 관리 노드 그룹 업데이트 오류를 해결하려면 다음 문제 해결 단계를 따르세요.

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하는 경우 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.

PodEvictionFailure 노드 그룹 nodegroup-1234의 노드에서 포드를 제거하려고 시도하는 동안 최대 재시도 횟수에 도달했습니다.

PodEvictionFailure 오류는 업그레이드가 노드의 모든 포드를 고갈시킬 수 없을 때 발생합니다. 포드 중단 예산(PDB)으로 인해 노드에서 포드가 고갈되지 않는 경우 문제가 발생할 수 있습니다. 예를 들어 애플리케이션의 PDB가 2개인 경우 해당 애플리케이션에 대해 최소 두 개의 포드가 실행 중이어야 합니다.

애플리케이션이 PDB를 사용하고 있는지 확인하려면 다음 kubectl 명령을 실행합니다.

$ kubectl get pdb —all-namespaces

PDB를 사용하는 경우 다음 작업 중 하나를 수행하세요.

강제 업데이트 옵션은 PDB를 인식하지 못합니다. PDB 문제에 관계없이 노드를 강제를 재시작하여 업데이트가 이루어집니다.

참고: Kubernetes 컨트롤러의 포드가 노드 전체에 분산되어 있지 않은 경우 이 옵션으로 인해 애플리케이션 다운타임이 발생할 수 있습니다.

강제 옵션을 사용하려면 다음과 비슷한 AWS CLI 명령을 실행합니다.

$ aws eks update-nodegroup-version --cluster-name cluster-123 --nodegroup-name nodegroup-1234 --force

-또는-

다음 eksctl 명령을 실행합니다.

$ eksctl upgrade nodegroup --cluster OneCluster --name managed-ng --force-upgrade

CloudWatch 로그 인사이트로 PodDisruptionBudget 제거 실패 문제 해결

Amazon CloudWatch 로그 인사이트를 통해 Amazon EKS 컨트롤 플레인 로그 데이터를 검색할 수 있습니다. 자세한 내용은 CloudWatch 로그 인사이트로 로그 데이터 분석을 참조하세요.

중요: 클러스터에서 컨트롤 플레인 로깅을 설정한 후에만 CloudWatch Logs에서 로그 이벤트를 볼 수 있습니다. CloudWatch 로그 인사이트에서 쿼리를 실행할 시간 범위를 선택하기 전에 컨트롤 플레인 로깅이 켜져 있는지 확인하세요. 자세한 내용은 CloudWatch 로그에서 Amazon EKS 컨트롤 플레인 로그를 검색하려면 어떻게 해야 하나요?를 참조하세요.

제거에 실패한 포드와 실패 횟수를 확인하려면 다음과 비슷한 쿼리를 실행합니다.

fields @timestamp, @message
| stats count(*) as count by objectRef.name
| filter @logStream like /audit/
| filter user.username == "eks:node-manager" and requestURI like "eviction" and requestURI like "pod" and responseStatus.code > 400
| sort count desc

제거 포드의 최대 재시도 횟수는 20회입니다. 표시된 포드의 실패 횟수가 20회 이상이면 이 포드가 제거에 실패한 포드입니다.

이전 포드가 제거되지 않도록 차단하는 포드 중단 예산 이름을 식별하려면 다음 쿼리를 실행합니다.

filter @logStream like /^kube-apiserver-audit/
  | fields @logStream, @timestamp, @message
  | sort @timestamp desc
  | filter user.username == "eks:node-manager" and requestURI like "eviction" and requestURI like "pod_name" and responseStatus.code > 400
  | limit 999
  | display responseObject.details.causes.0.message,objectRef.name,objectRef.namespace,objectRef.resource

참고: pod_name을 포드 이름으로 바꿉니다.

출력에는 다음과 비슷한 메시지가 표시되는데, 여기서 pod_distruption_budget은 제거 실패를 유발하는 객체입니다.

The disruption budget pod_distruption_budget needs 1 healthy pods and has 1 currently

오류: Nodegroup 상태에 AsgInstanceLaunchFailures, InstanceLimitExceeded, InsufficientFreeAddresses, ClusterUnreachable 이외의 문제가 있음

이 오류 메시지가 나타나면 관리 대상 노드 그룹 세부 정보를 확인하고 상태 문제를 찾아보세요. 자세한 내용 및 문제 해결은 관리형 노드 그룹 오류Amazon EKS 문제 API 참조를 확인하세요.

오류: InvalidParameterException: 시작 템플릿 세부 정보는 사용자 지정 ami 유형 노드 그룹에 대해 null일 수 없음

-또는-

UpdateNodegroupVersion 작업을 호출하는 동안 오류 발생(잘못된 매개 변수 예외): 사용자 지정 AMI를 사용할 때는 kubernetesVersion 필드를 지정할 수 없음.

사용자 지정 AMI가 있는 관리형 노드 그룹의 경우 업그레이드하려는 Kubernetes 버전으로 새 AMI 버전을 만들어야 합니다. 업그레이드 중에 시작 템플릿 및 버전을 지정합니다.

AWS CLI를 사용하는 경우 --launch-template 플래그를 사용합니다. eksctl의 경우 --launch-template-version 플래그를 사용합니다.

**참고:**이러한 명령에는 --kubernetes-version 플래그를 사용하지 마세요.

UPDATE_FAILED 리소스 핸들러에서 메시지 반환: "요청한 릴리스 버전 1.xx는 Kubernetes 버전 1.yy에 유효하지 않음"

이 오류는 UpdateStack API 호출을 사용하여 동일한 AWS CloudFormation 스택에서 Amazon EKS 클러스터가 있는 관리형 노드 그룹을 업그레이드할 때 발생합니다.

CloudFormation은 스택을 롤백하려고 하지만 Amazon EKS 클러스터가 성공적으로 업그레이드되었고 되돌릴 수 없기 때문에 실패합니다. Amazon EKS 클러스터는 1.xx와 1.yy를 일치시킬 수 없습니다(예: 1.21 및 1.22).

문제 해결 방법에 대한 자세한 내용은 CloudFormation 스택의 노드 그룹에 대해 발생한 첫 번째 오류를 확인하세요. 그런 다음 CloudFormation 스택을 다시 업데이트합니다.

자세한 내용은 관리형 노드 업데이트 동작을 참조하세요.


관련 정보

Amazon EKS 관리형 노드 그룹 생성 실패 문제를 해결하려면 어떻게 해야 하나요?

Amazon EKS 클러스터의 관리형 노드 그룹 오류를 해결하려면 어떻게 해야 하나요?

Amazon EKS 문제 해결

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