简介
自己的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