클러스터에서 AWS Fargate 시작하기

클러스터에서 AWS Fargate 시작하기

Amazon EKS 클러스터에서 AWS Fargate로 Pod를 실행하는 시작 방법을 설명합니다.

출처: 문서

본문

이 주제는 Amazon EKS 클러스터에서 AWS Fargate로 Pod를 실행하는 방법을 설명합니다.

CIDR 블록을 사용해 클러스터의 공용 엔드포인트에 대한 액세스를 제한한다면 프라이빗 엔드포인트 액세스도 활성화할 것을 권장합니다. 이렇게 하면 Fargate Pod가 클러스터와 통신할 수 있습니다. 프라이빗 엔드포인트가 활성화되지 않으면 공용 액세스에 지정한 CIDR 블록에 VPC의 아웃바운드 소스가 포함되어야 합니다. 자세한 내용은 "클러스터 API 서버 엔드포인트"를 참고하세요.

전제 조건

  • 기존 클러스터. Amazon EKS 클러스터가 없다면 "Amazon EKS 시작하기"를 참고하세요.

1단계: 기존 노드가 Fargate Pod와 통신할 수 있는지 확인

노드가 없는 새 클러스터이거나 관리형 노드 그룹만 있는 클러스터라면(자세한 내용은 "관리형 노드 그룹으로 노드 라이프사이클 간소화" 참고) "2단계: Fargate Pod 실행 역할 생성"으로 건너뛸 수 있습니다.

이미 연결된 노드가 있는 기존 클러스터를 사용한다고 가정합니다. 이 노드의 Pod가 Fargate에서 실행되는 Pod와 자유롭게 통신할 수 있는지 확인하세요. Fargate에서 실행되는 Pod는 연결된 클러스터의 클러스터 보안 그룹을 사용하도록 자동 구성됩니다. 클러스터의 기존 노드가 클러스터 보안 그룹과 트래픽을 주고받을 수 있는지 확인하세요. 관리형 노드 그룹도 클러스터 보안 그룹을 사용하도록 자동 구성되므로 이 호환성을 위해 수정하거나 확인할 필요가 없습니다.

eksctl 또는 Amazon EKS 관리 AWS CloudFormation 템플릿으로 생성된 기존 노드 그룹의 경우, 클러스터 보안 그룹을 노드에 수동으로 추가할 수 있습니다. 또는 노드 그룹의 Auto Scaling 그룹 런치 템플릿을 수정해 인스턴스에 클러스터 보안 그룹을 연결할 수 있습니다. 자세한 내용은 Amazon VPC 사용 설명서의 "인스턴스 보안 그룹 변경"을 참고하세요.

AWS Management Console의 클러스터 Networking 섹션에서 클러스터의 보안 그룹을 확인할 수 있습니다. 또는 다음 AWS CLI 명령으로 확인할 수 있습니다. 이 명령을 사용할 때 ``를 클러스터 이름으로 바꾸세요.

aws eks describe-cluster --name  --query cluster.resourcesVpcConfig.clusterSecurityGroupId

2단계: Fargate Pod 실행 역할 생성

클러스터가 AWS Fargate에서 Pod를 만들 때, Fargate 인프라에서 실행되는 구성 요소는 사용자를 대신해 AWS API를 호출해야 합니다. Amazon EKS Pod 실행 역할은 이를 수행할 IAM 권한을 제공합니다. AWS Fargate Pod 실행 역할을 만들려면 "Amazon EKS Pod 실행 IAM 역할"을 참고하세요.

참고: eksctl의 --fargate 옵션으로 클러스터를 만들었다면, IAM 콘솔에서 eksctl-my-cluster-FargatePodExecutionRole-ABCDEFGHIJKL 패턴으로 찾을 수 있는 Pod 실행 역할이 클러스터에 이미 있습니다. 마찬가지로 eksctl로 Fargate 프로필을 만들면, eksctl은 아직 생성되지 않은 경우 Pod 실행 역할을 만듭니다.

3단계: 클러스터용 Fargate 프로필 생성

클러스터에서 Fargate에서 실행되는 Pod를 스케줄하기 전에, 시작 시 어떤 Pod가 Fargate를 사용하는지 지정하는 Fargate 프로필을 정의해야 합니다. 자세한 내용은 "시작 시 어떤 Pod가 AWS Fargate를 사용할지 정의"를 참고하세요.

참고: eksctl의 --fargate 옵션으로 클러스터를 만들었다면 kube-system과 default 네임스페이스의 모든 Pod에 대한 선택기로 클러스터용 Fargate 프로필이 이미 생성되어 있습니다. Fargate와 함께 사용하려는 다른 네임스페이스에 대한 Fargate 프로필을 만들려면 다음 절차를 사용하세요.

다음 도구 중 하나로 Fargate 프로필을 만들 수 있습니다: eksctl 또는 AWS Management Console.

eksctl

이 절차는 eksctl 버전 0.215.0 이상이 필요합니다. 다음 명령으로 버전을 확인할 수 있습니다.

eksctl version

eksctl 설치 또는 업그레이드 방법은 eksctl 문서의 "Installation"을 참고하세요.

다음 eksctl 명령으로 Fargate 프로필을 만듭니다. 모든 ``를 자신의 값으로 바꾸세요. 네임스페이스를 지정해야 하지만 --labels 옵션은 필수가 아닙니다.

eksctl create fargateprofile \
    --cluster  \
    --name  \
    --namespace  \
    --labels

및 라벨에 특정 와일드카드를 사용할 수 있습니다. 자세한 내용은 "Fargate 프로필 와일드카드"를 참고하세요.

