Run scheduled task inside Pod in Kubernetes

2/12/2022

I have a small instance of influxdb running in my kubernetes cluster.<br> The data of that instance is stored in a persistent storage.<br> But I also want to run the backup command from influx at scheduled interval.<br>

influxd backup -portable /backuppath

What I do now is exec into the pod and run it manually.<br> Is there a way that I can do this automatically?

-- Geert
influxdb
kubernetes

4 Answers

2/12/2022

You can either run it as a cronjob and setup the image to be able to connect to the DB, or you can sidecar it alongside your db pod, and set it to run the cron image (i.e. will run as a mostly-idle container in the same pod as your DB)

-- Blender Fox
Source: StackOverflow

2/14/2022

CronJob is the way to go here. It acts more or less like a crontab, but for Kubernetes.

As an example you could use this

apiVersion: batch/v1
kind: CronJob
metadata:
  name: backup
spec:
  schedule: 0 8 * * *
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: influxdb-backup
            image: influxdb
            imagePullPolicy: IfNotPresent
            command: ["/bin/sh"]
            args:
            - "-c"
            - "influxd backup -portable /backuppath"
          restartPolicy: Never

This will create a Job, everyday at 08:00, executing influxd backup -portable /backuppath. Of course, you have to edit it accordingly, to work on your environment.

-- p10l
Source: StackOverflow

2/16/2022

This is the solution I have used for this question

apiVersion: v1
kind: ConfigMap
metadata:
  name: cm-backupscript
  namespace: influx
data:
  backupscript.sh: | 
    #!/bin/bash
    echo 'getting pod name'
    podName=$(kubectl get pods -n influx  --field-selector=status.phase==Running --output=jsonpath={.items..metadata.name})
    echo $podName
    #echo 'create backup'
    kubectl exec -it $podName -n influx -- /mnt/influxBackupScript/influxbackup.sh
    echo 'done'
---
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: backup-cron
  namespace: influx
spec:
  schedule: "0 2 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          affinity:
            nodeAffinity:
              requiredDuringSchedulingIgnoredDuringExecution:
                nodeSelectorTerms:
                - matchExpressions:
                  - key: kubernetes.io/arch
                    operator: In
                    values:
                    - amd64
          volumes:
          - name: backup-script
            configMap:
              name: cm-backupscript
              defaultMode: 0777
          containers:
          - name: kubectl
            image: bitnami/kubectl:latest
            command:
            - /bin/sh
            - -c
            - /mnt/scripts/backupscript.sh
            volumeMounts:
            - name: backup-script
              mountPath: "/mnt/scripts"
          restartPolicy: Never
-- Geert
Source: StackOverflow

2/12/2022

You can consider running a CronJob with bitnami kubectl which will execute the backup command. This is the same as exec into the pod and run except now you automate it with CronJob.

-- gohm&#39;c
Source: StackOverflow