Helm Uninstall: Kompendium po bezpiecznym usuwaniu wydania Helm

Pre

W świecie Kubernetes narzędzia do zarządzania pakietami odgrywają kluczową rolę. Helm jest jednym z najpopularniejszych rozwiązań, które ułatwia instalację, aktualizacje i usuwanie aplikacji w klastrze. W tym artykule skupiamy się na helm uninstall — jak poprawnie wykonywać usuwanie wydania Helm, jakie są niuanse związane z wycofywaniem zasobów i jak uniknąć typowych pułapek. Dowiesz się, kiedy warto używać helm uninstall, jakie opcje są dostępne i jak postępować w scenariuszach zaawansowanych, w tym gdy pojawiają się niechciane zasoby lub CRD.

Co to jest helm uninstall i dlaczego ma znaczenie

helm uninstall to polecenie służące do usunięcia wydania Helm z klastra Kubernetes. Dzięki niemu zasoby pokrewne, utworzone przez konkretną instalację, są usuwane z przestrzeni nazw, a odnotowanie w repozytorium wydań może zostać zarchiwizowane w zależności od użytych opcji. W praktyce oznacza to, że użytkownik usuwa całą aplikację, jej konfiguracje oraz związane z nią zasoby, pozostawiając klaster w czystości po zakończeniu procesu.

W kontekście SEO oraz użyteczności użytkownika warto podkreślić różnicę między helm uninstall a innymi metodami usuwania. W odróżnieniu od ręcznego usunięcia pojedynczych zasobów, helm uninstall zapewnia spójność operacji, zachowuje historię wydania (jeśli wybierzesz odpowiednie opcje) i ułatwia audyt zmian w klastrze.

Najczęściej helm uninstall wykorzystuje się w następujących sytuacjach:

  • Chęć całkowitego usunięcia aplikacji z klastra po zakończeniu projektu lub środowiska testowego.
  • Przygotowanie do ponownej instalacji z nowymi parametrami, np. po zmianie wartości konfiguracyjnych w Helm chart.
  • Usuwanie środowiskowych wersji aplikacji, której nie planujesz dalej używać (np. deprecjacja projektu).
  • Chęć zwolnienia zasobów Kubernetes, takich jak deploymenty, serwisy, config mapy i secret, które zostały utworzone przez wydanie.

Warto pamiętać, że helm uninstall nie zawsze usunie wszystkie zasoby. Niektóre zasoby, zwłaszcza te związane z CRD (Custom Resource Definitions), mogą wymagać od użytkownika ręcznego usunięcia, jeśli chart zainstalował je w klastrze. Dlatego warto mieć świadomość, że podejście to zwykle usuwa zasoby powiązane z wydaniem, a nie zawsze CRD-y w całym klastrze.

Podstawowa składnia komendy jest prosta. Poniżej znajdziesz zestawienie najważniejszych kroków, które ułatwią bezpieczne i skuteczne usunięcie wydania Helm:

Składnia i podstawowe opcje

  • Podstawowa składnia: helm uninstall RELEASE_NAME
  • Opcje pomocnicze:
    • –namespace NAMESPACE — określa przestrzeń nazw, w której znajduje się wydanie
    • –timeout DURATION — maksymalny czas na zakończenie operacji usuwania
    • –dry-run — symuluje operację bez rzeczywistego usunięcia
    • –keep-history — zachowuje historię wydania w magazynie wydania
    • –no-hooks — pomija wykonywanie hooków podczas uninstall
  • Przykładowe użycie: helm uninstall my-release –namespace my-namespace –timeout 300s
  • Inne rozważane przypadki: użycie –dry-run przed rzeczywistym usunięciem w celu potwierdzenia, co zostanie usunięte

W praktyce często zaczynasz od krótkiego przeglądu istniejących wydan:

Przykładowe komendy w celu potwierdzenia, które wydanie chcesz usunąć:

  • helm list –all-namespaces
  • helm status RELEASE_NAME — sprawdzisz aktualny stan konkretnego wydania (jeśli jest dostępny)

Przykładowe scenariusze użycia helm uninstall

  • Proste usunięcie w domyślnej przestrzeni nazw:

    helm uninstall my-release
  • Usunięcie z określoną przestrzenią nazw i z zachowaniem historii:

    helm uninstall my-release –namespace prod –keep-history
  • Symulacja usunięcia bez faktycznego usuwania (dry-run):

    helm uninstall my-release –dry-run
  • Usunięcie z krótkim limitem czasu i bez hooków (np. jeśli hooki blokują proces):

    helm uninstall my-release –namespace prod –timeout 180s –no-hooks

Aby uniknąć sytuacji, w której po uninstall pozostają zasoby generujące koszty lub konfliktują z innymi aplikacjami, warto przeprowadzić wstępny audyt:

  • Użyj –dry-run, aby zobaczyć, jakie zasoby są powiązane z wydaniem i które zostaną usunięte
  • Sprawdź etykiety zasobów, które były tworzone przez Helm (np. app.kubernetes.io/instance) przy użyciu kubectl
  • Po wykonaniu helm uninstall sprawdź namespace pod kątem pozostających zasobów i ewentualnych finalizerów

Typowy proces weryfikacji po helm uninstall obejmuje:

  • kubectl get all -n NAMESPACE
  • kubectl get pvc -n NAMESPACE
  • kubectl get crd

