Amazon EKS를 사용하여 AWS Fargate 시작 - Amazon EKS

Amazon EKS를 사용하여 AWS Fargate 시작

중요

Amazon EKS가 있는 AWS Fargate은 AWS GovCloud(미국 동부) 및 AWSGovCloud(미국 서부)를 제외한 모든 Amazon EKS 지역에서 사용할 수 있습니다.

이 주제에서는 Amazon EKS 클러스터를 사용하여 Pods에서 AWS Fargate 실행을 시작하는 방법을 설명합니다.

CIDR 블록을 사용하여 클러스터의 퍼블릭 엔드포인트에 대한 액세스를 제한하는 경우 프라이빗 엔드포인트 액세스도 사용 설정하는 것이 좋습니다. 이렇게 하면 Fargate Pods가 클러스터와 통신할 수 있습니다. 프라이빗 엔드포인트를 활성화하지 않은 경우, 퍼블릭 액세스에 대해 지정하는 CIDR 블록에는 VPC의 아웃바운드 소스가 포함되어야 합니다. 자세한 내용은 Amazon EKS 클러스터 엔드포인트 액세스 제어 단원을 참조하십시오.

전제 조건

기존 클러스터가 있어야 합니다. Amazon EKS 클러스터가 아직 없는 경우 Amazon EKS 시작하기 부분을 참조하세요.

기존 노드가 Fargate Pods와 통신할 수 있는지 확인

노드가 없는 새 클러스터 또는 관리형 노드 그룹만 있는 클러스터로 작업하는 경우 Fargate Pod 실행 역할 생성로 건너뛸 수 있습니다.

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

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

클러스터에 대한 네트워킹(Networking) 섹션의 AWS Management Console에서 해당 클러스터에 대한 보안 그룹을 확인할 수 있습니다. 또는 다음 AWS CLI 명령을 사용하여 확인할 수 있습니다. 이 명령을 사용하는 경우 my-cluster를 클러스터의 이름으로 바꿉니다.

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

Fargate Pod 실행 역할 생성

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

참고

--fargate 옵션을 사용하여 eksctl로 클러스터를 생성한 경우 클러스터에는 이미 패턴 eksctl-my-cluster-FargatePodExecutionRole-ABCDEFGHIJKL에서 IAM 콘솔을 찾을 수 있는 Pod 실행 역할이 있습니다. 마찬가지로 eksctl을 사용하여 Fargate 프로필을 생성하는 경우 Pod 실행 역할이 생성되지 않았으면 eksctl을 사용하여 포드 실행 역할을 생성합니다.

클러스터에 대한 Fargate 프로필 생성

클러스터의 Fargate에서 실행되는 Pods를 예약하려면 먼저 포드가 시작될 때 Fargate를 사용할 Pods를 지정하는 Fargate 프로파일을 정의해야 합니다. 자세한 내용은 AWS Fargate 프로파일 단원을 참조하십시오.

참고

--fargate 옵션을 사용하여 eksctl로 클러스터를 생성한 경우 kube-systemdefault 네임스페이스의 모든 Pods에 대한 선택기를 사용하여 클러스터에 대한 Fargate 프로파일이 이미 생성되어 있습니다. Fargate에서 사용할 다른 네임스페이스에 대한 Fargate 프로필을 생성하려면 다음 절차를 따르세요.

eksctl 또는 AWS Management Console을 사용하여 Fargate 프로필을 생성할 수 있습니다.

eksctl

이 절차에는 eksctl 버전 0.172.0 이상이 필요합니다. 버전은 다음 명령을 통해 확인할 수 있습니다.

eksctl version

eksctl 설치 또는 업데이트에 대한 지침은 eksctl 설명서의 Installation을 참조하세요.

eksctl를 사용하여 Fargate 프로파일을 생성하려면

다음 eksctl 명령으로 Fargate 프로파일을 생성하고 모든 example value를 고유한 값으로 바꿉니다. 네임스페이스를 지정해야 합니다. 그러나 --labels 옵션은 필요하지 않습니다.

eksctl create fargateprofile \ --cluster my-cluster \ --name my-fargate-profile \ --namespace my-kubernetes-namespace \ --labels key=value

my-kubernetes-namespacekey=value 레이블에 특정 와일드카드를 사용할 수 있습니다. 자세한 내용은 Fargate 프로파일 와일드카드 단원을 참조하십시오.

