【必看:K8S之gitlab的备份和恢复】

背景:通过cronjob的方式实现在k8s中,周期性的进行gitlab的数据备份。

一、数据备份

dockerfile

FROM ubuntu:20.04

# 安装必要的工具和依赖
RUN apt-get update && \
    apt-get install -y curl wget vim unzip

# 安装 kubectl
COPY kubectl /bin
RUN chmod +x /bin/kubectl

gitlab-backup-cronjob.yaml

apiVersion: batch/v1
kind: CronJob
metadata:
  name: gitlab-backup
  namespace: middleware
spec:
  schedule: "0 19 * * *"
  concurrencyPolicy: Allow
  successfulJobsHistoryLimit: 3
  failedJobsHistoryLimit: 1
  jobTemplate:
    spec:
      template:
        spec:
          containers:
            - name: gitlab-backup
              image: registry.sensetime.com/middleware/gitlab-backup:v10.1
              imagePullPolicy: IfNotPresent
              command: ['bash', '-c']
              args:
                - |
                  bash /usr/local/bin/backup_gitlab.sh
              volumeMounts:
                - mountPath: /etc/localtime
                  name: localtime
                - mountPath: /root/.kube/config
                  name: kubeconfig
                - mountPath: /usr/local/bin/backup_gitlab.sh
                  name: backup-script
                  subPath: backup_gitlab.sh
          volumes:
            - hostPath:
                path: /etc/localtime
                type: ''
              name: localtime
            - hostPath:
                path: /root/.kube/config
                type: ''
              name: kubeconfig
            - configMap:
                name: gitlab-backup-config
              name: backup-script
          restartPolicy: OnFailure

这里有个特别重要点!!!如果不明白你的cornjob就不会按照你想要的时间去运行

#UTC 和 CST 的关系
咋们的服务器都同步的是中国标准时间(CST),而容器里面的时间是世界标准时间(UTC),时差:CST 比 UTC 快 8 小时。所以在cronjob中配置的时间要比咋们的北京时间少8小时!!!!!

实际应用:
如果在 UTC 时间 15:00 执行的任务,在中国时间(CST)中,应该是 23:00。

gitlab-backup-config.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: gitlab-backup-config
  namespace: middleware
data:
  backup_gitlab.sh: |
    #!/bin/bash

    # 获取当前日期
    current_date=$(date +"%Y_%m_%d")

    # pod 所在的名称空间
    namespace="middleware"

    # 获取 gitlab 的 pod 名
    pod_name=$(kubectl get pod -n $namespace | grep -v "NAME" | grep gitlab-ce | awk '{print $1}')

    # 执行完整备份
    echo "执行 $current_date 完整备份..."
    kubectl exec $pod_name -n $namespace -- gitlab-rake gitlab:backup:create && echo "$current_date 备份成功"

    #只保留3天的备份数据
    echo "只保留3天的备份数据"
    kubectl exec $pod_name -n $namespace -- find /var/opt/gitlab/backups/ -mtime +3 -exec rm -rf {} \; && echo "已清理3天之前的数据"

二、数据恢复

重新拉起一个新的gitlab的pod进行数据恢复

#确认pod名称
kubectl get pods -n middleware

#将备份文件拷贝到gitlab容器下/var/opt/gitlab/backups下
kubectl cp /root/$backup_file_name $namespace/$pod_name:/var/opt/gitlab/backups

#命令行执行备份恢复命令
kubectl exec -it $pod_name -n middleware gitlab-backup restore force=yes /var/opt/gitlab/backups/1714968034_2024_05_06_13.12.12_gitlab_backup.tar
 
三、备份命令对比总结
特性gitlab-rake gitlab:backup:creategitlab-backup create
执行方式Rake 任务独立命令
功能范围仅支持备份支持备份、恢复、检查、清理
操作复杂度略高(需要理解 Rake 任务)简单直观
高级选项支持过滤备份内容支持保留时间、路径等
备份范围备份核心数据备份核心数据
使用场景适合熟悉 Rake 任务的用户适合大多数用户

GitLab 12.1 及以上版本:支持完整的 gitlab-backup 命令,包括创建、恢复、检查和清理备份。

如果你使用的是 GitLab 12.0 及以下版本,则不支持 gitlab-backup 命令,只能使用 gitlab-rake gitlab:backup:create

镜像包的位置:通过网盘分享的文件:gitlab-backup
链接: https://pan.baidu.com/s/1lgEKPJzxu8bt3NxGKlDkyQ?pwd=2025 提取码: 2025
–来自百度网盘超级会员v3的分享

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值