A Kubernetes pod reaper
This repository has been archived on 2023-11-25. You can view files and clone it, but cannot push or open issues or pull requests.
Find a file
2022-04-20 23:13:51 +00:00
.github/workflows Update codecov/codecov-action action to v3 2022-04-14 17:07:32 +00:00
deployments MVP 2022-04-13 21:00:32 +02:00
reaper Add tests for types 2022-04-14 18:20:52 +02:00
scripts MVP 2022-04-13 21:00:32 +02:00
testdata Update docs 2022-04-13 21:32:45 +02:00
.gitignore Add tests and run them in CI 2022-04-14 16:47:47 +02:00
.golangci.yml MVP 2022-04-13 21:00:32 +02:00
.goreleaser.yaml MVP 2022-04-13 21:00:32 +02:00
.pre-commit-config.yaml Add tests and run them in CI 2022-04-14 16:47:47 +02:00
go.mod Update kubernetes packages to v0.23.6 2022-04-20 23:13:51 +00:00
go.sum Update kubernetes packages to v0.23.6 2022-04-20 23:13:51 +00:00
LICENSE Initial commit 2022-04-13 07:38:40 +02:00
main.go Add tests and run them in CI 2022-04-14 16:47:47 +02:00
README.md Add badges 2022-04-14 18:28:07 +02:00
renovate.json Add renovate.json 2022-04-13 05:38:48 +00:00
Tiltfile MVP 2022-04-13 21:00:32 +02:00

kreaper - Kubernetes Reaper

Go codecov Go Report Card

kreaper is (yet another) Kubernetes pod reaper. It's main purpose is to delete pods matching a certain pod selector after a deadline is reached.

The testdata/ directory contains a Kubernetes manifest example how to deploy kreaper as Job that is automatically cleaned after 30s.

Configuration

kreaper only requires a few config options that are available as CLI flags or as environment variables. For the sake of simplicity environment variables are favored.

Env Flag Purpose Example Default
KREAPER_TARGET -target Target selection in the form of key=value app.kubernetes.io/name=ee8dcc4d ""
KREAPER_TARGET_NAMESPACE -target-namespace Namespace in which pods are watched and deleted my-app default
KREAPER_DRY_RUN -dry-run Skip actual deletion true false
KREAPER_LIFETIME -lifetime Duration after which all pods matching the target are deleted 30s 5m

Kubeconfig

kreaper is meant to be running within a Kubernetes cluster and therefore tries at first to read a in-cluster API config. If it fails to read the in-cluster config it tries to read the default $HOME/.kube/config file. The config file location can be modified either with the KUBECONFIG environment variable or by supplying a -kubeconfig flag.

RBAC

kreaper only needs:

  • list
  • watch
  • deletecollection

permissions for Pods in the KREAPER_TARGET_NAMESPACE. A very basic Role would look like so:

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: kreaper
rules:
  - verbs:
      - list
      - watch
      - deletecollection
    apiGroups:
      - ""
    resources:
      - pods

alternatively a RoleBinding or a ClusterRoleBinding to the edit ClusterRole might be a little bit overkill but therefore also possible.