DevOps/Kubernetes

[EKS] Pod 노드 그룹 지정

깜태 2022. 11. 24. 16:19
728x90

상황 설명

쿠버네티스는 논리적으로 노드를 지정할 수 있는 옵션이 있다.
이는 AWS EKS에서는 인스턴스와 직결되고, 인스턴스 타입에 따라 결제금액의 변동이 생긴다.
따라서 파드에 필요한 자원 정도에 따라 알맞은 노드를 지정하는 옵션이 필요할 수 있다.
노드 “하나”를 지정하는 것은 EKS에서는 인스턴스 1개에만 생성하는 것이므로
노드 스케일링을 적용한 나에게는 적절한 옵션이 아닐 수 있기에, 노드”그룹”을 지정하는 옵션이 필요했다.
나의 목적은 개발용으로 쓰는 경우 적은 자원의 노드로 테스트하고,
배포환경에서는 실제로도 큰 자원의 노드로 테스트하고 싶었다.
따라서 devNode는 상대적으로 작은 크기인 t3.medium 크기로 진행하였고,
stagingNode는 t3.large로 진행하였다.
(apiNode는 테스트용으로 만든 것이지만, argoCD나 metric 등의 K8s 기본 설정들이 추가되어있다)

방법

노드 그룹에 의해서 생성된 노드는 어느 노드에 속했는지 아래의 명령어로 볼 수 있다.

kubectl get node --show-labels

show-labels를 이용하면 노드에 붙은 label들이 어떤 게 있는지 볼 수 있는데 자세히 보다보면

eks에서 생성한 노드의 경우, eks.amazonaws.com/nodegroup={groupName} 의 형태를 지니는 것을 볼 수 있다.

K8s에서는 노드 생성 시, 어떤 노드에서 생성할지 결정하는 옵션으로 nodeselector가 있다.

결론적으로는 pod 생성에 관여하는 deployment.yaml 을 건드리면 된다.

deployment.yaml 내부에 아래의 옵션을 추가하면 어떤 노드를 이용할지 설정이 가능하다.

나의 경우는 Helm Chart를 사용하고 있어서 템플릿을 이용하여 처리하였다.

spec:
  # ~ 
  # container 설정 내용
  # ~ 
  nodeSelector:
    eks.amazonaws.com/nodegroup: {{ .Values.nodeGroup }} # devNode, stagingNode

참고

https://www.eksworkshop.com/advanced/430_emr_on_eks/eks_emr_using_node_selectors/

728x90