RedHat CoreOS에서 OS Disk 용량 부족으로 클러스터 영향도 체크를 위한 목적으로 이슈 재현을 한다.

대부분의 용량 부족 원인은 Container 이미지 배포로 인해 발생하는데, 배포 주기가 빠른 Application이면서 Container 이미지의 용량도 크다면 문제 발생 확률이 높아진다고 볼 수 있다.

따라서, 기존 Application 환경에 따라서 용량 산정 기준이 미리 확보가 되어야 초기 설계시 이런 문제를 피할수 있다.

1. 전체 사용 용량 10% 미만

Dummy 파일을 생성하여 OS disk 용량을 10% 미만으로 낮춘다. 이 예제에서는 OS 영역은 80GB 이므로, dummy 파일을 72GB로 생성한다.

[root@bastion ~]# for node in {master01,master02,master03,router01,router02,worker01,worker02}; do
  ssh core@$node "sudo fallocate -l 72G /usr/local/bin/dummy_file";
done

2. 이슈 발생

Pod의 상태가 Evicted, Pending, NodeAffinity으로 확인이 되며, describe를 통해 확인시 DiskPressure 상태가 발생 된다.

[root@bastion ~]# oc describe pod example-78b644b7dd-lqg7q
Warning  Evicted    13m   kubelet            The node had condition: [DiskPressure].

[root@bastion ~]# oc describe node worker01.ybkim.ocp4.local
 image is in use by a container, rpc error: code = Unknown desc
Warning  ImageGCFailed  12m   kubelet  wanted to free 4035760947 bytes, but freed 1092839029 bytes space with errors in image deletion: [rpc error: code = Unknown desc

3. 용량 추가

위 문제를 해결하기 위해서는 Disk 사이즈를 증가 시켜주어야 정상화 되기 때문에, 가상화 환경인 경우 가상머신의 디스크 용량을 추가 하여 용량을 resize 한다. 작업 전 모든 노드를 shutdown 후 진행 한다.

[root@baremetal ~]# for node in {master01,master02,master03,router01,router02,worker01,worker02}; do
  virsh destroy $node && qemu-img resize -f qcow2 ybkim-ocp-poc-$node.qcow2 +80G;
done

4. 용량 재설정

OS 파티션 재설정1,2을 통해 증가 된 용량을 확보 후 재부팅 한다.

[root@bastion ~]# for node in {master01,master02,master03,router01,router02,router03,worker01,worker02,worker03,worker04}; do
  ssh core@$node "sudo /usr/libexec/rhcos-growpart / && sudo reboot";
done

5. Evicted & NodeAffinity Pod 제거

기존에 발생했던 Evicted, NodeAffinity Pod들을 일괄 삭제 한다.

[root@bastion ~]# oc get pod --all-namespaces  \
| awk '{if ($4=="Evicted") print "oc delete pod " $2 " -n " $1;}' | sh
[root@bastion ~]# oc get pod --all-namespaces  \
| awk '{if ($4=="NodeAffinity") print "oc delete pod " $2 " -n " $1;}' | sh

6. RefURL

[1]: [RHCOS 4.x – /usr/libexec/rhcos-growpart](https://gist.github.com/ruo91/a4d96cb8694352a077bf531f8da25f85)
[2]: [RHCOS 4.x – /lib/systemd/system/rhcos-growpart.service](https://gist.github.com/ruo91/ecf9063cddfe0a7f767ddb6ca54e10f6)