简介
定时任务保证gitlab能够及时备份
Linux定时备份Gitlab
环境
操作系统: rocky9.0
gitlab-ee:15.4.3
cron定时任务备份
# 安装cron
apt-get upgrade
apt-get install cron
service cron start
# 添加定时任务,每天凌晨4:30 root账户执行 gitlab-rake gitlab:backup:create 进行备份
echo '30 4 * * * root gitlab-rake gitlab:backup:create >> /var/spool/cron/crontabs/root # root 是当前登录账户
K8S定时备份Gitlab
环境
k8s 1.24
gitlab容器镜像: gitlab/gitlab-ee:15.4.3-ee.0
gitlab所属命名空间: gitlab
使用cronjob启动kubectl执行备份命令
原理说明
gitlab备份命令为
gitlab-rake gitlab:backup:create
可以通过启动kubectl容器,控制gitlab pod执行备份命令
kubectl -n gitlab exec gitlab-ee-0 -- gitlab-rake gitlab:backup:create
同步k8s时区
k8s默认时区utc,比北京时间慢8小时,不改的话触发时间就不对。
vim /etc/kubernetes/manifests/kube-controller-manager.yaml
挂载宿主机的时区文件到容器中
...
volumeMounts:
- name: localtime ## 容器挂载时区文件地址
mountPath: /etc/localtime
readOnly: true
...
volumes:
- name: localtime ## 宿主机时区文件
hostPath:
path: /etc/localtime
...
创建Cronjob
# 创建`secret:kube-config`提供`CronJob`中pod执行`kubectl`
kubectl -n gitlab create secret generic kube-config --from-file=config=/root/.kube/config
# 创建`CronJob`备份任务配置文件
cat <<EOF | sudo tee backup.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
name: gitlab-backup-cronjob
spec:
schedule: "30 4 * * *" # 每天4:30运行备份任务
successfulJobsHistoryLimit: 0
failedJobsHistoryLimit: 1
jobTemplate:
spec:
template:
spec:
volumes:
- name: config
secret:
secretName: kube-config
containers:
- name: gitlab-backup
image: bitnami/kubectl:1.25.3-debian-11-r4 # kubectl镜像
volumeMounts:
- name: config
mountPath: /kube # 挂载`secret`文件到`/kube`目录下
command:
- /bin/sh
- -c
# `kubectl`使用`/kube/config`配置文件执行命令,这里不能使用默认配置文件`/root/.kube/config`,因为k8s默认不提供root权限。
- kubectl --kubeconfig=/kube/config -n gitlab exec gitlab-ee-0 -- gitlab-rake gitlab:backup:create
restartPolicy: OnFailure
EOF
# 启动`CronJob`
kubectl -n gitlab apply -f backup.yaml
备份还原命令
# 只有一个备份时直接还原
gitlab-rake gitlab:backup:restore
# 还原指定备份
gitlab-rake gitlab:backup:restore BACKUP=1641278530_2022_01_04_10.7.5 # 这个时间戳就是刚刚备份的文件前面的时间戳
还原过程中可能报错,可以无视。
参考资料:https://docs.gitlab.com/ee/raketasks/backup_restore.html#restoring-database-backup-using-omnibus-packages-outputs-warnings
ERROR: must be owner of extension pg_trgm
ERROR: must be owner of extension btree_gist
ERROR: must be owner of extension btree_gist
ERROR: must be owner of extension pg_trgm
备份定时删除,避免占用过多磁盘空间
编辑配置文件/etc/gitlab/gitlab.rb
gitlab_rails['backup_keep_time'] = 604800 # 单位秒,这里是备份只保留7天