Pod 스케줄링 에러 scheduler 0/5 nodes are available
쿠버네티스에서 Pod 배포를 했을 때
Warning FailedScheduling 40s (x5 over 3m50s) default-scheduler 0/5 nodes are available: 1 Too many pods, 1 node(s) had taint {node-role.kubernetes.io/master: }, that the pod didn't tolerate, 3 node(s) didn't match Pod's node affinity/selector.
요런 에러 발생.
정확하게 읽어보지도 않고 구글링했더니 명확한 답이 안나왔음. 근데 하나 하나 제대로 읽어보니 Warning
에 답이 있었다…
- 1개의 노드는
Pod
가 너무 많이 떠있고, - 1개의 노드는
Taint
(pod가 못뜨게 “얼룩”이 묻은 것임. master) 가 있고,- Taint는 얼룩이라는 뜻. Node에 얼룩을 묻힐 수 있는데 얼룩이 있는 Node에는 pod가 마음대로 못뜸.
- 만약 Taint 가 있는 Node에 Pod를 띄우고 싶으면 Tolerance 값을 줘야함 (얼룩을 참는다는 의미!)
- 3개의 노드는
node affinity
(node 친화도. 즉, 붙고 싶은 node가 이미 있다.)가 맞지 않다.- Node Affinity 는 노드 친화도이다. Node selector와 거의 유사. 하지만 조금 더 유연하게 사용가능.
- 그러니깐 node affinity에다가 node 4 해놓으면 4번 노드에만 붙으려고 한다!
전체 노드는 5개이니 위의 케이스 중 하나가 잘못되어있다!! 확인해보니 master 1개, affinity 는 4번 node!!
즉, 1개의 노드에 너무 많은 Pod가 떠 있어서 새로운 pod가 뜨지 못하는 스케줄링 이슈 발생.
1
k get nodes -o yaml | grep pods
로 각 노드의 max pod
수를 확인할 수 있다.
해당 노드의 pod 하나를 삭제하니 정상적으로 스케줄링이 되는 것을 확인!