시작 시 어떤 Pod가 AWS Fargate를 사용할지 정의
시작 시 어떤 Pod가 AWS Fargate를 사용할지 정의
Fargate 프로필을 사용해 클러스터에서 어떤 Pod가 Fargate에서 실행될지 정의하는 방법을 설명합니다.
출처: 문서
본문
클러스터에서 Fargate에 Pod를 스케줄하기 전에, 시작 시 어떤 Pod가 Fargate를 사용할지 지정하는 Fargate 프로필을 하나 이상 정의해야 합니다.
관리자는 Fargate 프로필을 사용해 어떤 Pod가 Fargate에서 실행되는지 선언할 수 있습니다. 이는 프로필의 선택기(selector)로 할 수 있습니다. 각 프로필에 최대 5개의 선택기를 추가할 수 있습니다. 각 선택기는 네임스페이스를 포함해야 합니다. 선택기는 라벨도 포함할 수 있습니다. 라벨 필드는 여러 개의 선택적 키-값 쌍으로 구성됩니다. 선택기와 일치하는 Pod는 Fargate에 스케줄됩니다. Pod는 선택기에 지정된 네임스페이스와 라벨을 사용해 일치합니다. 라벨 없이 네임스페이스 선택기가 정의되면 Amazon EKS는 해당 네임스페이스에서 실행되는 모든 Pod를 프로필을 사용해 Fargate에 스케줄하려고 시도합니다. 스케줄될 Pod가 Fargate 프로필의 선택기 중 하나와 일치하면 해당 Pod는 Fargate에 스케줄됩니다.
Pod가 여러 Fargate 프로필과 일치한다면 Pod 사양에 eks.amazonaws.com/fargate-profile: my-fargate-profile Kubernetes 라벨을 추가해 Pod가 사용할 프로필을 지정할 수 있습니다. Pod가 Fargate에 스케줄되려면 해당 프로필의 선택기와 일치해야 합니다. Kubernetes affinity/anti-affinity 규칙은 Amazon EKS Fargate Pod에는 적용되지 않으며 필요하지 않습니다.
Fargate 프로필을 만들 때 Pod 실행 역할을 지정해야 합니다. 이 실행 역할은 프로필을 사용해 Fargate 인프라에서 실행되는 Amazon EKS 구성 요소를 위한 것입니다. 이 역할은 인증을 위해 클러스터의 Kubernetes 역할 기반 액세스 제어(RBAC)에 추가됩니다. 이렇게 하면 Fargate 인프라에서 실행되는 kubelet이 Amazon EKS 클러스터에 등록하고 클러스터에 노드로 나타날 수 있습니다. Pod 실행 역할은 또한 Fargate 인프라에 Amazon ECR 이미지 저장소에 대한 읽기 액세스를 허용하는 IAM 권한을 제공합니다. 자세한 내용은 "Amazon EKS Pod 실행 IAM 역할"을 참고하세요.
Fargate 프로필은 변경할 수 없습니다. 하지만 기존 프로필을 대체하는 새 업데이트 프로필을 만든 다음 원본을 삭제할 수 있습니다.
참고: Fargate 프로필을 사용해 실행 중인 모든 Pod는 프로필이 삭제될 때 중지되고 pending 상태가 됩니다.
클러스터의 Fargate 프로필이 DELETING 상태라면, 다른 프로필을 만들기 전에 Fargate 프로필이 삭제될 때까지 기다려야 합니다.
참고: Fargate는 현재 Kubernetes topologySpreadConstraints를 지원하지 않습니다.
Amazon EKS와 Fargate는 Fargate 프로필에 정의된 각 서브넷에 Pod를 분산합니다. 하지만 고르지 않은 분산이 생길 수 있습니다. 균등한 분산이 필요하면 두 개의 Fargate 프로필을 사용하세요. 균등한 분산은 두 레플리카를 배포하고 다운타임을 원하지 않는 시나리오에서 중요합니다. 각 프로필에는 서브넷 하나만 두는 것을 권장합니다.
Fargate 프로필 구성 요소
Fargate 프로필에는 다음 구성 요소가 포함됩니다.
- Pod 실행 역할 – 클러스터가 AWS Fargate에서 Pod를 만들 때 Fargate 인프라에서 실행되는
kubelet은 사용자를 대신해 AWS API를 호출해야 합니다. 예를 들어 Amazon ECR에서 컨테이너 이미지를 가져오기 위해 호출해야 합니다. Amazon EKS Pod 실행 역할은 이를 수행할 IAM 권한을 제공합니다. Fargate 프로필을 만들 때 Pod와 함께 사용할 Pod 실행 역할을 지정해야 합니다. 이 역할은 인증을 위해 클러스터의 Kubernetes 역할 기반 액세스 제어(RBAC)에 추가됩니다. 이는 Fargate 인프라에서 실행되는kubelet이 Amazon EKS 클러스터에 등록하고 클러스터에 노드로 나타날 수 있도록 하기 위함입니다. 자세한 내용은 "Amazon EKS Pod 실행 IAM 역할"을 참고하세요. - Subnets – 이 프로필을 사용하는 Pod를 시작할 서브넷의 ID. 현재 Fargate에서 실행되는 Pod에는 공용 IP 주소가 할당되지 않습니다. 따라서 인터넷 게이트웨이에 직접 경로가 없는 프라이빗 서브넷만 이 매개변수에 허용됩니다.
- Selectors – Pod가 이 Fargate 프로필을 사용하기 위해 일치해야 하는 선택기. Fargate 프로필에서 최대 5개의 선택기를 지정할 수 있습니다. 선택기에는 다음 구성 요소가 있습니다.
- Namespace – 선택기에 네임스페이스를 지정해야 합니다. 선택기는 이 네임스페이스에서 생성된 Pod만 일치합니다. 하지만 여러 네임스페이스를 대상으로 선택기를 여러 개 만들 수 있습니다.
- Labels – 선택기 일치를 위해 Kubernetes 라벨을 선택적으로 지정할 수 있습니다. 선택기는 선택기에 지정된 모든 라벨을 가진 Pod만 일치합니다.
Fargate 프로필 와일드카드
Kubernetes가 허용하는 문자 외에도 네임스페이스, 라벨 키, 라벨 값의 선택기 기준에 *와 ?를 사용할 수 있습니다.
*는 없음, 하나 또는 여러 문자를 나타냅니다. 예를 들어prod*는prod와prod-metrics를 나타낼 수 있습니다.?는 단일 문자를 나타냅니다(예:value?는valuea를 나타낼 수 있음). 그러나value와value-a는 나타낼 수 없습니다.?는 정확히 한 문자만 나타낼 수 있기 때문입니다.
이 와일드카드 문자는 어떤 위치에서든 조합하여 사용할 수 있습니다(예: prod*, *dev, frontend*?). 정규 표현식 같은 다른 와일드카드와 패턴 매칭 형식은 지원되지 않습니다.
Pod 사양의 네임스페이스와 라벨에 대해 일치하는 프로필이 여러 개 있다면, Fargate는 프로필 이름의 영숫자 정렬로 프로필을 선택합니다. 예를 들어 프로필 A(이름 beta-workload)와 프로필 B(이름 prod-workload)가 모두 시작될 Pod에 대한 일치 선택기를 가진다면, Fargate는 Pod에 프로필 A(beta-workload)를 선택합니다. Pod에는 프로필 A의 라벨(예: eks.amazonaws.com/fargate-profile=beta-workload)이 지정됩니다.
기존 Fargate Pod를 와일드카드를 사용하는 새 프로필로 마이그레이션하려면 두 가지 방법이 있습니다.
- 일치하는 선택기가 있는 새 프로필을 만든 다음 이전 프로필을 삭제합니다. 이전 프로필로 라벨이 지정된 Pod는 일치하는 새 프로필에 다시 스케줄됩니다.
- 워크로드를 마이그레이션하려고 하지만 각 Fargate Pod에 어떤 Fargate 라벨이 있는지 확실하지 않다면 다음 방법을 사용할 수 있습니다. 같은 클러스터의 프로필 중 영숫자로 먼저 정렬되는 이름으로 새 프로필을 만듭니다. 그런 다음 새 프로필로 마이그레이션해야 하는 Fargate Pod를 재활용합니다.
Fargate 프로필 생성
이 섹션은 Fargate 프로필을 만드는 방법을 설명합니다. 또한 Fargate 프로필에 사용할 Pod 실행 역할을 만들어야 합니다. 자세한 내용은 "Amazon EKS Pod 실행 IAM 역할"을 참고하세요. Fargate에서 실행되는 Pod는 AWS 서비스에 NAT 게이트웨이 액세스가 있지만 인터넷 게이트웨이에 직접 경로가 없는 프라이빗 서브넷에서만 지원됩니다. 이는 클러스터의 VPC에 프라이빗 서브넷이 있어야 하기 때문입니다.
다음으로 프로필을 만들 수 있습니다: eksctl 또는 AWS Management Console.
eksctl
다음 eksctl 명령으로 Fargate 프로필을 만듭니다. 모든 예제 값을 자신의 값으로 바꾸세요. 네임스페이스를 지정해야 하지만 --labels 옵션은 필수가 아닙니다.
eksctl create fargateprofile \
--cluster my-cluster \
--name my-fargate-profile \
--namespace my-kubernetes-namespace \
--labels key=value
my-kubernetes-namespace와 key=value 라벨에 특정 와일드카드를 사용할 수 있습니다. 자세한 내용은 "Fargate 프로필 와일드카드"를 참고하세요.
AWS Management Console
- Amazon EKS 콘솔을 엽니다.
- Fargate 프로필을 만들 클러스터를 선택합니다.
- Compute 탭을 선택합니다.
- Fargate profiles에서 Add Fargate profile을 선택합니다.
- Configure Fargate profile 페이지에서 다음을 수행합니다.
- Name에
my-profile같은 Fargate 프로필의 고유한 이름을 입력합니다. - Pod execution role에서 Fargate 프로필에 사용할 Pod 실행 역할을 선택합니다.
eks-fargate-pods.amazonaws.com서비스 보안 주체가 있는 IAM 역할만 표시됩니다. 나열된 역할이 없으면 하나를 만들어야 합니다. 자세한 내용은 "Amazon EKS Pod 실행 IAM 역할"을 참고하세요. - 선택한 Subnets를 필요에 따라 수정합니다.
- Name에
참고: Fargate에서 실행되는 Pod에는 프라이빗 서브넷만 지원됩니다.
- Tags에서 선택적으로 Fargate 프로필에 태그를 지정할 수 있습니다. 이 태그는 Pod 같은 프로필과 연결된 다른 리소스로 전파되지 않습니다.
-
Next를 선택합니다.
-
Configure Pod selection 페이지에서 다음을 수행합니다.
- Namespace에 Pod 일치를 위한 네임스페이스를 입력합니다.
kube-system또는default같은 특정 네임스페이스를 일치시키는 데 사용할 수 있습니다.prod-*같은 특정 와일드카드를 사용해 여러 네임스페이스(예:prod-deployment와prod-test)를 일치시킬 수 있습니다. 자세한 내용은 "Fargate 프로필 와일드카드"를 참고하세요.- (선택 사항) 선택기에 Kubernetes 라벨을 추가합니다. 지정된 네임스페이스의 Pod가 일치해야 하는 라벨에 특별히 추가합니다.
선택기에
infrastructure: fargate라벨을 추가하면 지정된 네임스페이스에서infrastructure: fargateKubernetes 라벨도 가진 Pod만 선택기와 일치합니다.key?: value?같은 특정 와일드카드를 사용해 여러 라벨(예:keya: valuea와keyb: valueb)을 일치시킬 수 있습니다. 자세한 내용은 "Fargate 프로필 와일드카드"를 참고하세요. -
Next를 선택합니다.
-
Review and create 페이지에서 Fargate 프로필 정보를 검토하고 Create를 선택합니다.