Debugowanie PVC w kubernetesie
Czasami zdarza się że coś pójdzie nie tak i nasz dysk PVC będzie miał błedy bądź zapełni się tak że nie możemy uruchomić naszej usługi.
Ostanio miałem taki problem ze źle skonfigurowaną usługą Prometheus. Przestrzeń zapełniła się tak bardzo że kontener nie mógł wstać. Poniżej przedstawiam co wtedy zrobić.
Odepnij wolumen
Kontener utknął w reboot loopie więc musimy przeskalować deployment do zera.
kubectl scale deployment my-deployment --replicas=0
Utwórz pod do debuggowania
Najpierw musimy namierzyć PVC które nas interesuje
$ kubectl describe deployment my-deployment | grep ClaimName
ClaimName: data
teraz musimy utworzyć nowego poda który podepnie istniejące PVC.
utwórz plik debug.yaml
:
kind: Pod
apiVersion: v1
metadata:
name: volume-debugger
spec:
volumes:
- name: debug-volume
persistentVolumeClaim:
claimName: <TU PODAJ CLAIM NAME>
containers:
- name: debugger
image: busybox
command: ['sleep', '3600']
volumeMounts:
- mountPath: "/data"
name: debug-volume
teraz musimy utworzyć nowego poda pamiętając aby był w tej samej przestrzeni nazw co PVC.
$ kubectl -n <NAZWA PRZESTRZENI> create -f debug.yaml
pod "volume-debugger" created
$ kubectl -n <NAZWA PRZESTRZENI> exec -it volume-debugger sh
/ # cd /data
/data #
Teraz możemy naprawić pliki bądź usunąć nadmiarowe.
Przywracanie usługi
Po naprawie plików możemy przywrócić naszą usługę do życia. Na początku wyjdźmy z naszego debug poda.
/data # exit
Następnie powinniśmy usnąć naszego debug poda:
$ kubectl -n <NAZWA PRZESTRZENI> delete -f debug.yaml
I na koniec możemy spowrotem przeskalować naszą usługę:
$ kubectl scale deployment my-deployment --replicas=1
Teraz wszystko powinno być w porządku
Podsumowanie
W idealnym śwecie nigdy nie powinniśmy musieć korzystać z tej metody ale jak wiemy nie wszystko idzie idealnie. Warto więc znać taką szybką metode jak dostać się do skorumpowanych danych.