我们有一个openshift环境,每天我们需要将数据从某些持久性卷源备份到目标。我正在考虑为此目的专门设置一个容器,并将入口点指定为执行此复制操作的bash脚本。如何确保该脚本每天仅执行一次?我可以提到脚本中的睡眠,但这不是一个好方法,并且如果POD在这之间自动重新启动,那将是有效的。请让我知道正确的做法吗?我正在使用OpenShift Web控制台:v3.11.98
我可以使用睡眠,但不确定如何解决Pod重新启动的情况
#!/bin/bash
if [ ! -e /source/]
then
echo source /source is not mounted in the container
exit 20
fi
if [ ! -e /destination ]
then
echo source /destination is not mounted in the container
exit 20
fi
today1=`date +"%Y-%m-%d"`
mkdir /destination/${today1}
cp -r /source/* /destination/${today1}
我如何每天运行此脚本以将文件从一个持久性卷备份到另一个。除了在docker中运行之外,还有其他更好的方法吗?
答案 0 :(得分:0)
如评论中所述,Kubernetes CronJob应该很容易解决此问题。此资源在OpenShift上也可用。
创建需要备份的容器。在这种情况下,/backup-script.sh
是执行备份的脚本。
以下YAML文件应在OpenShift中创建一个cronjob:
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: backup-job
spec:
schedule: "* 23 * * *"
jobTemplate:
spec:
template:
spec:
containers:
- name: backup-container-name
image: PATH/TO/YOUR/BACKUP-CONTAINER
command: ["/bin/sh", "/backup-script.sh"]
restartPolicy: OnFailure
spec.schedule
指定容器启动的频率。它遵循以下cron格式:https://en.wikipedia.org/wiki/Cron
注意::您应仔细检查进行备份所需的权限。如果它需要特权限制,那么您还必须添加具有指定特权的serviceAccount的spec.jobTemplate.spec.serviceAccount
。
此资源的完整YAML参考可以在这里找到:https://docs.openshift.com/container-platform/3.11/rest_api/apis-batch/v2alpha1.CronJob.html