Particle field around black hole with icon of a rocket ship launching

Part 9: Project Cleanup, Kubernetes Starter

Written August 23rd, 2024 by Nathan Frank

Particle field around black hole with icon of a trash can

Photo source by BoliviaInteligente on Unsplash

Recap

This article picks up from the eighth article: Full Project Setup in the Kubernetes Starter series.

Full setup hands on

Let's cleanup the project now that we are done. As we use a combination of kubernetes and helm we don't want to just delete the namespaces and call it done.

Removing namespaces directly while using Helm will lead to dangling resources that can't be deleted and likely a cluster that can't have these namespaces reused.

Follow these instructions to prevent having to find and cleanup finalizing resources.

Uninstall the environments first

If you've run the helm environments deploy-with-helm.sh installs:

  1. Run uninstall-with-helm.sh

  2. Check the status with status-with-helm.sh, multiple times if needed until resources have been deleted.

Uninstall the main instance and shared elements

  1. Run the uninstall.sh helper script

    1. Check the status by running the status.sh helper script

    2. See numerous entries like No resources found in sample-vault namespace

  2. Delete the PVC (Persistent Volume Claim)

    • In our case deleting this is fine, but in production this could delete the storage with other secrets in it.

    • Run kubectl delete pvc data-sample-vault-0 -n sample-vault

    • Verify the PV is removed with status.sh helper script

  3. Delete the last remaining namespace

    • Run kubectl delete ns sample-vault

      This step is manual as the PVC removal was manual as well.

If you've deleted a namespace that contained resources managed by helm

This can sometimes lead to issues where Helm can not be uninstalled, but there's dangling resources that need to be removed.

  1. Run this to find the non finalized resources:

    1kubectl api-resources --verbs=list --namespaced -o name | xargs -n 1 kubectl get --show-kind --ignore-not-found -n sample

    where sample is the namespace in question.

  2. Delete each one with the following:

    1kubectl patch -n sample vaultstaticsecret.secrets.hashicorp.com vault-kv-app -p '{"metadata":{"finalizers":null}}' --type=merge

    where vaultstaticsecret.secrets.hashicorp.com is a type of object and vault-kv-app is the name of the object that isn't getting deleted.

Wrap up

We've got an understanding on how to clean up the cluster we've been using along the way.

Moving along

Thanks for sticking with us through this exploration of modern software development and deployment. If you found any of this series helpful consider giving a clap, responding with comments, bookmarking or following me as an author.

Return to the Kubernetes starter overview.