Skip to content

Latest commit

 

History

History
95 lines (80 loc) · 2.26 KB

05-cronjob-podcleaner.md

File metadata and controls

95 lines (80 loc) · 2.26 KB

Kubernetes: Pod Cleaner

Cleaning all(any) Pods older than *n days

Cleaning Pod is a pretty simple job by running the command kubectl delete pod --field-selector=status.phase==Succeeded but when the kubernetes cluster size is big and there are too many contributors, even deleting needs engineering!

Pod Cleaner

A very simple utility to delete pods. Its designed as a cron job

Example

Delete all Succeeded or Failed pods @ 11:00 am everyday

apiVersion: batch/v1
kind: CronJob
metadata:
  name: podcleaner
  namespace: default
  labels:
    app: podcleaner
spec:
  schedule: "0 11 * * *"
  failedJobsHistoryLimit: 5
  successfulJobsHistoryLimit: 10
  jobTemplate:
    spec:
      template:
        spec:
          restartPolicy: OnFailure
          containers:
          - name: podcleaner
            imagePullPolicy: IfNotPresent
            image: buntha/podcleaner:0.2
            env:
              - name: MAX_DAYS
                value: "2"
              - name: POD_STATUS
                value: "Succeeded, Failed"
              - name: K8S_CONFIG
                value: "incluster"
              - name: NAMESPACE
                value: "default"
Parameters
  • MAX_DAYS : Number of Days since the pod state
  • POD_STATUS: Succeeded, Failed, Running
  • NAMESPACE: Pass the desired namespace or all
  • K8S_CONFIG: incluster or anything

Reference

This tiny project is fully inspired by https://github.com/dignajar/clean-pods but due to the kubernetes upgrade, the project is no more working, so I needed to change and create a new library.

Service account for Kubernetes

Service account for the namespace demo with enoght permissions to list and delete pods.

Manifest service-account.yaml

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: demo-user
  namespace: demo

---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: demo-user-role
  namespace: demo
rules:
- apiGroups: [""]
  resources: ["pods","pods/exec","pods/log"]
  verbs: ["*"]

---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: demo-user
  namespace: demo
subjects:
- kind: ServiceAccount
  name: demo-user
  namespace: demo
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: demo-user-role