DevOps/Kubernetes
Scheduling101
노프Nope
2022. 8. 15. 03:10
스케줄러의 역할
- 모든 팟(pod)이 노드에 있도록 한다
- 컨트롤러의 일종이다
스케줄링 과정
- 할당되지 않은 팟을 담는 Object Store라는 걸 모니터링
- 팟을 실행할 최적의 노드를 찾는다
- 노드에 팟을 할당한다.
- 실행은 kubelet이 한다
어떻게?
- 노드 셀렉터
- 예전에 사용
- 지금은 affinity로 발전
- 노드는 해당 셀렉터의 모든 label을 포함해야 팟의 타겟이 된다
- 노드 affinity
- label에 기반하는 것은 같지만
- 강제로 할당
- required~ → hard
- preferred~ → soft
- 무엇이 할당될까?
- node label 확인은
kubectl get nodes --show-labels | grep mynode
- node label 확인은
- anti node affinity
- 사용하면 안 될 노드가 있을 때 사용 (ex. 모니터링 어플리케이션)
- NotIn 연산자
- Taints and tolerations
- taint == mark == 쓰면 안 되는 노드를 지정해두기
- taint를 하면 스케줄러에서 노드가 제외된다
- anti node affinity와 다른 점: pod definition을 건드리지 않고도 노드를 제외 (관리자 예제)
:
- tolerate == 허용 조건 설정
- taint를 무시하는 방법(이지만 그 tainted 노드에 할당된다는 보장은 x)
- 가용 노드가 된다는 뜻
- 보장하려면, nodeSelector, node affinity 사용
- 노드에 적용되는 게 아니라 팟에 적용
- taint를 무시하는 방법(이지만 그 tainted 노드에 할당된다는 보장은 x)
- taint == mark == 쓰면 안 되는 노드를 지정해두기
만약에..
- label 없으면 어느 노드에 할당?
0/3 nodes are available: 3 node(s) didn't match Pod's node affinity/selector
- 같은 label이 여러 개 있으면 어느 노드에 할당?
0/3 nodes are available: 3 node(s) didn't match Pod's node affinity/selector