본문 바로가기
개발/Docker&kubernetes

Kubernetes pod pending FailedScheduling - n node(s) had taints that the pod didn't tolerate

by 궁즉변 변즉통 통즉구 2022. 4. 26.
반응형

Kubernetes에서 pod를 실행하고 'kubectl get pod' 로 pod 상태를 조회했을 때 pod 상태가 계속 pending 상태로 남아있고 시작이 되지 않는 상황이 발생했다. 처음에는 image를 받아오거나 Volume설정 등에 문제가 생겼나하고 의심을 했지만 describe 명령으로 pod상태를 자세히 확인 했을 때 "node(s) had taints that the pod didn't tolerate"라는 메시지를 확인했다. 

kubectl describe pod pod-xxxxxx[pod명]

 

이유는 FailedScheduling으로 pod를 실행할 node가 없다는 얘기였다. 테스트 환경으로 Master노드 하나에 pod들을 올릴 수 있도록 설정을 해뒀었는데 한번 더 아래 명령으로 확인해봤다.

kubectl describe node master | grep Taints

 

결과는 disk-pressure로 노드에 디스크 할당 압박이 있어서 스케줄을 할 수 없다는 내용이었다.

node.kubernetes.io/disk-pressure:NoSchedule

디스크 상황을 확인하고 불필요한 파일들을 삭제하니 pod가 정상적으로 실행이 되었다. 

 

Kubernetes에서 Node는 아래의 조건일 경우에서는 자동으로 Node를 Taint시킨다고 하니 Taints 관련으로 pod가 pending 상태일 경우 아래 내용을 참조해보자

  • node.kubernetes.io/not-ready: 노드가 준비되지 않았다. 이는 NodeCondition Ready 가 "False"로 됨에 해당한다.
  • node.kubernetes.io/unreachable: 노드가 노드 컨트롤러에서 도달할 수 없다. 이는 NodeCondition Ready 가 "Unknown"로 됨에 해당한다.
  • node.kubernetes.io/memory-pressure: 노드에 메모리 할당 압박이 있다.
  • node.kubernetes.io/disk-pressure: 노드에 디스크 할당 압박이 있다.
  • node.kubernetes.io/pid-pressure: 노드에 PID 할당 압박이 있다.
  • node.kubernetes.io/network-unavailable: 노드의 네트워크를 사용할 수 없다.
  • node.kubernetes.io/unschedulable: 노드를 스케줄할 수 없다.
  • node.cloudprovider.kubernetes.io/uninitialized: "외부" 클라우드 공급자로 kubelet을 시작하면, 이 테인트가 노드에서 사용 불가능으로 표시되도록 설정된다. 클라우드-컨트롤러-관리자의 컨트롤러가 이 노드를 초기화하면, kubelet이 이 테인트를 제거한다.

 

반응형

댓글