Skip to content
Find untracked resources in Kubernetes cluster, garbage collect them.
Branch: master
Clone or download
nlamirault and yanc0 use of go modules for vendoring (#2)
Signed-off-by: Nicolas Lamirault <>
Latest commit 0e043b0 Mar 26, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
docs add documentation Mar 25, 2019
kubernetes describe kubernetes resources structs Mar 25, 2019
outputs rename kuntrak into untrak Mar 25, 2019
utils initial commit Mar 25, 2019
.travis.yml add skip_cleanup travis option Mar 25, 2019
LICENSE Initial commit Mar 24, 2019 typo on Mar 25, 2019
go.mod use of go modules for vendoring (#2) Mar 26, 2019
go.sum use of go modules for vendoring (#2) Mar 26, 2019
main.go replace fmt package by log Mar 25, 2019
untrak.yaml rename kuntrack.yaml to untrak.yaml Mar 25, 2019


Find untracked resources in Kubernetes cluster, garbage collect them.

Build Status


When you use kubectl apply, kustomize build or helm template for injecting manifests through you CI/CD pipeline, kubernetes doesn't know when an object has been deleted from your repo. Your resources are now untracked from your delivery process and they are still managed by your clusters.

Untrak is a tool made for finding and deleting these untracked files on your cluster.

How it works?


Via a simple config file (untrak.yaml), this tool will internally execute commands that output YAMLs and find resources in your clusters that are not in your SCM anymore.

In a GitOps context, this is the tool you always dreamed of.


Download latest version on releases page

  • chmod +x untrak
  • sudo mv untrak /usr/local/bin
  • untrak --help


Put a untrak.yaml file in you SCM.

Note: if you have multiple environments, you would need multiple untrak config files.

# untrak.yaml
## git sources
- cmd: "cat"
  args: ["example/manifests/resources.yaml"]

## cluster manifests
- cmd: "kubectl"
  args: ["get", "cm,deploy,svc,ing", "-o", "yaml", "-n", "api"]

- namespace

To show untracked resources in your cluster (out) simply launch untrak like so:

$ untrak -c untrak.yaml -o text
- api/ConfigMap/django-config-b4k42gm792
- api/ConfigMap/django-config-g55mctg456
- api/Ingress/my-ingress

If you need to garbage collect them, you can change the output format to yaml and pipe the result in kubectl:

$ untrak -c untrak.yaml -o yaml | kubectl delete -f -
configmap "django-config-b4k42gm792" deleted
configmap "django-config-g55mctg456" deleted
ingress.extensions "my-ingress" deleted
You can’t perform that action at this time.