恢复极狐GitLab 安装实例

注意: 如果要恢复从另一个实例获取的备份,则必须在进行备份之前将现有实例迁移到使用对象存储。

建议您将备份还原到创建它的相同版本的极狐GitLab 实例。

GitLab 备份恢复是通过在 chart 中提供的 Task Runner pod 上运行 backup-utility 命令来进行的。

在第一次运行恢复之前,您应该确保访问对象存储,确保 Task Runner 已正确配置

GitLab Helm chart 提供的备份实用程序支持从以下任何位置恢复 tarball:

  1. 默认情况下,实例关联的对象存储服务中的 gitlab-backups bucket。
  2. 一个可以从 pod 访问的公共 URL。
  3. 可以使用 kubectl cp 复制到 Task Runner pod 的本地文件

恢复 secrets

恢复 rails secrets

GitLab chart 希望将 rails secret 作为 Kubernetes Secret 提供,并在 YAML 中提供内容。创建一个包含以下内容的本地文件:

production:
  db_key_base: <your key base value>
  secret_key_base: <your secret key base value>
  otp_key_base: <your otp key base value>
  openid_connect_signing_key: <your openid signing key>
  ci_jwt_signing_key: <your ci jwt signing key>

这些值应替换为备份实例 rails secret 中的匹配值。对于 Omnibus 安装实例,它们可以在 /etc/gitlab/gitlab-secrets.json 文件中找到,对于其它安装类型,您应该有一个包含它们的 secrets.yml 文件。

将 secret 创建为本地 YAML 文件后:

  1. 查找 rails secrets 的对象名称

    kubectl get secrets | grep rails-secret
    
  2. 删除已有的 secret

    kubectl delete secret <rails-secret-name>
    
  3. 使用与旧 secret 相同的名称创建新 secret,并传入您的本地 YAML 文件

    kubectl create secret generic <rails-secret-name> --from-file=secrets.yml=<local-yaml-filepath>
    

重启 pods

为了使用新的 secret,需要重新启动 Webservice、Sidekiq 和 Task Runner pod。重新启动这些 Pod 的最安全方法是运行:

kubectl delete pods -lapp=sidekiq,release=<helm release name>
kubectl delete pods -lapp=webservice,release=<helm release name>
kubectl delete pods -lapp=task-runner,release=<helm release name>

恢复备份文件

恢复极狐GitLab 安装实例是:

  1. 通过部署 chart 确保您有一个正在运行的 GitLab 实例。 通过执行以下命令确保 Task Runner pod 已启用并正在运行

    kubectl get pods -lrelease=RELEASE_NAME,app=task-runner
    
  2. 在上述任何位置准备好 tarball。 确保它以 <timestamp>_<version>_gitlab_backup.tar 格式命名。
  3. 运行备份实用程序以恢复 tarball

    kubectl exec <Task Runner pod name> -it -- backup-utility --restore -t <timestamp>_<version>
    

这里,<timestamp>_<version> 来自存储在 gitlab-backups 存储桶中的 tarball 的名称。 如果要提供公共 URL,请使用以下命令

   kubectl exec <Task Runner pod name> -it -- backup-utility --restore -f <URL>

您可以提供本地路径作为 URL,只要它采用以下格式:file://<path>

  1. 此过程将花费时间,具体取决于 tarball 的大小。
  2. 恢复过程将删除数据库的现有内容,将现有仓库移动到临时位置并提取 tarball 的内容。仓库将被移动到磁盘上的相应位置,其它数据如产物、上传、LFS 等,将被上传到对象存储中的相应存储区。
note在恢复期间,需要将备份 tarball 提取到磁盘。 这意味着 Task Runner pod 应该有必要大小的可用磁盘。 更多细节和配置请查看 Task Runner 文档

恢复 runner 注册令牌

恢复后,包含的 Runner 将无法注册到实例,因为它不再具有正确的注册令牌。

启用 Kubernetes 关联设置

如果恢复的备份不是来自 chart 的现有安装实例,您还需要在恢复后启用某些 Kubernetes 特定功能。

  1. 通过执行以下命令找到您的 Task Runner pod

    kubectl get pods -lrelease=RELEASE_NAME,app=task-runner
    
  2. 运行实例设置脚本以启用必要的功能

    kubectl exec <Task Runner pod name> -it -- /scripts/custom-instance-setup
    

重启 pods

为了使用新的更改,需要重新启动 Webservice 和 Sidekiq pod。 重新启动这些 Pod 的最安全方法是运行:

kubectl delete pods -lapp=sidekiq,release=<helm release name>
kubectl delete pods -lapp=webservice,release=<helm release name>

(可选)重置 root 用户密码

恢复过程不会使用备份中的值更新 gitlab-initial-root-password secret。要以 root 身份登录,请使用备份中包含的原始密码。 如果无法再访问密码,请按照以下步骤重置密码。

  1. 通过执行命令进入到 Webservice pod

    kubectl exec <Webservice pod name> -it -- bash
    
  2. 运行以下命令重置 root 用户的密码。用您选择的密码替换 #{password}

    /srv/gitlab/bin/rails runner "user = User.first; user.password='#{password}'; user.password_confirmation='#{password}'; user.save!"
    

其它信息