AWS Fargate의 Amazon EKS 포드가 보류 중 상태로 멈춘 문제를 해결하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2021년 12월 20일

AWS Fargate 인스턴스에서 실행 중인 Amazon Elastic Kubernetes Service(Amazon EKS) 포드가 보류 중 상태로 멈춥니다. 이러한 포드가 실행되게 하려면 어떻게 해야 하나요?

간략한 설명

다음은 AWS Fargate를 사용하는 Amazon Elastic Kubernetes Service(Amazon EKS)에서 포드가 실행되지 않게 되는 몇 가지 일반적인 시나리오입니다.

  • 특정 vCPU/메모리 조합을 사용할 수 없기 때문에 용량 오류가 발생했습니다.
  • CoreDNS 포드는 기본 주석을 포함하여 생성되었으며 Fargate 노드에서 포드를 예약하려면 이 주석을 제거해야 합니다.
  • 이 포드는 생성되었을 때 Fargate 프로필과 일치하지 않았으므로 fargate-scheduler에 할당되지 않았습니다. 포드가 생성 시 일치하지 않으면 일치하는 프로필이 나중에 생성되더라도 자동으로 Fargate 노드에 다시 예약되지 않습니다. 이 경우 포드는 default-scheduler에 할당됩니다.
  • 포드가 fargate-scheduler에 할당되었지만 보류 중(Pending) 상태로 남아 있는 경우 추가 문제 해결이 필요할 수 있습니다.

문제를 해결하기 전에 Fargate는 포드 규칙을 따른다는 점에 유의하세요.

  • 포드 선택기에 대해 네임스페이스와 일치 레이블을 구성해야 합니다. Fargate 워크플로는 두 조건이 모두 포드 사양과 일치하는 경우에만 포드를 Fargate 프로필과 일치시킵니다.
  • 단일 Fargate 프로필 내에서 여러 포드 선택기를 지정한다면 포드가 선택기 중 하나와 일치하는 경우 fargate-schedule에 의해 포드가 예약됩니다.
  • 포드 사양이 여러 Fargate 프로필과 일치하는 경우, 포드는 임의의 Fargate 프로필에 따라 예약됩니다. 이를 방지하기 위해 포드 사양 내에 eks.amazonaws.com/fargate-profile:<fp_name> 주석을 사용할 수 있습니다.

해결 방법

중요: 다음 단계는 AWS Fargate로 시작된 포드에만 적용됩니다. Amazon EC2 인스턴스에서 시작된 포드에 대한 자세한 내용은 Amazon EKS에서 포드 상태 문제를 해결하려면 어떻게 해야 합니까?를 참조하세요.

포드의 상태 확인

1.    다음 명령을 실행하여 포드 상태를 확인합니다.

kubectl get pods -n <namespace>

2.    포드에 대한 자세한 오류 정보를 얻으려면 다음 describe 명령을 실행합니다.

kubectl describe pod YOUR_POD_NAME -n <namespace>

describe 명령의 출력에 따라 다음 해결 방법을 참조하세요.

용량 오류 해결

포드에 용량 문제가 있는 경우 다음과 유사한 describe 출력이 표시됩니다.

Fargate capacity is unavailable at this time. Please try again later or in a different availability zone

오류를 해결하려면 다음을 수행하세요.

  • 15~20분 후에 포드에 다시 시도합니다. 오류는 용량을 기준으로 하므로 정확히 필요한 시간은 달라질 수 있습니다.
  • 포드 사양 내에서 요청(CPU/메모리)을 변경합니다. 그러면 Fargate 워크플로에 의해 새로운 vCPU/메모리 조합이 프로비저닝됩니다.
    참고: 조합 중 하나를 기준으로 요금이 청구됩니다. 포드 사양에 따라 조합이 확정되는 방식에 대한 자세한 내용은 포드 CPU 및 메모리를 참조하세요. 터미널/IDE에서 “kubectl describe node” 명령을 수행하면 훨씬 더 높은 vCPU/메모리 조합 값을 얻을 수 있습니다. Fargate에서 사용자의 요청에 따라 얼마든지 용량을 사용할 수 있는 것은 아니며 사용 가능한 수준에서 용량 풀로부터 리소스가 프로비저닝됩니다. 하지만 포드 사용량 및 이에 상응하는 vCPU/메모리 조합에 대해서만 요금이 청구됩니다.

보류 상태의 CoreDNS 포드 해결

포드가 CoreDNS 포드인 경우 describe 출력의 포드 이름은 다음과 유사합니다.

NAME                                     READY   STATUS     RESTARTS      AGE
coredns-6548845887-qk9vf                 0/1     Pending    0             157m

이 문제를 해결하고 Fargate 스케줄러에 포드를 재할당하려면 CoreDNS 배포를 패치하여 기본 주석 eks.amazonaws.com/compute-type : ec2를 제거합니다.

default-scheduler에 할당된 포드 확인

포드가 할당된 스케줄러를 확인하려면 다음 명령을 실행합니다.

kubectl get pods -o yaml -n <namespace> <pod-name> | grep schedulerName.

출력에서 schedulerNamedefault-scheduler인지 확인하고 포드 사양을 업데이트한 다음 포드를 다시 생성합니다.

schedulerNamefargate-scheduler이고 여전히 오류가 발생하는 경우 포드가 모든 규칙 및 Fargate 고려 사항을 준수하는지 확인합니다. 자세한 문제 해결 단계는 다음 섹션을 참조하세요.

fargate-scheduler에 할당된 포드 문제 해결

포드가 fargate-scheduler에 할당되었는데 보류 중(Pending) 상태로 남아 있는 경우 다음과 유사한 describe 출력이 표시됩니다.

Events:
Type       Reason              Age                     From     
----       ------              ----                    ----     
Warning    FailedScheduling    2m25s (x301 over 5h3m)  fargate-scheduler

이 오류를 해결하려면 다음을 수행합니다.

  • 포드를 삭제하고 다시 생성합니다.
  • 포드 사양 YAML에서 다음 사항이 설정되지 않았는지 확인합니다.
    node selector
    <>node name
    schedulerName
    이러한 사양으로 인해 fargate-scheduler가 포드를 건너뛰게 됩니다.
  • Fargate 프로필에서 선택된 서브넷에, 새 포드 생성에 충분한 여유 IP 주소가 있는지 확인합니다. 각 Fargate 노드는 서브넷에서 하나의 IP 주소를 사용합니다.
  • NAT 게이트웨이가 퍼블릭 서브넷으로 설정되어 있고 탄력적 IP가 연결되어 있는지 확인합니다.
  • VPC와 연결된 DHCP 옵션 세트에서 AmazonProvidedDNS 또는 domain-name-servers에 유효한 DNS 서버 호스트 이름이 있는지 확인합니다.
  • 사용자의 VPC에 대해 DNS 호스트 이름 및 DNS 확인이 켜져 있는지 확인합니다.
  • 서비스 통신용으로 구성된 VPC 엔드포인트만 있는 Fargate 포드에 프라이빗 서브넷을 사용하는 경우 DNS 이름이 허용되는 다음 엔드포인트가 있는지 확인합니다.
    ECR - API
    ECR - DKR
    S3 게이트웨이 엔드포인트
  • VPC 엔드포인트에 연결된 보안 그룹이 Fargate와 API 서버 간의 통신을 허용하는지 확인합니다. VPC 엔드포인트 보안 그룹은 클러스터 VPC CIDR에서 포트 443 수신을 허용해야 합니다. 클러스터에 대해 프라이빗 엔드포인트 액세스도 켜야 합니다.

이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?