AWS Management Console
AWS Management Console에서 클러스터용 Fargate 프로파일을 생성하려면
  1. https://console.aws.amazon.com/eks/home#/clusters에서 Amazon EKS 콘솔을 엽니다.

  2. Fargate 프로파일을 생성할 클러스터를 선택합니다.

  3. 컴퓨팅(Compute) 탭을 선택합니다.

  4. [Fargate 프로파일(Fargate profiles)]에서 [Fargate 프로파일 추가(Add Fargate profile)]를 선택합니다.

  5. Fargate 프로파일 구성(Configure Fargate profile) 페이지에서 다음을 수행합니다.

    1. Name(이름)에 Fargate 프로파일의 이름을 입력합니다. 이름은 고유해야 합니다.

    2. 포드 실행 역할(Pod execution role)에서 Fargate 프로파일과 함께 사용할 Pod 실행 역할을 선택합니다. eks-fargate-pods.amazonaws.com 서비스 보안 주체가 있는 IAM 역할만 표시됩니다. 나열된 역할이 표시되지 않으면 역할을 만들어야 합니다. 자세한 내용은 Amazon EKS Pod 실행 IAM 역할 단원을 참조하십시오.

    3. 선택한 서브넷을 필요에 따라 수정합니다.

      참고

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

    4. [태그(Tags)]에 선택적으로 Fargate 프로파일에 태그를 지정할 수 있습니다. 이러한 태그는 프로파일과 연결된 다른 리소스(예: Pods)에 전파되지 않습니다.

    5. 다음을 선택합니다.

  6. Pod 선택 구성(Configure pod selection) 페이지에서 다음을 수행합니다.

    1. Namespace(네임스페이스)에 Pods에 대해 일치시킬 네임스페이스를 입력합니다.

      • kube-system 또는 default와 같은 특정 네임스페이스를 사용하여 일치시킬 수 있습니다.

      • 특정 와일드카드(예: prod-*)를 사용하여 여러 네임스페이스(예: prod-deploymentprod-test)를 일치시킬 수 있습니다. 자세한 내용은 Fargate 프로파일 와일드카드 단원을 참조하십시오.

    2. (선택 사항) 셀렉터에 Kubernetes 레이블을 추가합니다. 특히 지정된 네임스페이스의 Pods가 일치해야 하는 포드에 추가합니다.

      • infrastructure: fargate Kubernetes 레이블도 있는 지정된 네임스페이스의 Pods만 선택기와 일치하도록 infrastructure: fargate 레이블을 선택기에 추가할 수 있습니다.

      • 특정 와일드카드(예: key?: value?)를 사용하여 여러 네임스페이스(예: keya: valueakeyb: valueb)를 일치시킬 수 있습니다. 자세한 내용은 Fargate 프로파일 와일드카드 단원을 참조하십시오.

    3. Next(다음)를 선택합니다.

  7. 검토 및 생성(Review and create) 페이지에서 Fargate 프로파일에 대한 정보를 검토하고 생성(Create)을 선택합니다.

업데이트: CoreDNS

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

참고

--fargate 옵션을 사용하여 eksctl로 클러스터를 생성한 경우 다음 단계로 건너뛸 수 있습니다.

  1. 다음 명령을 사용하여 CoreDNS에 대한 각 Fargate 프로필을 삭제합니다. my-cluster를 클러스터 이름으로, 111122223333을 계정 ID로, AmazonEKSFargatePodExecutionRole을 Pod 실행 역할 이름으로, 0000000000000001, 0000000000000002, 0000000000000003을 프라이빗 서브넷의 ID로 바꿉니다. Pod 실행 역할이 없는 경우 먼저 하나를 생성해야 합니다.

    중요

    역할 ARN에 / 이외의 경로를 포함할 수 없습니다. 예를 들어, 역할 이름이 development/apps/my-role인 경우 역할에 대한 ARN을 지정할 때 역할 이름을 my-role로 변경해야 합니다. 역할 ARN의 형식은 arn:aws:iam::111122223333:role/role-name이어야 합니다.

    aws eks create-fargate-profile \ --fargate-profile-name coredns \ --cluster-name my-cluster \ --pod-execution-role-arn arn:aws:iam::111122223333:role/AmazonEKSFargatePodExecutionRole \ --selectors namespace=kube-system,labels={k8s-app=kube-dns} \ --subnets subnet-0000000000000001 subnet-0000000000000002 subnet-0000000000000003
  2. 다음 명령을 실행하여 CoreDNS Pods에서 eks.amazonaws.com/compute-type : ec2 주석을 제거합니다.

    kubectl patch deployment coredns \ -n kube-system \ --type json \ -p='[{"op": "remove", "path": "/spec/template/metadata/annotations/eks.amazonaws.com~1compute-type"}]'

다음 단계

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

    1. 애플리케이션의 Kubernetes 네임스페이스 및 Kubernetes 레이블과 일치하는 Fargate 프로필을 생성합니다.

    2. Fargate에 예약되도록 기존 Pods를 삭제하고 다시 생성합니다. 예를 들어 다음 명령은 coredns 배포의 롤아웃을 트리거합니다. 네임스페이스 및 배포 유형을 수정하여 특정 Pods를 업데이트할 수 있습니다.

      kubectl rollout restart -n kube-system deployment coredns
  • Amazon EKS 애플리케이션 로드 밸런싱를 배포하여 Fargate에서 실행되는 Pods에 대해 인그레스 대상을 허용합니다.

  • Vertical Pod Autoscaler를 사용하여 Fargate Pods의 올바른 초기 CPU 및 메모리 크기를 설정한 다음 Horizontal Pod Autoscaler를 사용하여 해당 Pods를 조정할 수 있습니다. Vertical Pod Autoscaler가 더 높은 CPU 및 메모리 조합으로 Pods를 Fargate에 자동으로 다시 배포하도록 하려면 Vertical Pod Autoscaler의 모드를 Auto 또는 Recreate로 설정합니다. 이를 통해 기능을 올바르게 사용할 수 있습니다. 자세한 내용은 GitHub에서 Vertical Pod Autoscaler 설명서를 참조하세요.

  • 이러한 지침을 따라 애플리케이션을 모니터링하도록 AWS Distro for OpenTelemetry(ADOT) Collector를 설정할 수 있습니다.