상황 설명
쿠버네티스는 논리적으로 노드를 지정할 수 있는 옵션이 있다.
이는 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/
'DevOps > Kubernetes' 카테고리의 다른 글
[EKS] AWS Credentials Secret 설정 시 폴더로 인식 되는 경우 (0) | 2022.11.24 |
---|---|
[EKS] Ingress 서비스 별 URL 관리 (0) | 2022.11.24 |
[DevOps] Kubenetes(K8s) 공부 #1 - 기본 개념, pod, node (0) | 2022.06.20 |
[Slack] Webhook 으로 알람 메세지 전송 (0) | 2022.06.10 |