paint-brush
Kubernetes Explained Simply: Cleaning Up After Yourself [Part 10]by@jameshunt
308 reads
308 reads

Kubernetes Explained Simply: Cleaning Up After Yourself [Part 10]

by James HuntFebruary 5th, 2021
Read on Terminal Reader
Read this story w/o Javascript
tldt arrow

Too Long; Didn't Read

If there's one thing that Kubernetes makes easy, it's creating resources – pods, deployments, volumes – before long you'll have tons of them lying around.

Company Mentioned

Mention Thumbnail
featured image - Kubernetes Explained Simply: Cleaning Up After Yourself [Part 10]
James Hunt HackerNoon profile picture

If there's one thing that Kubernetes makes easy, it's creating resources – pods, deployments, volumes – before long you'll have tons of them lying around.

Eventually, you'll want to tear some of them down, to free up CPU, disk, and RAM for your next wild experiment.

This happens to us all the time in our research clusters, and we've picked up a few tricks:

kubectl delete -f mad-science.yml

If you've been dutifully recording your resource definitions in a YAML file, and just kept 

kubectl apply
-ing it, you're in luck! The 
kubectl delete
command also understands the 
-f
 flag, and will remove every resource defined.

→ kubectl apply -f shield.yml
# ... time passes ...

→ kubectl delete -f shield.yml
# clean as a whistle!

This also works if you keep your resources in their own files, inside of a single directory that you apply and delete:

kubectl apply -f experiment-42.d/
kubectl delete -f experiment-42.d/

Another trick we've gotten a ton of value out of is using namespaces. If you put each and every experiment, or logical group of resources together under a unique namespace, you can use Kubernetes resource dependency system to your advantage:

kubectl delete ns quantum-crypto-coin

All namespaces resources get deleted when you delete the owning namespace, which is a pretty handy way of tearing down things like pods, services, namespaces, etc. If you're not clear what is and is not namespaced, you can run the 

api-resources
 command to find out:

kubectl api-resources --namespaced
kubectl api-resources --namespaced=false

Namespaces bring more value to the table than just cleanup, but being able to wipe an experiment or work-in-progress with minimal effort is a definite boon.

Also seen here.