본문 바로가기
MLOps/Doker & Kubernetes

Udemy CKA 강의 정리 60. Node Selectors

by 공부하는 무니 2023. 1. 6.
반응형

해당 내용은 Udemy의 Certified Kubernetes Administrator (CKA) with Practice Tests
강의를 공부한 내용입니다. 내용을 그대로 번역하기보다는, 제가 이해하기 쉬운 대로 수정한 부분들이 있습니다.

⚠️ 영어 독해가 많이 부족합니다. 틀린 내용이 있으면 알려주시면 감사하겠습니다.


이번 강의에서는 Node Selector에 대해 이야기하겠습니다.

Node Selector

간단한 예시로 시작하겠습니다. 3개의 노드가 있는 클러스터가 있으며 그 중 2개는 더 낮은 하드웨어 리소스를 가진 더 작은 노드입니다. 다른 하나는 더 높은 리소스로 구성된 더 큰 노드입니다. 다양한 종류의 워크로드가 클러스터에서 실행 중입니다. 더 큰 노드를 더 높은 마력이 필요한 데이터 처리 워크로드를 전용으로 사용하려고 합니다.

그러나 현재 기본 설정에서는 모든 파드는 모든 노드로 이동할 수 있습니다. 이 경우 파드 C는 노드 2 또는 3로 배치되어서 죽을 수 있습니다. 이를 해결하기 위해, 파드가 특정 노드에서만 실행되도록 제한을 설정할 수 있습니다. 두 가지 방법이 있습니다. 첫 번째는 노드 선택기를 사용하는 것입니다. 간단하고 쉬운 방법입니다. 이를 위해 이전에 생성한 파드 definition 파일을 살펴봅니다. 이 파일에는 데이터 처리 이미지와 함께 파드를 생성하기 위한 간단한 정의가 있습니다.

apiVersion: v1
kind: Pod
metadata:
 name: myapp-pod
spec:
 containers:
 - name: data-processor
   image: data-processor
 nodeSelector:
  size: Large

이 파드가 더 큰 노드에서 실행되도록 제한하려면 spec섹션에 nodeSelector라는 새 속성을 추가합니다. size: Large를 입력하세요. 잠시만요, size: Large는 어디서 나온 것일까요? 그리고 Kubernetes는 어떤 것이 큰 노드인지 어떻게 알 수 있을까요? size와 large의 key-value쌍은 사실 노드의 label입니다. 스케줄러는 이 레이블을 사용하여 파드를 배치할 올바른 노드를 식별합니다. label과 selector에 대해서는 서비스, Replicasets, Deployment 등 Kubernetes 과정 전반에 걸쳐 여러 번 보게 되는 주제입니다. 이와 같이 Node Selector에서 레이블을 사용하려면 파드를 만들기 전에 먼저 노드에 레이블을 지정해야 합니다.

https://github.com/kodekloudhub/certified-kubernetes-administrator-course/raw/master/images/nsel.PNG

Label Nodes

이제 돌아가서 노드에 레이블을 지정하는 방법을 살펴보겠습니다. 노드에 레이블을 지정하려면 아래 포맷의 커맨드를 사용하면 됩니다. Syntax

$ kubectl label nodes <node-name> <label-key>=<label-value>

Example

$ kubectl label nodes node-1 size=Large

https://github.com/kodekloudhub/certified-kubernetes-administrator-course/raw/master/images/ln.PNG

이제 노드에 레이블을 지정했으므로 파드 생성으로 돌아갈 수 있습니다.

apiVersion: v1
kind: Pod
metadata:
 name: myapp-pod
spec:
 containers:
 - name: data-processor
   image: data-processor
 nodeSelector:
  size: Large

Node Selector가 size: Large로 설정되어 있습니다.

$ kubectl create -f pod-definition.yml

포드가 생성되면, 원하는 대로 노드 1에 배치됩니다.

Node Selector - Limitations

Node Selector는 우리의 목적에 부합했지만 한계가 있습니다. 우리는 단일 레이블과 selector를 사용했습니다. 그러나 만약 요구 사항이 훨씬 더 복잡하다면 어떨까요? 예를 들어, "Large노드 나 Medium노드에 파드를 배치하는 것"과 같은 것, "Small이 아닌 노드에 파드를 배치하는 것"과 같은 것과 같은 상황입니다. Node Selector로는 이를 달성할 수 없습니다.

https://github.com/kodekloudhub/certified-kubernetes-administrator-course/raw/master/images/nsl.PNG

이를 위해 Node affinity 및 anti-affinity 기능이 나타났으며, 다음에 살펴보도록 하겠습니다.

반응형

댓글