AWS Fargate 프로파일을 생성할 때 문제가 발생했습니다.
간략한 설명
Fargate 프로파일은 Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터의 Fargate 노드에 예약되는 포드를 지정하는 메커니즘입니다.
Fargate 프로파일에는 모든 수신 포드 사양 YAML 파일과 일치하는 셀렉터가 있습니다. Fargate 노드에서 포드를 예약하기 전에 매칭이 성공하고 AWS Fargate 고려 사항이 충족되어야 합니다. 포드는 서브넷과 Fargate 프로파일에 지정된 AWS ID 및 Access Management(IAM) 역할로 예약됩니다.
일부 포드 배치 규칙은 다음과 같습니다.
- 포드 사양에 네임스페이스와 매치 레이블 구성이 있는 경우 포드는 네임스페이스와 일치하는 Fargate 프로파일에 배치됩니다. 또한 포드 사양은 포드 셀렉터의 레이블과 일치해야 합니다
- Fargate 프로파일에 포드 셀렉터 구성이 여러 개 있는 경우 포드 셀렉터 구성 중 하나와 일치하는 예약된 포드가 사용됩니다.
- 포드 사양이 여러 Fargate 프로파일과 일치하는 경우 포드는 임의의 Fargate 프로파일에 따라 예약됩니다. 이는 포드 사양 내에 eks.amazonaws.com/fargate-profile 주석을 지정하지 않는 한 발생합니다.
- Kubernetes 관련성 및 비관련성 규칙은 Amazon EKS Fargate Pods에 적용되지 않으며 필요하지 않습니다.
해결 방법
다음은 Fargate 프로파일을 생성할 때 발생하는 일반적인 문제입니다.
Fargate 프로파일을 생성하여 Fargate 노드에서 포드를 예약하려면 어떻게 해야 하나요?
Amazon EKS 콘솔, AWS Command Line Interface(AWS CLI), SDK 또는 API를 사용하여 Fargate 프로파일을 생성할 수 있습니다.
AWS CloudFormation을 통해 Fargate 프로파일을 생성하려면 어떻게 해야 하나요?
AWS::EKS::FargateProfile CloudFormation 리소스 유형을 사용하여 Fargate 프로파일을 생성하십시오.
Fargate 노드에서만 CoreDNS 포드를 실행하려면 어떻게 해야 하나요?
기본적으로 CoreDNS는 Amazon EKS 클러스터의 Amazon EC2 인프라에서 실행되도록 구성되어 있습니다. 클러스터 내의 Fargate 서버리스 컴퓨팅에서 CoreDNS 포드를 실행하려면 CoreDNS 배포의 롤아웃 재시작을 수행해야 합니다.
eksctl과 --fargate 옵션을 사용하여 클러스터를 생성한 경우 다음 단계의 작업을 수행하세요.
**참고:**eksctl은 클러스터 리소스 관리를 단순화하기 때문에 이를 사용하여 EKS 클러스터를 만들거나 업데이트하는 것이 가장 좋습니다. 자세한 내용은 eksctl 웹사이트의 EKS Fargate 지원을 참조하세요.
Fargate 프로파일의 제한 기본값은 무엇입니까?
Fargate 프로파일을 생성할 때의 제한 기본값은 다음과 같습니다.
- EKS 클러스터에는 최대 10개의 Fargate 프로파일이 있을 수 있습니다.
- Fargate 프로파일에는 최대 다섯 개의 선택기가 있을 수 있습니다.
- Fargate 프로파일 셀렉터에는 최대 5개의 레이블 페어가 있을 수 있습니다.
Fargate 프로파일에는 어떤 포드 실행 역할이 포함되어야 합니까?
포드 실행 역할은 Fargate 노드에서 AWS API 호출을 수행하는 데 사용하는 IAM 역할입니다. AmazonEKSFargatePodExecutionRolePolicy 관리 정책이 이 역할에 연결되어 있어야 합니다.
Fargate 노드의 Kubelet은 이 IAM 역할을 사용하여 API 서버와 통신합니다. Kubelet이 API 서버로 인증할 수 있도록 이 역할이 aws-auth ConfigMap에 포함되어야 합니다. Fargate 프로파일을 생성하면 Fargate 워크플로가 이 역할을 클러스터의 aws-auth ConfigMap에 자동으로 추가합니다.
Fargate 노드가 '준비되지 않음'으로 표시되는 경우, 포드 실행 역할이 aws-auth ConfigMap에 포함되어 있는지 확인하세요.
다음은 포드 실행 역할을 사용하여 Fargate 프로필을 생성한 후의 샘플 aws-auth ConfigMap mapRoles 섹션 스니펫입니다.
mapRoles: | - groups:
- system:bootstrappers
- system:nodes
- system:node-proxier
rolearn: <Pod_execution_role_ARN>
username: system:node:{{SessionName}}
Fargate 프로파일을 생성한 후 aws-auth ConfigMap을 변경하면 Fargate 노드의 포드가 예약될 때 다음과 같은 경고가 표시될 수 있습니다.
Pod provisioning timed out (will retry) for pod: <pod_nginx>
워크로드를 EKS Fargate로 마이그레이션하고 싶습니다. 사용 목적의 서브넷과 보안 그룹을 어떻게 생성하나요?
EKS Fargate는 프라이빗 서브넷만 지원합니다. 즉, Fargate 프로파일에 지정된 서브넷에 연결된 라우팅 테이블 내에는 인터넷 게이트웨이로 가는 기본 경로가 없습니다. 따라서 Fargate 프로파일에 사용할 서브넷에 대해 NAT 게이트웨이 또는 VPC 엔드포인트를 구성할 수 있습니다.
클러스터 보안 그룹은 기본적으로 Fargate 노드에 연결됩니다. 이 용도로만 보안 그룹을 프로비저닝할 필요는 없습니다.
서브넷에 대해서 VPC 엔드포인트를 사용하는 경우 클러스터에 프라이빗 엔드포인트 액세스가 활성화되어 있는지 확인하세요. VPC 엔드포인트에 연결된 보안 그룹에는 클러스터의 VPC CIDR로부터의 HTTPS 포트 443 트래픽을 허용하는 인바운드 규칙이 있어야 합니다.
Terraform이나 AWS CloudFormation과 같은 API 기반 프로비저닝 도구를 사용하여 Fargate 프로파일을 생성했습니다. Fargate 프로파일이 CREATE_FAILED 상태인 이유는 무엇인가요?
Fargate 프로파일은 한 번에 하나만 만들거나 삭제할 수 있습니다. Fargate 프로파일을 삭제하면 동시에 다른 Fargate 프로파일을 만들거나 삭제할 수 없습니다.
API 기반 제공자를 사용하는 경우 다른 모든 Fargate 프로파일이 성공적으로 생성되거나 삭제된 후에 Fargate 프로파일 생성 또는 삭제를 시작해야 합니다.
Fargate 프로파일 내에서 Fargate 노드에 프로비저닝할 리소스(CPU, 메모리)를 지정할 수 있나요?
Fargate 프로파일 내에서 프로비저닝할 리소스의 양을 직접 지정할 수는 없습니다. Fargate 포드 사양 YAML 파일 내에 리소스 요청을 지정하는 것이 가장 좋습니다. 이렇게 하면 Fargate 워크플로가 포드에 최소한 해당 양의 리소스를 할당하는 데 도움이 됩니다. 자세한 내용은 Kubernetes 웹사이트에서 Kubernetes가 리소스 요청 및 제한을 적용하는 방법을 참조하세요.
kubectl describe node 명령을 실행한 후 표시되는 vCPU 또는 메모리의 양은 포드에 대해 요청한 양과 동일하지 않을 수 있습니다. 노드의 메모리 및 CPU 양은 Fargate 리소스 할당 풀의 사용 가능한 용량에 따라 달라집니다. 포드 사양 내에서 요청한 금액을 기준으로 요금이 청구됩니다. kubectl에서 볼 수 있는 리소스의 양에 대해서는 요금이 청구되지 않습니다.
**참고:**vCPU와 메모리 조합을 지정하지 않으면 사용 가능한 가장 작은 조합(0.25 vCPU 및 0.5GB 메모리)이 사용됩니다.