CRD to specjalny typ zasobu, który bywa instalowany przez charty Helm. W wielu przypadkach CRD-y nie są usuwane automatycznie podczas uninstall. W praktyce zaleca się podejście ostrożne:

  • Jeśli wiesz, że CRD był dodany specjalnie przez chart i nie jest już potrzebny, możesz usunąć go ręcznie:

    kubectl delete crd
  • Przy ostrożnym podejściu najpierw usuń CRD-y, a następnie sprawdź, czy inne zasoby nie odwołują ich w swojej definicji
  • W dokumentacji chartu często znajdziesz wskazówki, czy CRD-ki powinny być usuwane po uninstall

Zasoby nadal istnieją po helm uninstall

Najczęściej problemem są finalizery lub zasoby, które nie zostały prawidłowo usunięte przez proces uninstall. W takich przypadkach warto:

  • Sprawdzić status zasobów kubectl: kubectl get pod -n NAMESPACE -o wide
  • Usunąć ręcznie zalegające zasoby, które wciąż blokują klaster: kubectl delete -n NAMESPACE
  • Sprawdzić logi hooków, jeśli użyto –no-hooks w celu zidentyfikowania problemu

Release nie istnieje lub nie można go odnaleźć

Jeżeli próbujesz wykonać helm uninstall na wydaniu, które nie jest widoczne w danym kontekście, rozważ:

  • Sprawdzenie bieżącej przestrzeni nazw i konfiguracji kubectl
  • Wykonanie helm list –all-namespaces, aby zweryfikować istnienie wydania w innym namespace
  • Upewnienie się, że używasz właściwej wersji Helm (np. Helm v3)

CRD pozostają po helm uninstall i nie chcą się usunąć

W takim przypadku decyzja zależy od kontekstu. Czasem CRD nie powinny być usuwane, ponieważ mogły być używane przez inne wydania. Jeżeli CRD-y są niepotrzebne, możesz je bezpiecznie usunąć ręcznie poprzez kubectl delete crd, pamiętając, że to działanie jest nieodwracalne dla CRD i zasobów zależnych od niego.

Aby uniknąć problemów i utraty konfiguracji, warto zastosować poniższe praktyki:

  • Wykonaj backup konfiguracji i manifestów związanych z wydaniem, które planujesz usunąć
  • Sprawdź, które zasoby będą usunięte i czy nie będą potrzebne inne aplikacje w klastrze
  • Użyj –dry-run przed właściwym uninstall, aby zweryfikować skutki operacji
  • Po helm uninstall upewnij się, że wszystkie zasoby zostały usunięte lub przeniesione do nowych konfiguracji
  • Jeżeli planujesz ponowną instalację, rozważ zmiany w wartości konfiguracyjnych chart, aby uniknąć konfliktów

Poza helm uninstall istnieją również inne podejścia do zarządzania zasobami w Kubernetes. Warto znać te opcje, aby móc dobrać odpowiednie narzędzie do konkretnego zadania:

  • Helm upgrade i rollback — jeśli potrzebujesz cofnąć zmianę zamiast całkowitego usunięcia
  • Kubectl delete — ręczne usuwanie pojedynczych zasobów bez uwzględnienia historii wydania
  • Helm delete vs Helm uninstall — w Helm v3 używasz helm uninstall, a wcześniejsze wersje miały inny schemat (delete –purge)

Zakładamy, że masz release o nazwie my-app w domyślnej przestrzeni nazw. Aby usunąć to wydanie, wykonujesz:

helm uninstall my-app

Po tej operacji zasoby związane z wydaniem zostaną usunięte z klastra, a historia wydania może zostać usunięta lub zachowana w zależności od konfiguracji. Aby upewnić się, że wszystko poszło zgodnie z planem, warto sprawdzić stan zasobów w namespace:

kubectl get all

Jeżeli wydanie znajduje się w przestrzeni nazw prod i chcesz zachować historię, użyj:

helm uninstall my-app –namespace prod –keep-history

To pozwala na późniejszą analizę, co było zainstalowane, a także wgląd w historię wydań. Sprawdzasz zasoby w namespace prod po zakończeniu operacji:

kubectl get all -n prod

Dla szybkiej weryfikacji bez faktycznego usunięcia i wyłączenia hooków, używasz:

helm uninstall my-app –namespace prod –dry-run –no-hooks

To przydatne w procesach CI/CD, gdzie chcesz najpierw zweryfikować skutki usunięcia, a następnie wykonać właściwy uninstall w kolejnej paczce pracy.

Polecenie helm uninstall to kluczowy element zarządzania cyklem życia aplikacji w Kubernetes przy użyciu Helm. Dzięki niemu można bezpiecznie i skutecznie usuwać wydania, zachowywać lub nie zachowywać historii, a także kontrolować zachowanie hooków. W praktyce warto podchodzić do procesu z rozwagą: najpierw zweryfikować, co będzie usunięte (dry-run), sprawdzić, jakie zasoby pozostały, i być przygotowanym na ręczne usunięcie CRD, jeśli chart je wprowadzał. Dzięki temu usuwanie wydania helm uninstall stanie się przewidywalne, a klaster pozostanie czysty i gotowy do ponownej instalacji lub migracji.

Niezależnie od skali zastosowania Helm, znajomość helm uninstall i jej właściwości to umiejętność, która pomaga utrzymać porządek w środowisku Kubernetes. Pamiętaj o odpowiedniej przestrzeni nazw, o użyciu –dry-run do weryfikacji oraz o ewentualnym zachowaniu historii wydania, jeśli zajdzie taka potrzeba. Dzięki temu proces usuwania stanie się częścią bezpiecznej i kontrolowanej administracji klastra Kubernetes, a ty zyskasz pewność, że operacje przebiegają płynnie i bez niepotrzebnych przestojów.