用于 postgres 数据库备份的 Kubernetes Cron 作业

问题描述

我正在尝试创建这样的 cron 作业:

apiVersion: batch/v1beta1
kind: CronJob
Metadata:
  name: postgres-backup
spec:
  # Backup the database every day at 2AM
  schedule: "*/1 * * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: postgres-backup
            image: postgres:10.4
            command: ["/bin/bash"]
            args: ["-c",'PGPASSWORD="$PGPASS" pg_dump -U postgresadmin -h postgres example > /var/backups/backup-$(date +"%m-%d-%Y-%H-%M").sql']
            env:
            - name: PGPASS
              value: admin123
            volumeMounts:
            - mountPath: /var/backups
              name: postgres-pv-volume
          restartPolicy: Never
          volumes:
          - name: postgres-pv-volume
            hostPath:
            # Ensure the file directory is created.
              path: /var/volumes/postgres-backups
              type: DirectoryOrCreate

当我运行 crone 作业时,创建状态为 created 的 Pod。但是我无法在我的 postgres pod 中看到备份文件。我认为备份文件是在同一个 cronjob pod 中创建的,但如何访问已完成的 pod。

解决方法

就像评论中提到的 mdaniel 一样,您使用的是卷类型 hostPath,这是节点上的路径,所以我想为了让您找到正在创建的文件,您需要登录到该节点并查看节点上的那个路径。

我个人认为您根本不应该尝试将它存储在 pod 中,因为 Job 运行以完成,这意味着当作业完成时您无法检索其中的任何内容。