前言
Gitlab目前还不支持自定备份配置,当我们使用传统的apt、yum等方式安装Gitlab后,一般都是通过shell脚本+crontab
来自动备份了。但是当Gitlab容器化以后这种传统的方式就不太适合了。这里记录一下通过Kubernetes原生的CronJob
来自动备份。
开始之前
在开始之前需要有一套Kubernetes集群
创建ConfigMap
创建好集群后,可以将kubeconfig文件写入到 ConfigMap 中,默认kubeconfig生成在$HOME/.kube/config
。 我这里HOME目录默认就是/root/。下面开始创建ConfigMap。
1 | $ kubectl create configmap kubeconfig \ |
创建CronJob
上面之所以要先创建ConfigMap就是因为这里需要引用。否则在POD中无法执行kubectl命令的。下面再来创建CronJob。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: gitlab-backup-schedule
spec:
schedule: "0 1 * * *"
successfulJobsHistoryLimit: 0
failedJobsHistoryLimit: 1
jobTemplate:
spec:
template:
spec:
volumes:
- name: config
configMap:
name: kubeconfig
containers:
- name: gitlab-backup
image: lachlanevenson/k8s-kubectl:v1.10.11
volumeMounts:
- name: config
mountPath: /etc/kubeconfig
command:
- /bin/sh
- -c
- pod_name=$(kubectl get pods -l app=git-gitlab-ce -o jsonpath='{.items[*].metadata.name}' --kubeconfig=/etc/kubeconfig/config);
kubectl get po/$pod_name --kubeconfig=/etc/kubeconfig/config;
kubectl --kubeconfig=/etc/kubeconfig/config exec $pod_name -- gitlab-rake gitlab:backup:create
restartPolicy: OnFailure
这里设置了每天晚上1点开始备份,需要注意的是这里获取pod_name变量,是根据kubectl命令通过标签app=git-gitlab-ce
来过滤的,这里需要根据实际的情况来。
最后
执行完上面的Job后,当达到定时的时间就会在Gitlab的备份目录中查看到备份的文件,默认Gitlab备份目录是在/var/opt/gitlab/backups
。