Dev/Kubernetes
[CKAD] section 3. Configuration (4) - Node Selectors & Node Affinity
2022. 3. 25. 03:20
드디어 Configuration 의 마지막 장인 Node Selectors 까지 왔다.
Node Selectors
- 하나의 클러스터는 여러개의 노드를 가질 수 있다.
- node 에 미리 label 을 설정하여, 파드의 매니페스트 필드에 node selector 를 설정할 수 있다.
생각보다 간단한 개념이었는데.. 실습을 해본다면
# 우선 node 에 Label 을 설정해본다. (Taint 설정이랑 비슷..)
$ kubectl label nodes <node-name> <label-key>=<label-value>
# ex)
$ kubectl label nodes node-1 size=Large
매니페스트 파일에는 다음과 같이 설정한다.
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
nodeSelector:
size: Large
하지만 보다시피 단순히 Label 을 지정하는 것과는 별다를 바가 없어 보여서,
좀 더 복잡하게 (예를들면 Not Small 이나 Large or Medium 같은) 설정을 해보고 싶다면 Node Affinity 의 개념을 알아야 한다고 한다.
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- name: nginx
image: nginx:1.14.2
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: size
# Large, Medium 노드에 생성
operator: In
values:
- Large
- Medium
# Not Small
operator: NotIn
values:
- Small
# key 필드만 있는 경우
operator: Exists
# key 필드가 없는 경우
operator: DoesNotExist
매니페스트가 상당히 복잡해졌다.
이걸 다 외운다면 바보같은 짓이다. 왜냐하면 알 수 있는 다양한 방법이 있다.
예를 들면 kubectl explain pods --recursive | less 를 통해 검색해서 보는 방법이라던지, 공식 매뉴얼을 보면 된다.
Node Affinity 에서 사용하는 상태에는 2가지가 있다.
- requiredDuringSchedulingIgnoredDuringExecution
- preferredDuringSchedulingIgnoredDuringExecution:
간단히 말해서 두가지 타입의 차이는,
- required 는 해당 하는 조건의 노드가 없으면 스케줄링 되지 않는다.
- preferred 는 해당 하는 조건의 노드가 없으면 사용 가능한 노드 아무곳에 스케줄링 된다.
라는 것이다.
추가적으로,
DuringScheduling 은 파드가 존재하지 않고 처음 생성될 때를 의미하고,
DuringExecution 은 파드가 실행 중 or 변경이 되었을 때를 의미한다.
IgnoredDuringExecution 은 실행 중이거나 변경이 되었을 때는 무시되지만
RequiredDuringExecution 은 변경하거나 실행 중인 파드의 노드가 변경이 될 수 있다.
추후엔 requiredDuringSchedulingRequiredDuringExecution 타입도 나올 예정이라고 한다.
이렇게 해보고 나니, 노드를 선택한다는 점에서 Node Selectors & Node Affinity 와 Taints & Toleration 은 서로 조금 비슷하지만 차이가 있다.
Taints & Toleration
- Toleration을 가진 파드가 Taints를 가지고 있는 노드로 유인한다.
- Toleration을 가진 파드가 다른 노드에 붙을 수도 있다.
비유하자면 민들레(Taints를 가지고 있는 노드)은 꿀벌(Toleration을 가진 파드)을 유인한다.
하지만 꿀벌은 호박꽃(Taints가 없는 노드)도 좋아한다.
Node Selectors & Node Affinity
- 어피니티가 없는 파드가 특정 라벨을 가지고 있는 노드에 붙을 수 있다.
비유하자면 꿀벌을 좋아하는 꽃(Label 을 가지고 있는 노드)에 파리(그냥 파드)가 올 수도 있다.
(너무 극단적인가.. 파리라니)
결론은, Taints와 Label(Node Affinity)를 적절히 써서 원하는 동작을 하게끔 유도해야한다는 것이다.
ps. 이번달 안에 5장을 완료하고, 13장 까지 있지만 이론은 8장 까지라
4월 말에는 충분히 시험을 치를 수 있을 것 같다.
열심히 달려보자~
'Dev > Kubernetes' 카테고리의 다른 글
[CKAD] section 4. Multi-Container Pod (0) | 2022.04.02 |
---|---|
[CKAD] 2022년 시험 팁 정리 (0) | 2022.03.25 |
[CKAD] section 3. Configuration (3) - SA, Resource, Taints & Toleration (0) | 2022.03.21 |
[CKAD] section 3. Configuration (2) - Secret & Security Contexts (0) | 2022.03.17 |
[CKAD] section 3. Configuration (1) - ConfigMap (0) | 2022.03.16 |