
简介
自己的gitlab是托管在kubernetes上的,所以想直接使用cronjob对gitlab去定时备份
操作
其实就是直接使用下面的命令备份
kubectl exec -it gitlab-0 gitlab-backup create -n gitlab
默认创建的备份文件在下面的目录
/var/opt/gitlab/backups
所以就需要有一个pv去挂载到这个目录上,在gitlab的yaml文件加上下面两句
            - mountPath: /var/opt/gitlab/backups
              name: backup
    - metadata:
        name: backup
      spec:
        accessModes: ["ReadWriteOnce"]
        resources:
          requests:
            storage: 400Gi
        storageClassName: "managed-nfs-storage"
之后就是创建一个cronjob
编写一个dockerfile
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文件
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点就会自动执行备份的任务
解释一下一些必要的参数
  successfulJobsHistoryLimit: 5
  failedJobsHistoryLimit: 5
这两个表示留下执行成功和失败的job个数
其他的貌似也没有啥可以讲的
欢迎关注我的博客www.bboy.app
Have Fun
