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.

Wojciech Woźniak

Wojciech Woźniak