반응형
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이 이 테인트를 제거한다.
반응형
'개발 > Docker&kubernetes' 카테고리의 다른 글
K3s 인증서 갱신(certificate has expired or is not yet valid) (0) | 2023.01.15 |
---|---|
Docker Multi Application(여러 어플리케이션) 실행 (0) | 2022.09.06 |
Docker Nginx Simple 컨테이너 생성 (0) | 2022.08.26 |
Docker Keep Running(실행 유지) 방법 (1) | 2022.08.26 |
Docker 컨테이너 apt-get install Unable to locate package 에러 (0) | 2022.08.26 |
댓글