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:  datateraz 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-volumeteraz 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 # exitNastępnie powinniśmy usnąć naszego debug poda:
$ kubectl -n <NAZWA PRZESTRZENI> delete -f debug.yamlI na koniec możemy spowrotem przeskalować naszą usługę:
$ kubectl scale deployment my-deployment --replicas=1Teraz 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.