해당 내용은 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에서 레이블을 사용하려면 파드를 만들기 전에 먼저 노드에 레이블을 지정해야 합니다.
Label Nodes
이제 돌아가서 노드에 레이블을 지정하는 방법을 살펴보겠습니다. 노드에 레이블을 지정하려면 아래 포맷의 커맨드를 사용하면 됩니다. Syntax
$ kubectl label nodes <node-name> <label-key>=<label-value>
Example
$ kubectl label nodes node-1 size=Large
이제 노드에 레이블을 지정했으므로 파드 생성으로 돌아갈 수 있습니다.
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로는 이를 달성할 수 없습니다.
이를 위해 Node affinity 및 anti-affinity 기능이 나타났으며, 다음에 살펴보도록 하겠습니다.
'MLOps > Doker & Kubernetes' 카테고리의 다른 글
Udemy CKA 강의 정리 64. Taints and Tolerations vs Node Affinity (0) | 2023.01.09 |
---|---|
Udemy CKA 강의 정리 61. Node Affinity (0) | 2023.01.06 |
Udemy CKA 강의 정리 59: Solution - Taints and Tolerations (Optional) (0) | 2023.01.06 |
Udemy CKA 강의 정리 58: Practice Test - Taints and Tolerations (0) | 2023.01.06 |
Udemy CKA 강의 정리 57. Taints and Tolerations (0) | 2023.01.06 |
댓글