运行 Kubernetes 中 Pod 内的计划任务

Run scheduled task inside Pod in Kubernetes

我的 kubernetes 集群中有一个 influxdb 运行ning 的小实例。
该实例的数据存储在持久存储中。
但我也想 运行 按预定时间间隔从 influx 备份命令。

influxd backup -portable /backuppath

我现在做的是执行到 pod 中,然后手动 运行 它。
有没有办法让我自动执行此操作?

您可以考虑 运行 一个带有 bitnami kubectl 的 CronJob,它将执行备份命令。这与 exec into the pod and run 相同,只是现在您使用 CronJob 将其自动化。

您可以 运行 它作为一个 cronjob 并设置图像以能够连接到数据库,或者您可以将它与您的数据库 pod 放在一起,并将其设置为 运行 cron 图像(即 运行 作为一个 mostly-idle 容器与您的数据库在同一个 pod 中)

CronJob 是去这里的方法。它的行为或多或少像一个 crontab,但对于 Kubernetes。

作为示例,您可以使用这个

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

这将创建一个作业,每天在 08:00 执行 influxd backup -portable /backuppath。当然,您必须相应地对其进行编辑,才能在您的环境中工作。

这是我对这个问题使用的解决方案

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