在Openshift上的应用程序中运行cron作业的最佳实践?

在Openshift上的应用程序中运行cron作业的最佳实践?,cron,openshift,Cron,Openshift,我想运行部署在Openshift中的postgres db的简单备份。运行cron作业的最佳实践是什么?由于systemd在容器上不可用,只能通过黑客攻击来启用,因此我宁愿使用“更干净”的方法。除了cronie或systemd定时器外,还有哪些选项?似乎有人可以在Openshift版本中启用cron,但是Openshift v4.x不再支持此功能,文档中只提到Kubernetes cron Jobs对象。在与db相同的pod中运行cronjob不是一个好主意(运行db的pod可能会被终止/重新启

我想运行部署在Openshift中的postgres db的简单备份。运行cron作业的最佳实践是什么?由于systemd在容器上不可用,只能通过黑客攻击来启用,因此我宁愿使用“更干净”的方法。除了cronie或systemd定时器外,还有哪些选项?似乎有人可以在Openshift版本中启用cron,但是Openshift v4.x不再支持此功能,文档中只提到Kubernetes cron Jobs对象。

在与db相同的pod中运行cronjob不是一个好主意(运行db的pod可能会被终止/重新启动等)

最好的解决方案是在与db相同的项目中定义一个Cronjob,该Job将在OC CLI中使用正式的OpenShift基本映像,并从中执行一个脚本,该脚本将连接到db运行的pod(
OC rsh..
)并执行备份


或者从OCP外部执行一个脚本,该脚本将连接到集群(使用系统帐户),然后执行
ocrsh

在与您的db相同的pod中运行cronjob不是一个好主意(db运行的pod可能会被终止/重新启动等)

最好的解决方案是在与db相同的项目中定义一个Cronjob,该Job将在OC CLI中使用正式的OpenShift基本映像,并从中执行一个脚本,该脚本将连接到db运行的pod(
OC rsh..
)并执行备份

或者从OCP外部执行一个脚本,该脚本将连接到集群(使用系统帐户),然后执行
ocrsh

以下是我使用的:

  • 具有相同映像的专用Pod(确保db转储客户端可用)和PVC用于备份安装
  • 使用备份脚本配置映射
  • 经常运行那个吊舱的作业
以下是一些示例清单:

聚氯乙烯:

厘米:

CronJob:

apiVersion: v1
kind: Template
metadata:
  name: postgres-backup
  namespace: database
objects:
- kind: CronJob
  apiVersion: batch/v1beta1
  metadata:
    name: postgres-backup
    namespace: database
  spec:
    schedule: "0 3 * * *"
    successfulJobsHistoryLimit: 1
    jobTemplate:
      spec:
        template:
          metadata:
            namespace: database
          spec:
            containers:
            - name: postgres-dbbackup
              image: "postgres:11"
              env:
              - name: PGHOST
                value: "${_PGHOST}"
              - name: PGUSER
                value: "${_PGUSER}"
              - name: RETENTION
                value: "${_RETENTION}"
              - name: BACKUPDIR
                value: "${_BACKUPDIR}"
              command: ["/bin/bash", "-c", "/usr/local/bin/psqldump.sh"]
              volumeMounts:
              - mountPath: /usr/local/bin
                name: psqldump-volume
              - mountPath: /backup
                name: backup-volume
            volumes:
              - name: psqldump-volume
                configMap:
                  name: psqldump
                  defaultMode: 0755
              - name: backup-volume
                persistentVolumeClaim:
                  claimName: database-bkp
            restartPolicy: Never
parameters:
  - name: _PGHOST
    value: postgres
  - name: _PGUSER
    value: postgres
  - name: _RETENTION
    value: "30"
  - name: _BACKUPDIR
    value: "/backup"
PGHOST是数据库的pod名称。如果您有备份的专用用户和密码,请相应地导出env vars PGUSER和PGPASS

  • 具有相同映像的专用Pod(确保db转储客户端可用)和PVC用于备份安装
  • 使用备份脚本配置映射
  • 经常运行那个吊舱的作业
以下是一些示例清单:

聚氯乙烯:

厘米:

CronJob:

apiVersion: v1
kind: Template
metadata:
  name: postgres-backup
  namespace: database
objects:
- kind: CronJob
  apiVersion: batch/v1beta1
  metadata:
    name: postgres-backup
    namespace: database
  spec:
    schedule: "0 3 * * *"
    successfulJobsHistoryLimit: 1
    jobTemplate:
      spec:
        template:
          metadata:
            namespace: database
          spec:
            containers:
            - name: postgres-dbbackup
              image: "postgres:11"
              env:
              - name: PGHOST
                value: "${_PGHOST}"
              - name: PGUSER
                value: "${_PGUSER}"
              - name: RETENTION
                value: "${_RETENTION}"
              - name: BACKUPDIR
                value: "${_BACKUPDIR}"
              command: ["/bin/bash", "-c", "/usr/local/bin/psqldump.sh"]
              volumeMounts:
              - mountPath: /usr/local/bin
                name: psqldump-volume
              - mountPath: /backup
                name: backup-volume
            volumes:
              - name: psqldump-volume
                configMap:
                  name: psqldump
                  defaultMode: 0755
              - name: backup-volume
                persistentVolumeClaim:
                  claimName: database-bkp
            restartPolicy: Never
parameters:
  - name: _PGHOST
    value: postgres
  - name: _PGUSER
    value: postgres
  - name: _RETENTION
    value: "30"
  - name: _BACKUPDIR
    value: "/backup"

PGHOST是数据库的pod名称。如果您有备份的专用用户和密码,请相应地导出env vars PGUSER和PGPASS

谢谢@titou10。您是否有安装了oc CLI的OpenShift基本映像的示例?我假设您指的是在cronjob中运行ocrsh命令。谢谢@titou10。您是否有安装了oc CLI的OpenShift基本映像的示例?我假设您指的是从cronjob中运行ocrsh命令。
apiVersion: v1
kind: Template
metadata:
  name: postgres-backup
  namespace: database
objects:
- kind: CronJob
  apiVersion: batch/v1beta1
  metadata:
    name: postgres-backup
    namespace: database
  spec:
    schedule: "0 3 * * *"
    successfulJobsHistoryLimit: 1
    jobTemplate:
      spec:
        template:
          metadata:
            namespace: database
          spec:
            containers:
            - name: postgres-dbbackup
              image: "postgres:11"
              env:
              - name: PGHOST
                value: "${_PGHOST}"
              - name: PGUSER
                value: "${_PGUSER}"
              - name: RETENTION
                value: "${_RETENTION}"
              - name: BACKUPDIR
                value: "${_BACKUPDIR}"
              command: ["/bin/bash", "-c", "/usr/local/bin/psqldump.sh"]
              volumeMounts:
              - mountPath: /usr/local/bin
                name: psqldump-volume
              - mountPath: /backup
                name: backup-volume
            volumes:
              - name: psqldump-volume
                configMap:
                  name: psqldump
                  defaultMode: 0755
              - name: backup-volume
                persistentVolumeClaim:
                  claimName: database-bkp
            restartPolicy: Never
parameters:
  - name: _PGHOST
    value: postgres
  - name: _PGUSER
    value: postgres
  - name: _RETENTION
    value: "30"
  - name: _BACKUPDIR
    value: "/backup"