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}
'하는일 > MSA' 카테고리의 다른 글
[Kubernetes 관리] 정상 상태 점검 - liveness, readiness 란 (0) | 2020.12.02 |
---|---|
[kubernetes 관리] 배포 전략 ( 롤링, 블루-그린, 카나리아 ) (0) | 2020.11.18 |
[MSA란] MicroService Architecture. 아주 작은 서비스 ? (0) | 2020.11.06 |
MSA 초보자 (0) | 2020.11.05 |