EKS 생성시 자동으로 생성되는 노드의 라벨
Amazon EKS(Elastic Kubernetes Service)에서 매니지드 노드 그룹을 생성하거나, eksctl과 같은 툴을 사용해서 노드를 생성했을 때, 노드에는 AWS에서 자동으로 설정해주는 여러 가지 라벨(Label)이 붙음.
이러한 라벨들은 크게 아래와 같은 목적을 가짐.
1. AWS 리소스 정보 노출
2. 클러스터/노드 그룹 구분
3. 리전/가용영역(Zone) 정보
4. 쿠버네티스(및 Add-on) 스케줄링 최적화
리전(Region) 및 가용영역(Zone) 관련 라벨
1. topology.kubernetes.io/region
예시: topology.kubernetes.io/region=us-west-2
역할: 해당 노드가 속해 있는 AWS 리전을 나타냅니다.
사용 예시: Pod Affinity/Anti-Affinity: topologyKey를 topology.kubernetes.io/region으로 하여 특정 리전에만 파드를 배치하도록 제어 가능
멀티 리전 아키텍처 시, 리전에 따라 워크로드를 구분하거나 HA 구성 시 유용
2. topology.kubernetes.io/zone
예시: topology.kubernetes.io/zone=us-west-2a
역할: 해당 노드가 속해 있는 가용 영역(AZ)을 나타냅니다.
사용 예시: Pod 배포 시 가용 영역 단위로 분산을 유도해 장애 도메인을 줄임
스토리지(예: EBS 볼륨)도 동일 AZ에서 사용해야 하는 경우가 있으므로, 스케줄링 로직에서 꼭 참고됨
과거(쿠버네티스 1.17 미만)에는 failure-domain.beta.kubernetes.io/region, failure-domain.beta.kubernetes.io/zone 같은 베타 라벨이 쓰였으나, 현재는 topology.kubernetes.io/…가 표준임.
노드 그룹 및 용량 유형(CapacityType) 관련 라벨
1. eks.amazonaws.com/nodegroup
예시: eks.amazonaws.com/nodegroup=backend-ng
역할: 이 노드가 어떤 EKS 매니지드 노드 그룹에 속해 있는지를 나타냄.
사용 예시: 여러 노드 그룹을 운영할 때, 특정 노드 그룹에만 파드를 배치하도록 Node Affinity를 구성할 때 사용
클러스터 오토스케일러(Cluster Autoscaler) 등이 노드 그룹별로 스케일링 동작을 제어할 때 참고
2. eks.amazonaws.com/capacityType
예시: eks.amazonaws.com/capacityType=SPOT 또는 eks.amazonaws.com/capacityType=ON_DEMAND
역할: 이 노드가 Spot 노드인지, 혹은 온디맨드(On-Demand) 노드인지 구분함.
사용 예시: Spot 노드는 중단(중지)될 가능성이 있으므로, 중요도가 낮은 워크로드에만 배치하도록 스케줄링 정책을 설정할 수 있음.
예: requiredDuringSchedulingIgnoredDuringExecution 형태로 eks.amazonaws.com/capacityType=ON_DEMAND 라벨만 가진 노드에 파드를 올리는 식의 제어
인스턴스 타입(Instance Type) 관련 라벨
1. node.kubernetes.io/instance-type
예시: node.kubernetes.io/instance-type=m5.large
역할: 노드가 어떤 EC2 인스턴스 타입인지를 나타냄.
사용 예시: GPU를 필요로 하는 워크로드의 경우, 예: node.kubernetes.io/instance-type=p3.2xlarge 라벨만 매칭하도록 스케줄링
CPU 코어 수나 메모리 요구 사항에 맞춰 특정 인스턴스 라벨에만 파드를 배치
쿠버네티스 1.14 이하 버전에서는 beta.kubernetes.io/instance-type 라벨이 사용되었으나, 현재는 정식 라벨인 node.kubernetes.io/instance-type가 권장됨.
오토스케일링 및 기타 EKS 관리용 라벨
1. k8s.io/cluster-autoscaler/enabled
역할: 클러스터 오토스케일러(Cluster Autoscaler)가 작동할 수 있도록 노드 그룹을 인식시키는 목적.
사용 예시: 노드 그룹 레벨에서 오토스케일러가 노드 증설/축소를 할 수 있도록 허용
2. k8s.io/cluster-autoscaler/<클러스터 이름>
예시: k8s.io/cluster-autoscaler/my-eks-cluster=owned
역할: 해당 노드 그룹이 어떤 EKS 클러스터에 소속되어 있고, 오토스케일링이 적용되는지 명시.
사용 예시: 오토스케일러가 여러 클러스터에서 동작할 때 노드 그룹을 구분하여 관리
3. eks.amazonaws.com/nodegroup-image
예시: eks.amazonaws.com/nodegroup-image=ami-1234567890abcdefg
역할: 노드 그룹에 사용된 AMI 이미지 식별.
사용 예시: 운영자가 노드 그룹별로 어떤 AMI가 쓰이는지 모니터링할 때 활용
최신 AMI로 롤링 업데이트를 진행할 경우, 스크립트나 자동화 툴이 해당 라벨을 참조
그 외(eksctl 이용 시 붙는 라벨 등)
1. alpha.eksctl.io/cluster-name=<cluster-name>
eksctl이 노드를 프로비저닝하면서 자동으로 붙여주는 라벨
eksctl 내부 로직이나 추가 스크립트에서 이 라벨을 활용해 노드를 식별
2. alpha.eksctl.io/nodegroup-name=<nodegroup-name>
eksctl을 이용해 특정 NodeGroup을 생성했을 때 자동으로 붙는 라벨
eks.amazonaws.com/nodegroup 라벨과 별도로도 동일한 정보를 중복 저장
이처럼 eksctl, AWS 콘솔, 혹은 AWS CLI를 통해 노드를 만들 때 각각 조금씩 다른 세부 라벨이 추가되는 경우가 있음.
하지만 공통적으로 “이 노드가 어느 클러스터에 속하며, 어떤 노드 그룹이고, 어떤 타입인지”를 나타내기 위한 정보들은 거의 동일하게 주어짐.
라벨 활용 시 고려 사항
1. 스케줄링 정책(Affinity, Anti-Affinity) 연동
노드 그룹 분리, 온디맨드/스팟 분리 등에 따라 파드 배치를 유연하게 구성하려면 자동으로 붙는 라벨들을 적극 사용
예: eks.amazonaws.com/capacityType=SPOT 노드는 개발/테스트 파드만 올리도록 설정
2. 클러스터 오토스케일러(Cluster Autoscaler)
특정 노드 그룹을 오토스케일링 대상으로 지정할 때, 해당 노드에 자동으로 붙는 라벨(예: k8s.io/cluster-autoscaler/enabled)을 제대로 설정해야 동작
노드 라벨을 제거하거나 변경할 경우 오토스케일링이 예기치 못하게 동작하지 않을 수 있음
3. IAM Roles for Service Accounts(IRSA)와 연동
IRSA를 사용해서 쿠버네티스에서 IAM 권한을 세밀하게 제어할 때도, 노드 라벨이 특정 Add-on(예: VPC CNI 플러그인)에서 참조될 수 있으므로 변경 시 주의
4. 버전별/도구별 자동 라벨 차이
쿠버네티스 버전, EKS 버전, eksctl 버전에 따라 자동 라벨 키가 달라지는 경우가 있음
오래된 문서를 참조해 beta.kubernetes.io/… 형태 라벨을 사용하는 경우, 일부 최신 구성에서 동작이 달라질 수 있으므로 최신 공식 문서 확인 권장
정리
EKS에서 노드가 생성될 때 자동으로 부여되는 라벨들은 노드의 위치(리전, AZ), 노드 그룹 식별 정보, EC2 인스턴스 타입, 그리고 오토스케일러를 비롯한 운영 편의성을 위한 정보를 담고 있음.
이 라벨들은 단순히 “정보 표시” 용도로 끝나지 않고, 실제 스케줄링, 오토스케일링, HA(고가용성) 구성이 필요한 워크로드 분산 등 여러 운영 시나리오에서 핵심적인 역할을 함.
1. 노드 그룹 간 트래픽 분산
2. Spot/On-Demand 혼합 운영
3. 특정 인스턴스 타입 전용 워크로드
4. 가용 영역 분산 배포(파드 Affinity/Anti-Affinity)
따라서, EKS 환경에서 쿠버네티스를 최적화해 운영하려면, 노드에 자동으로 생성되는 라벨들을 정확히 이해하고, 필요에 따라 적절히 활용하는 전략이 매우 중요함.
'Operating System > Kubernetes' 카테고리의 다른 글
[Kubernetes] 리소스 종류 (0) | 2024.12.29 |
---|---|
[Kubernetes] 쿠버네티스의 Secret 및 ConfigMap (0) | 2024.12.29 |
[Kubernetes] Affinity 개념 (0) | 2024.12.29 |
[Kubernetes] Deployment 배포 전략 종류 (0) | 2024.12.28 |
[Kubernetes] Keycloak 개념 (1) | 2024.12.28 |