AWS Fargate 프로필 생성 문제를 해결하려면 어떻게 해야 합니까?

5분 분량
0

AWS Fargate 프로필 생성에 대해 궁금한 점이 있습니다. 또는 AWS Fargate 프로필을 생성하는 데 문제가 있습니다. 이 문제를 해결하려면 어떻게 해야 합니까?

간략한 설명

Fargate 프로필은 Amazon Elastic Kubernetes Service(Amazon EKS) 클러스터의 Fargate 노드에서 예약할 포드를 지정하는 메커니즘입니다.

Fargate 프로필에는 모든 수신 포드 사양 YAML 파일과 일치하는 선택기가 있습니다. 일치에 성공하고 AWS Fargate 고려 사항이 충족되면 Fargate 프로필에 지정된 서브넷과 AWS Identity and Access Management(IAM) 역할을 사용하여 Fargate 노드에서 포드가 예약됩니다.

일부 포드 배치 규칙은 다음과 같습니다.

  • 포드 선택기에 대해 네임스페이스와 일치 레이블을 모두 구성한 경우:
    Fargate 워크플로는 두 조건(네임스페이스 및 레이블)이 모두 포드 사양과 일치하는 경우에만 포드가 Fargate 프로필과 일치한다고 간주합니다.
  • 단일 Fargate 프로필 내에 여러 개의 포드 셀렉터를 지정한 경우:
    포드가 이러한 선택기 중 하나와 일치하면 일치하는 Fargate 프로필의 데이터를 사용하여 Fargate 노드의 fargate-scheduler로 예약됩니다.
  • 포드 사양이 여러 Fargate 프로필과 일치하는 경우:
    포드 사양 내에 eks.amazonaws.com/fargate-profile:<fp_name> 주석이 지정되지 않는 한 포드는 임의의 Fargate 프로필에 따라 예약됩니다.

Fargate 프로필을 만들 때 다음 제한에 유의하세요.

  • 클러스터당 최대 10개의 Fargate 프로필을 생성할 수 있습니다.
  • Fargate 프로필당 최대 5개의 선택기를 가질 수 있습니다.
  • 선택기당 최대 5개의 레이블 쌍을 가질 수 있습니다.

해결 방법

다음은 Fargate 프로필을 만들 때 발생하는 일반적인 시나리오 및 문제입니다.

Fargate 노드에서 포드를 예약하기 위해 Fargate 프로필을 생성하려면 어떻게 해야 합니까?

Amazon EKS 콘솔, AWS Command Line Interface(AWS CLI), SDK 또는 API(Cloudformation/eksctl 등)를 사용하여 Fargate 프로필을 생성할 수 있습니다.

AWS CloudFormation을 사용하여 Fargate 프로필을 생성하려면 어떻게 해야 합니까?

AWS::EKS::FargateProfile CloudFormation 리소스 유형을 사용하여 Fargate 프로필을 생성할 수 있습니다.

그러나 Fargate 노드와 함께 Amazon Elastic Compute Cloud(Amazon EC2) 노드 그룹을 생성하지 않는 경우 coredns 추가 기능에는 기본적으로 다음과 같은 주석이 포함됩니다.

eks.amazonaws.com/compute-type : ec2

coredns 주석을 변경하려면 배포를 외부에서 패치해야 합니다. EKS 클러스터를 관리하는 터미널에서 이 작업을 수행할 수 있습니다. 또는 CloudFormation 사용자 지정 리소스를 사용하여 사용 사례를 기반으로 이 프로세스를 자동화할 수 있습니다.

참고: eksctl을 사용하여 클러스터 리소스 관리를 간소화하므로 EKS 클러스터를 생성/업데이트하는 것이 가장 좋습니다.

Fargate 프로필에 포함되어야 하는 포드 실행 역할은 무엇입니까?

포드 실행 역할은 Fargate 노드에서 AWS API 호출을 수행하는 데 사용하는 IAM 역할입니다. 여기에는 VPC CNI, CoreDNS 등과 같은 Amazon Elastic Container Registry(Amazon ECR) 이미지를 가져오는 호출이 포함됩니다. AmazonEKSFargatePodExecutionRolePolicy 관리형 정책이 이 역할에 연결되어야 합니다.

Fargate 노드의 kubelet은 이 IAM 역할을 사용하여 API 서버와 통신합니다. kubelet이 API 서버로 인증할 수 있도록 이 역할은 aws-auth configmap에 포함되어야 합니다. Fargate 프로필을 생성하면 Fargate 워크플로가 클러스터의 aws-auth configmap에 이 역할을 자동으로 추가합니다.

Fargate 노드가 'Not Ready'로 표시되는 경우 포드 실행 역할이 aws-auth에 포함되어 있는지 확인합니다.

다음은 포드 실행 역할이 있는 Fargate 프로필을 생성한 후 aws-auth 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 프로필을 동시에 만들거나 삭제할 수 없습니다.

CloudFormation과 같은 API 기반 프로비저너를 사용하는 동안 다른 모든 Fargate 프로필이 성공적으로 생성된 후 Fargate 프로필 생성이 시작되는지 확인합니다. DependsOn 속성을 사용하여 Fargate 프로필 간 체인과 같은 계층 구조를 생성하여 생성 및 삭제가 순차적으로 이루어집니다. 요청이 순차적이지 않으면 다음과 유사한 오류가 발생할 수 있습니다.

Cannot create Fargate Profile <fp_name1> because cluster <cluster_name> currently has Fargate profile <fp_name2> in status CREATING

Fargate 프로필 내에서 Fargate 노드에 대해 프로비저닝할 리소스(CPU, 메모리)를 지정할 수 있습니까?

Fargate 프로필 내에서 프로비저닝할 리소스의 양을 직접 지정할 수는 없습니다. Fargate 포드 사양 YAML 파일 내에서 리소스 요청을 지정하는 것이 가장 좋습니다. 이렇게 하면 Fargate 워크플로가 포드에 대해 해당되는 최소한의 리소스 양을 할당하는 데 도움이 됩니다.

kubectl describe node <node_name> 명령을 실행한 후 표시되는 vCPU 또는 메모리의 양은 포드에 요청한 CPU 또는 메모리의 양과 같지 않을 수 있습니다. 노드에 있는 메모리와 CPU의 양은 Fargate 리소스 할당 풀의 사용 가능한 용량에 따라 달라집니다. 포드 사양 내에서 요청한 양에 따라 요금이 청구됩니다. kubectl에서 볼 수 있는 리소스의 양에 대해서는 요금이 청구되지 않습니다.

CPU와 메모리는 항상 AWS Fargate에서 개별 조합으로 프로비저닝되고 청구됩니다. 청구 가능한 양에는 kubelet, kube-proxy 등과 같이 노드에서 실행되는 포드가 아닌 다른 구성 요소별 사용률이 포함됩니다. 예를 들어 포드에 대해 vCPU 1개와 8GB 메모리를 요청하면 vCPU 2개와 9GB 메모리 조합이라는 다음 상위 조합에 대한 요금이 청구됩니다. 이는 노드의 kubelet과 다른 Kubernetes 구성 요소가 사용하는 리소스를 설명합니다. 자세한 내용은 포드 CPU 및 메모리를 참조하세요.


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