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