AWS Management Console

  1. Amazon EKS 콘솔을 엽니다.
  2. Fargate 프로필을 만들 클러스터를 선택합니다.
  3. Compute 탭을 선택합니다.
  4. Fargate profiles에서 Add Fargate profile을 선택합니다.
  5. Configure Fargate profile 페이지에서 다음을 수행합니다.
    • Name에 Fargate 프로필의 이름을 입력합니다. 이름은 고유해야 합니다.
    • Pod execution role에서 Fargate 프로필에 사용할 Pod 실행 역할을 선택합니다. eks-fargate-pods.amazonaws.com 서비스 보안 주체가 있는 IAM 역할만 표시됩니다. 나열된 역할이 없으면 하나를 만들어야 합니다. 자세한 내용은 "Amazon EKS Pod 실행 IAM 역할"을 참고하세요.
    • 선택한 Subnets를 필요에 따라 수정합니다.

참고: Fargate에서 실행되는 Pod에는 프라이빗 서브넷만 지원됩니다.

  • Tags에서 선택적으로 Fargate 프로필에 태그를 지정할 수 있습니다. 이 태그는 Pod 같은 프로필과 연결된 다른 리소스로 전파되지 않습니다.
  1. Next를 선택합니다.

  2. Configure Pod selection 페이지에서 다음을 수행합니다.

    • Namespace에 Pod 일치를 위한 네임스페이스를 입력합니다.

    kube-system 또는 default 같은 특정 네임스페이스를 일치시키는 데 사용할 수 있습니다.

    prod-* 같은 특정 와일드카드를 사용해 여러 네임스페이스(예: prod-deployment와 prod-test)를 일치시킬 수 있습니다. 자세한 내용은 "Fargate 프로필 와일드카드"를 참고하세요.

    • (선택 사항) 선택기에 Kubernetes 라벨을 추가합니다. 지정된 네임스페이스의 Pod가 일치해야 하는 라벨에 특별히 추가합니다.

    선택기에 infrastructure: fargate 라벨을 추가하면 지정된 네임스페이스에서 infrastructure: fargate Kubernetes 라벨도 가진 Pod만 선택기와 일치합니다.

    key?: value? 같은 특정 와일드카드를 사용해 여러 라벨(예: keya: valuea와 keyb: valueb)을 일치시킬 수 있습니다. 자세한 내용은 "Fargate 프로필 와일드카드"를 참고하세요.

  3. Next를 선택합니다.

  4. Review and create 페이지에서 Fargate 프로필 정보를 검토하고 Create를 선택합니다.

4단계: CoreDNS 업데이트

기본적으로 CoreDNS는 Amazon EKS 클러스터의 Amazon EC2 인프라에서 실행되도록 구성됩니다. 클러스터에서 Pod만 Fargate에서 실행하려면 다음 단계를 완료하세요.

참고: eksctl의 --fargate 옵션으로 클러스터를 만들었다면 "다음 단계"로 건너뛸 수 있습니다.

  1. 다음 명령으로 CoreDNS용 Fargate 프로필을 생성합니다. 를 클러스터 이름으로, 를 계정 ID로, 를 Pod 실행 역할 이름으로, , , 를 프라이빗 서브넷 ID로 바꾸세요. Pod 실행 역할이 없다면 먼저 하나를 만들어야 합니다("2단계: Fargate Pod 실행 역할 생성" 참고).

중요: 역할 ARN에는 / 이외의 경로가 포함될 수 없습니다. 예를 들어 역할 이름이 development/apps/AmazonEKSFargatePodExecutionRole이라면 역할의 ARN을 지정할 때 AmazonEKSFargatePodExecutionRole로 변경해야 합니다. 역할 ARN의 형식은 arn:aws:iam:::role/이어야 합니다.

aws eks create-fargate-profile \
    --fargate-profile-name coredns \
    --cluster-name  \
    --pod-execution-role-arn arn:aws:iam:::role/ \
    --selectors namespace=kube-system,labels={k8s-app=kube-dns} \
    --subnets subnet- subnet- subnet-
  1. coredns 배포의 롤아웃을 트리거합니다.
kubectl rollout restart -n kube-system deployment coredns

다음 단계

다음 워크플로로 기존 애플리케이션을 Fargate에서 실행하도록 마이그레이션하기 시작할 수 있습니다.

  • 애플리케이션의 Kubernetes 네임스페이스와 Kubernetes 라벨과 일치하는 Fargate 프로필을 생성합니다.
  • 기존 Pod를 삭제하고 다시 생성해 Fargate에 스케줄되도록 합니다. 와 를 수정해 특정 Pod를 업데이트합니다.
kubectl rollout restart -n  deployment
  • "Application Load Balancer로 애플리케이션 및 HTTP 트래픽 라우팅"을 배포해 Fargate에서 실행되는 Pod의 Ingress 객체를 허용합니다.
  • "Vertical Pod Autoscaler로 Pod 리소스 조정"을 사용해 Fargate Pod의 초기 정확한 CPU 및 메모리 크기를 설정한 다음, "Horizontal Pod Autoscaler로 Pod 배포 확장"을 사용해 해당 Pod를 확장할 수 있습니다. Vertical Pod Autoscaler가 더 높은 CPU와 메모리 조합으로 Pod를 Fargate에 자동 재배포하게 하려면 Vertical Pod Autoscaler의 모드를 Auto 또는 Recreate로 설정하세요. 이는 올바르게 작동하도록 하기 위한 것입니다. 자세한 내용은 GitHub의 Vertical Pod Autoscaler 문서를 참고하세요.
  • 다음 지침을 따라 애플리케이션 모니터링용 AWS Distro for OpenTelemetry(ADOT) 컬렉터를 설정할 수 있습니다.

더 알아보기 (Learn more)