그러나 기본적으로 master 노드에서 실행되는 프로그램이 있다. 왜일까? ===="> 그러나 기본적으로 master 노드에서 실행되는 프로그램이 있다. 왜일까? ===="> 그러나 기본적으로 master 노드에서 실행되는 프로그램이 있다. 왜일까? ====">
1. Node Label & Node Selector
* 지정된 노드에 파드를 실행하고 싶을 때 사용
2. Affinity & Anti-Affinity
1) Node Affinity + Node Label
[참고] "Node Label/Node Selector" vs "Node Label/Node Affinity"
* Node Label/Node Selector : 지정된 노드에 파드를 실행하고 싶을 때 사용
- 단순 지정하는 용도
* Node Label/Node Affinity : 지정된 노드에 파드를 실행하고 싶을 때 사용
+ 조금 더 폭 넓은 조건 부여 가능(가중치 부여 가능)
2) Pod Affinity & Pod Anti-affinity
[참고] "Node Affinity/Node Selector" vs "Pod Affinity/Anti-affinity"
* Node Affinity: 파드와 노드 간의 관계
* Pod Affinity/Anti-affinity: 파드와 파드 간의 관계
[참고] "Pod Affinity" vs "Pod Anti-affinity"
* Pod Affinity : 파드와 상관 있는 파드를 근접해서 배치한다.
* Pod Anti-affinity : 기존 파드와 새로운 파드를 멀리 배치(topology key 필요)
3. Node Taint & Pod Toleration
[참고] "Node Affinity" vs "Node Taint"
* Node Affinity : 특정 노드에 파드를 배치
* Node Taint : 특정 노드에 파드를 배치하지 않음 (단, Pod Toleration 설정 시 예외)
- 기본적으로 control-plane(master 노드)에 설정되어있음.
=> 그러나 기본적으로 master 노드에서 실행되는 프로그램이 있다. 왜일까?
=================================================================
kube-system calico-node-kzspb 1/1 master
kube-system etcd-master 1/1 master
kube-system kube-apiserver-master 1/1 master
...
=================================================================
=> 테인트 설정이 된 노드에는 effect에 설정된 키와 같은 이름을 갖고있어야
해당 노드에서 실행할 수 있다.
# kubectl describe nodes master | grep -A 1 -i taint
[참고] "Node Taint" vs "Pod toleration"
* Node Taint : 특정 노드 파드를 스케줄링 하지 않음
* Pod Toleration : Node Taint가 설정된 노드에서 예외적으로 Pod를 스케줄링
=> 테인트(Taint) = 노드와 관련 / 톨러레이션(Toleration) = 파드와 관련
4. Cordon/Uncordon & Drain
[참고] Cordon vs Drain
* Cordon : 노드에 스케줄링(파드 배포) 중지
* Drain : + 기존 파드를 삭제
# drain의 작업 순서 -> cordon으로 스케줄링을 중지 시킨 후 파드를 삭제 한다
# drain 종료 후 uncordon으로 스케줄링을 재개하면 된다.
# kubectl cordon node1
# kubectl uncordon node1
# kubectl drain node1 --force --ignore-daemonsets (+ --delete-emptydir-data)
# kubectl uncordon node1
수업 자료