【问题标题】:pg_dump save backup file in another pod on kubernetespg_dump 将备份文件保存在 kubernetes 上的另一个 pod 中
【发布时间】:2021-11-18 17:35:44
【问题描述】:

我在 kubernetes 中创建了一个 cronjob 来定期备份我的 postgresql 数据库(假设我已经创建了 PGPASS Secret):

apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: postgres-backup-dev
spec:
  # Backup the database every day at 2AM
  schedule: "0 2 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: postgres-backup-dev
            image: postgres:10.4
            command: ["/bin/sh"]
            args: ["-c", 'echo "$PGPASS" > /root/.pgpass && chmod 600 /root/.pgpass && pg_dump -Fc -h <host> -U <user> <db> > /var/backups/backup.dump']
            env:
            - name: PGPASS
              valueFrom:
                secretKeyRef:
                  name: dev-pgpass
                  key: pgpass
            volumeMounts:
            - mountPath: /var/backups
              name: postgres-backup-storage
          restartPolicy: Never
          volumes:
          - name: postgres-backup-storage
            hostPath:
              path: /var/volumes/postgres-backups
              type: DirectoryOrCreate

这可行,但它会将备份文件转储到由 Cronjob 创建的作业的容器中。 我的目标是将这个文件转储到我原始数据库的容器中。我原来的数据库部署:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
  labels:
    app: postgres
spec:
  replicas: 1
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      containers:
      - name: postgres
        image: postgres:10.4
        imagePullPolicy: Always
        resources:
          requests:
            cpu: "1"
            memory: "1Gi"
          limits:
            cpu: "2"
            memory: "2Gi"
        ports:
        - containerPort: 5432
          protocol: TCP
        envFrom:
        - configMapRef:
            name: postgres-config
        volumeMounts:
        - mountPath: /var/lib/postgresql/data
          name: postgredb
      volumes:
      - name: postgredb
        persistentVolumeClaim:
          claimName: postgres-pv-claim

有什么办法可以做到吗?

谢谢

【问题讨论】:

  • 嗨 @f.bele,Marco Caberletti answer your question 的回答是吗?
  • 我在这篇文章https://stackoverflow.com/q/70023193/3142368中找到了满足我需求的解决方案@
  • 谢谢@f.bele,您发送的解决方案与 Marco Caberletti 的回答中提供的不同,所以我有一个问题,您接受了这个 Marco 的回答,您测试了吗?它对你有用吗?

标签: postgresql kubernetes


【解决方案1】:

您需要一个共享卷。

如果 pod 位于同一主机上,您可以使用 hostPath 卷。

如果 pod 位于集群上,您需要不同的存储后端,例如 NFS、EFS(在 AWS 上)、CephFS 或 GlusterFS。

【讨论】:

  • Pod 位于同一主机上。在 kubernetes 文档中,不推荐使用 hostPath,这就是我避免使用它的原因。我无法创建共享卷,因为我没有创建持久卷的权限。我想知道是否有办法在定义它的 pg_dump 中添加另一个 pod 的路径,转储应该保存到哪里?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-27
  • 1970-01-01
  • 2019-05-24
  • 1970-01-01
  • 2020-09-20
  • 2019-02-08
  • 1970-01-01
相关资源
最近更新 更多