물리 서버에 설치한 Cloudera Data Services(ECS) 워커 노드에서 파드가 늘어날수록 /var/lib/kubelet/pods/ 아래 emptyDir·컨테이너 로그·writable layer 가 OS /var 파티션을 잠식해 디스크 사용률 알람이 반복됐다. 운영팀이 /var/lib/kubelet 을 별도 디스크로 분리하자고 제안했고, 운영 중인 CDE Airflow 에 영향을 주지 않으면서 노드를 한 대씩 롤링으로 작업하는 절차를 Cloudera 공식 ECS 유지보수 절차에 맞춰 정리했다.
kubelet root-dir(/var/lib/kubelet) 을 별도 디스크로 분리하는 것은 Kubernetes 워커 운영에서 표준적으로 권장되는 방식이다. 다만 진행 전에 다음을 확인한다.
/dev/longhorn/pvc-xxx 는 이미 별도 블록 디바이스이고 kubernetes.io~projected 계열은 tmpfs 라서 분리해도 영향이 없다. /var 자체 사용률인지 파드별 ephemeral-storage 임계치인지 모니터링 팀에 재확인한다./var/lib/containerd 등) 도 같이 분리할지 정한다. kubelet 만 옮기면 이미지·레이어 때문에 알람이 재발할 수 있다.kubectl 은 ECS Server(컨트롤 플레인) 노드에서 rke2 바이너리와 kubeconfig 를 지정해 실행한다. 워커 노드에서 실행하면 로컬에 API 서버가 없어 dial tcp [::1]:8080: connect: connection refused 가 난다.
echo 'export KUBECONFIG=/etc/rancher/rke2/rke2.yaml' >> ~/.bashrc
echo 'export PATH=$PATH:/var/lib/rancher/rke2/bin' >> ~/.bashrc
source ~/.bashrc
kubectl get nodes
kubectl get node <worker-fqdn> -o wide
/etc/rancher/rke2/rke2.yaml 은 클러스터 admin 인증서가 든 민감 파일이므로 권한 600 을 유지한다.
Cannot evict pod ... disruption budget 메시지는 정상이며 재시도 끝에 evict 된다. 명령이 끝나기 전에는 다음 단계로 넘어가지 않는다.kubectl cordon <worker-fqdn>
kubectl drain <worker-fqdn> --delete-emptydir-data --ignore-daemonsets \
--pod-selector='app!=csi-attacher,app!=csi-provisioner,app!=longhorn-admission-webhook,app!=longhorn-conversion-webhook,app!=longhorn-driver-deployer'
kubectl get pods -A -o wide | grep <worker-fqdn>
Cloudera Manager 에서 ECS 서비스 Health Tests 의 Vault sealed 여부를 확인하고 sealed 면 Actions → Unseal Vault. Instances 탭에서 해당 호스트의 ECS Agent 역할을 Stop 한다(Agent 만 있는 워커면 Server 역할 조치는 불필요).
대상 노드에서 root 로 디스크 작업.
systemctl status rke2-agent
systemctl stop rke2-agent
lsblk
pvcreate /dev/sdX
vgcreate vg_kubelet /dev/sdX
lvcreate -l 100%FREE -n lv_kubelet vg_kubelet
mkfs.xfs /dev/vg_kubelet/lv_kubelet
mkdir -p /mnt/new_kubelet
mount /dev/vg_kubelet/lv_kubelet /mnt/new_kubelet
rsync -aHAX --info=progress2 /var/lib/kubelet/ /mnt/new_kubelet/
umount /mnt/new_kubelet
mv /var/lib/kubelet /var/lib/kubelet.bak
mkdir -p /var/lib/kubelet
blkid /dev/vg_kubelet/lv_kubelet
vi /etc/fstab
mount -a
df -h | grep kubelet
reboot
/etc/fstab 에는 UUID=<uuid> /var/lib/kubelet xfs defaults 0 0 형태로 등록한다.
kubectl uncordon <worker-fqdn>
kubectl get node <worker-fqdn>
df -h | grep kubelet
/var/lib/kubelet.bak 은 uncordon 후 정상 동작이 확인될 때까지 지우지 않는다.