작성
·
403
0
kubectl create 를 통해 새로운 Pod 를 만들었는데, 계속 Pending 상태로 유지되는 현상을 확인하여 나름대로 구글링 해본 결과.. Control-Plane Node에 Pod를 못 올리도록 설정되어 있기 때문이라는 내용을 봤습니다. 이때 Untainted 를 통해 Taint 설정을 해제하면 자동으로 Pod 가 running 되는 현상이 있습니다. 혹시 이렇게 되어있는 이유가 있을까요?
해지 시 사용한 명령어 : $ kubectl taint nodes –all node-role.kubernetes.io/master-
답변 1
1
안녕하세요 강사 최일선입니다.
우선 답변이 늦어서 죄송합니다.
컨트롤 플레인은 쿠버네티스 클러스터에 핵심적인 역할을 가지고 있습니다. 전체 클러스터를 감시하고 관찰하는 역할을 하고 있으므로 여기에 애플리케이션을 배치하지 않습니다. 이것이 쿠버네티스에서 제시하는 모범사례입니다.
그리고 말씀하신 내용에 Pending상태가 지속됐다고 하셨는데 펜딩되는 이유가 마스터 노드에 있다고 생각되지는 않습니다. 아마 자원의 양이 부족해서 그렇지 않았을까 생각됩니다.
1. POD를 배치했으나 워커 노드에서는 가용한 자원이 없었다.
2. Master Node에 기본으로 설정된 테인트를 해제했더니 추가 컨테이너가 배치 가능하도록 수정됐다.
3. 펜딩된 POD는 마스터 노드에 가용한 자원을 사용하기 시작했다.
정리하자면 쿠버네티스 클러스터 핵심 역할을 하는 마스터 노드는 본래 기능에 집중되도록 만들어진 노드로써 그 역할을 충분히 수행할 수 있는 여건을 갖추어야 하므로 꼭 마스터에 배치되어야 하는 애플리케이션 아니라면 배치를 권장하지 않습니다. 그리고 포드가 펜딩된 이유는 아마(제가 보지 못해서 아마라고 표현하겠습니다) 포드를 배치할만한 워커 노드가 없었기 때문으로 보입니다. 참고로 kubectl describe pod <pod이름>을 사용하시면 Event 부분에서 POD가 펜딩된 이유를 찾을 수 있습니다.
감사합니다.