Pod Pending 상태의 주요 원인

833 단어·2 분·원문(.md)

노드에 스케줄링이 불가능할때 #

구체적인 원인들

  • cpu/memory request 값이 노드 여유치 보다 크다.
  • nodeSelector, affinity 조건에 맞는 노드가 없다.
  • 노드의 taint가 적용되어있고 pod에 toleration이 미적용되어있다.

해결방법

  • kubectl describe node로 cpu memory 여유 확인후 request를 조정한다.
  • nodeSelector, affinity로 쓸데없이 좁혀둔 부분을 제거 혹은 완화시킨다
  • taint 있는 노드에 올릴걸면 toleration을 추가해놓는다.
  • 필요하면 그냥 스케줄링 가능한 노드 수를 늘리는게 편하다 스케일 아웃으로

이미지 pull 불가능할때 #

  • 잘못된 image, tag
  • private registery authentication failed
  • registry network timeout

해결방법

  • kubectl describe pod events에서 ErrImagePull, ImagePullBackOff를 확인한다.
  • image 경로 tag 위치 확인 (이건 걸리면 좀 ;;)
  • private registry라면 imagePUllSecret을 설정해두어야한다.
  • 네트워크 문제면 클러스터에서 registry ping curl 테스트를 해보자.

PVC 바인딩 실패 #

  • pvc에서 요청한 storage class 없음
  • pv 용량/access mode 불일치
  • EBS/CSI controller error로 프로비저닝이 지연

해결방법

  • kubectl get pvc -n ns로 상태가 bound인지 확인한다.
  • StorageClass 이름 맞게 지정한다.
  • AccessMode가 PV와 일치하는지 검증한다.
  • EKS/EBS 환경이면 CSI drvier 상태를 확인한다. kubectl get pods- n kube-system | grep csi

EKS에서 EBS를 사용하는 경우 EBS CSI Driver가 실제로 EBS 볼륨을 생성하고 PV를 파드에 붙히는 attach/mount 역할을 하기 때문에 얘가 장애난건 아닌지 확인

CSI = Container Storage Interface 쿠버네티스가 외부 스토리지(예: AWS EBS, NFS, Ceph, iSCSI 등) 를 붙이기 위해 사용하는 표준 인터페이스.

Namespace ResourceQuota 또는 LimitRange 충돌 #

  • 네임스페이스가 허용한 cpu memory 총량 초과
  • LimitRange의 Pood의 request/limit 값과 맞지 않음

해결방법

  • kubectl describe quota -n <ns>로 초과 여부확인
  • Pod request/limit을 quota/limitrange 내로 조정
  • 불필요한 리소스 사용중인 파드 정리

LimitRange는 네임스페이스 안에서 파드 컨테이너가 가져야할 최대 최소 request-limit 규칙을 강제하는 기능으로 이걸 지키지 않으면 파드 생성이 안됨

ResourceQuota는 네임스페이스 전체에 대해서 cpu memory 총량 pvc 개수, pod 개수 등 자원 사용량을 제한하는 기능임.

파드단위 vs 네임스페이스 단위라고 구별하면 편함

SRE/question/q_1.md