在Openshift上的应用程序中运行cron作业的最佳实践?
我想运行部署在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(在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可能会被终止/重新启
OC rsh..
)并执行备份
或者从OCP外部执行一个脚本,该脚本将连接到集群(使用系统帐户),然后执行
ocrsh
在与您的db相同的pod中运行cronjob不是一个好主意(db运行的pod可能会被终止/重新启动等)
最好的解决方案是在与db相同的项目中定义一个Cronjob,该Job将在OC CLI中使用正式的OpenShift基本映像,并从中执行一个脚本,该脚本将连接到db运行的pod(OC rsh..
)并执行备份
或者从OCP外部执行一个脚本,该脚本将连接到集群(使用系统帐户),然后执行ocrsh
以下是我使用的:
- 具有相同映像的专用Pod(确保db转储客户端可用)和PVC用于备份安装
- 使用备份脚本配置映射
- 经常运行那个吊舱的作业
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用于备份安装
- 使用备份脚本配置映射
- 经常运行那个吊舱的作业
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"