Kubernetes 에서 잘돌아가던 몇몇 Pod 에 문제가 생겼다

 

Pod의 상태는 Pending 이 걸려있고

Pod 들을 죽였다 다시 살려봐도 같은 증상을 보였다.

 

Deployment, Statefulset 과 같은 Controller를 통해 생성된 pod의 경우에는

Pod를 delete하면 자동 생성 되지도 않는 경우도 보였다.

 

문제가 생긴 pod들을 describe해보니

taint에 관련된 문제였다.

 

shell> kubectl describe pod "Pod이름"
Events:
  Type          Reason             Age     From               Message
  ----            ------               ----     ----               -------
  Warning  FailedScheduling    40s     ~~~      0/1 nodes are available: 1 node(s) had taint node.kubernetes.io/disk-pressure:NoSchedule, that the pod didn't tolerate.

빨간색의 node.kubernetes.io/disk-pressure:NoSchedule

로 보아 disk-pressure 디스크 용량이 부족하다는 것이다.

 

taint, toleration 의 문제의 경우 

>> kubernetes taint nodes "노드이름" node.kubernetes.io/disk-pressure:NoSchedule-

 

위의 커맨드 처럼 해당 taint를 빼면 문제가 해결되는 경우 (커맨드 끝의 " - "(대쉬)까지 넣어준다.)

도 있지만 

 

disk-pressure의 경우엔 taint 제거로도 해결이 되지 않았다.

 

해결가능한

첫번째 방법은

디스크를 정리하는 것이다.

특히 Docker image 파일들이 많이 쌓여 생기는 경우가 보이는데

정리를 해주면 빠른 해결이 가능하다.

관련 커맨드
도커 이미지 리스트 docker images
도커 이미지 제거 docker rmi {이미지 id}
도커 컨테이너 조회 docker ps / docker ps -a
   

 

두번째 방법은

데이터 디렉토리를 바꿔주는 것이다.(더 여유있는 용량을 마운트한 디렉토리)

앞으로의 관리적인 측면을 보자면 이 방법이 더 좋을 것 같다.

 

도커의 기본 디렉토리는 /var/lib/docker 이다.

이 기본 디렉토리를 바꾸는 방법은

# /lib/systemd/system/docker.service 파일 수정

>> sudo vi /lib/systemd/system/docker.service

위의 파일에서

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

를 찾아서

--data-root={원하는 디렉토리}

를 추가하고 저장한다. 아래 예시

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --data-root={원하는 디렉토리}

 

그리고 docker를 재시작하면 적용이 된다.

>> sudo service docker restart (우분투) 

 

적용이 되었는지를 확인하는 가장 간단한 방법은

docker image를 새로 받아보고,

기존과의 용량 변화를 확인하는 것이다.

 

#스토리지 확인

df -h

#특정 디렉토리의 할당마운트와 사이즈 확인

df -h {디렉토리}

 

#예시

df -h /data

df -h /var

 

이미지 pull

docker pull {image이름:tag}

+ Recent posts