老蒋的知识库

  • 首页
  • 文章归档
  • 关于页面

  • 搜索

Linux和K8S中Gitlab定时备份与还原

发表于 2022-10-27 | 分类于 Gitlab | 0 | 阅读次数 39

简介

定时任务保证gitlab能够及时备份


Linux定时备份Gitlab

环境

操作系统: rocky9.0
gitlab-ee:15.4.3

cron定时任务备份

# 安装cron
apt-get upgrade
apt-get install cron
service cron start
# 添加定时任务,每天凌晨4:30 root账户执行 gitlab-rake gitlab:backup:create 进行备份
echo '30 4 * * * root gitlab-rake gitlab:backup:create >> /var/spool/cron/crontabs/root # root 是当前登录账户

K8S定时备份Gitlab

环境

k8s 1.24
gitlab容器镜像: gitlab/gitlab-ee:15.4.3-ee.0
gitlab所属命名空间: gitlab

使用cronjob启动kubectl执行备份命令

原理说明

gitlab备份命令为

gitlab-rake gitlab:backup:create

可以通过启动kubectl容器,控制gitlab pod执行备份命令

kubectl -n gitlab exec gitlab-ee-0 -- gitlab-rake gitlab:backup:create

同步k8s时区

k8s默认时区utc,比北京时间慢8小时,不改的话触发时间就不对。

vim /etc/kubernetes/manifests/kube-controller-manager.yaml

挂载宿主机的时区文件到容器中

...
    volumeMounts:
    - name: localtime       ## 容器挂载时区文件地址
      mountPath: /etc/localtime
      readOnly: true
...
  volumes:
  - name: localtime         ## 宿主机时区文件
    hostPath:
      path: /etc/localtime
...

创建Cronjob

# 创建`secret:kube-config`提供`CronJob`中pod执行`kubectl`
kubectl -n gitlab create secret generic kube-config --from-file=config=/root/.kube/config

# 创建`CronJob`备份任务配置文件
cat <<EOF | sudo tee backup.yaml
apiVersion: batch/v1
kind: CronJob
metadata:
  name: gitlab-backup-cronjob
spec:
  schedule: "30 4 * * *"	# 每天4:30运行备份任务
  successfulJobsHistoryLimit: 0
  failedJobsHistoryLimit: 1
  jobTemplate:
    spec:
      template:
        spec:
          volumes:
          - name: config
            secret:
              secretName: kube-config
          containers:
          - name: gitlab-backup
            image: bitnami/kubectl:1.25.3-debian-11-r4 # kubectl镜像
            volumeMounts:
            - name: config
              mountPath: /kube # 挂载`secret`文件到`/kube`目录下
            command:
            - /bin/sh
            - -c
            # `kubectl`使用`/kube/config`配置文件执行命令,这里不能使用默认配置文件`/root/.kube/config`,因为k8s默认不提供root权限。
            - kubectl --kubeconfig=/kube/config -n gitlab exec gitlab-ee-0 -- gitlab-rake gitlab:backup:create
          restartPolicy: OnFailure
EOF

# 启动`CronJob`
kubectl -n gitlab apply -f backup.yaml

备份还原命令

# 只有一个备份时直接还原
gitlab-rake gitlab:backup:restore
# 还原指定备份
gitlab-rake gitlab:backup:restore BACKUP=1641278530_2022_01_04_10.7.5  # 这个时间戳就是刚刚备份的文件前面的时间戳

还原过程中可能报错,可以无视。
参考资料:https://docs.gitlab.com/ee/raketasks/backup_restore.html#restoring-database-backup-using-omnibus-packages-outputs-warnings

ERROR:  must be owner of extension pg_trgm
ERROR:  must be owner of extension btree_gist
ERROR:  must be owner of extension btree_gist
ERROR:  must be owner of extension pg_trgm

备份定时删除,避免占用过多磁盘空间

编辑配置文件/etc/gitlab/gitlab.rb

gitlab_rails['backup_keep_time'] = 604800 # 单位秒,这里是备份只保留7天
  • 本文作者: jagger
  • 本文链接: /archives/gitlab-ding-shi-bei-fen
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
K8S 1.20+ nfs挂载sc部署,以及错误排查
K8S部署Gitlab
jagger

jagger

66 日志
31 分类
0 标签
Creative Commons
0%
© 2026 jagger
由 Halo 强力驱动