MLOps/Doker & Kubernetes

Udemy CKA 강의 정리 60. Node Selectors

공부하는 무니 2023. 1. 6. 23:58
반응형

해당 내용은 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 기능이 나타났으며, 다음에 살펴보도록 하겠습니다.

반응형