kubernetes定时备份gitlab

简介

自己的gitlab是托管在kubernetes上的,所以想直接使用cronjob对gitlab去定时备份

操作

其实就是直接使用下面的命令备份

kubectl exec -it gitlab-0 gitlab-backup create -n gitlab

默认创建的备份文件在下面的目录

/var/opt/gitlab/backups

所以就需要有一个pv去挂载到这个目录上,在gitlab的yaml文件加上下面两句

1
2
- mountPath: /var/opt/gitlab/backups
name: backup
1
2
3
4
5
6
7
8
- metadata:
name: backup
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 400Gi
storageClassName: "managed-nfs-storage"

之后就是创建一个cronjob

编写一个dockerfile

1
2
3
FROM centos:7
RUN mkdir /root/.kube/
COPY kubectl /usr/local/bin

之后编译镜像

docker build . -t registry.bboysoul.cn/kubectl:v1.21.0

之后推送镜像

docker push registry.bboysoul.cn/kubectl:v1.21.0

接着创建一个secret来存储kube config

kubectl create secret generic kube-config --from-file ~/.kube/config -n cronjob

之后编写cronjob yaml文件

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
29
30
31
apiVersion: batch/v1
kind: CronJob
metadata:
name: gitlab-backup
namespace: cronjob
spec:
schedule: "0 3 * * *"
successfulJobsHistoryLimit: 5
failedJobsHistoryLimit: 5
jobTemplate:
spec:
template:
spec:
hostAliases:
- ip: "10.10.100.10"
hostnames:
- "k8s.bboysoul.cn"
containers:
- name: gitlab-backup
image: registry.bboysoul.cn/kubectl:v1.21.0
imagePullPolicy: IfNotPresent
command: ['kubectl','exec','-it','gitlab-0','gitlab-backup','create','-n','gitlab']
volumeMounts:
- name: kube-config
mountPath: "/root/.kube/"
restartPolicy: OnFailure
volumes:
- name: kube-config
secret:
secretName: kube-config

apply

kubectl apply -f gitlab-backup-cronjob.yaml

这样不出问题每天早上3点就会自动执行备份的任务

解释一下一些必要的参数

1
2
successfulJobsHistoryLimit: 5
failedJobsHistoryLimit: 5

这两个表示留下执行成功和失败的job个数

其他的貌似也没有啥可以讲的

欢迎关注我的博客www.bboy.app

Have Fun

欢迎关注我的其它发布渠道