gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 00:56:01 26 4
gpt4 key购买 nike

我想对部署在 Openshift 中的 postgres 数据库运行一个简单的备份。运行 cron 作业的最佳实践是什么?由于 systemd 在容器上不可用并且只能通过 hack 启用,我宁愿使用“更清洁”的方法。除了 cronie 或 systemd 计时器单元,还有哪些选项?似乎可以在 earlier 中启用 cron Openshift 版本,但 Openshift v4.x 不再支持此功能,文档仅提及 Kubernetes Cron Jobs 对象。

最佳答案

这是我使用的:

  • 具有相同镜像的专用 Pod(确保 db dump 客户端可用)和用于备份的 PVC 挂载
  • 带有备份脚本的 ConfigMap
  • 经常运行该 pod 的 Cronjob

以下是一些示例 list :

PVC:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: database-bkp
namespace: database
annotations:
volume.beta.kubernetes.io/storage-class: "storage-class-name"
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Gi

CM:

apiVersion: v1
kind: ConfigMap
metadata:
name: psqldump
namespace: database
labels:
job-name: db-backup
data:
psqldump.sh: |
#!/bin/bash
DBS=$(psql -xl |awk /^Name/'{print $NF}')
for DB in ${DBS}; do
SCHEMAS=$(psql -d ${DB} -xc "\dn" |awk /^Name/'{print $NF}')
for SCHEMA in ${SCHEMAS}; do
echo "Dumping database '${DB}' from Schema '${SCHEMA}' into ${BACKUPDIR}/${PGHOST}_${SCHEMA}_${DB}_${ENVMNT}_$(date -I).sql"
pg_dump -n "${SCHEMA}" ${DB} > ${BACKUPDIR}/${PGHOST}_${SCHEMA}_${DB}_${ENVMNT}_$(date -I).sql
done
done
echo "Deleting dumps older than ${RETENTION} days"
find ${BACKUPDIR} -name "*.sql" -mtime +${RETENTION} -exec rm -rf {} \;

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 名称。如果您有专门的备份用户和密码,请相应地导出环境变量 PGUSER 和 PGPASS

关于cron - 在 Openshift 上的应用程序中运行 cron 作业的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63140239/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com