备份极狐GitLab 安装
Tier: 基础版,专业版,旗舰版
Offering: 私有化部署
极狐GitLab 备份通过运行 chart 中 Toolbox pod 内提供的 backup-utility 命令来完成。您还可以通过启用此 chart 的基于 Cron 的备份功能来自动化备份。
在首次运行备份之前,您应确保 Toolbox 已正确配置 以访问对象存储。
请按照以下步骤备份基于 GitLab Helm chart 的安装。
创建备份
-
通过执行以下命令,确保 toolbox pod 正在运行
shellkubectl get pods -lrelease=<release_name>,app=toolbox将 <release_name> 替换为 Helm release 的名称,通常是 gitlab。
-
运行备份工具
shellkubectl exec <Toolbox pod name> -it -- backup-utility -
访问对象存储服务中的 gitlab-backups 存储桶,并确保已添加一个 tarball。它将按照 <backup_ID>_gitlab_backup.tar 格式命名。了解备份 ID的相关信息。
-
此 tarball 是恢复所必需的。
基于 Cron 的备份
Helm chart 创建的 Kubernetes CronJob 会在 jobTemplate 上设置 cluster-autoscaler.kubernetes.io/safe-to-evict: "false" 注解。某些 Kubernetes 环境(例如 GKE Autopilot)不允许设置此注解,因此不会为备份创建 Job Pod。 可以通过将 gitlab.toolbox.backups.cron.safeToEvict 参数设置为 true 来更改此注解,这将允许创建 Job,但存在被驱逐并损坏备份的风险。
您可以在此 chart 中启用基于 Cron 的备份,使其按照 Kubernetes 调度定义的间隔定期执行。
您需要设置以下参数:
- gitlab.toolbox.backups.cron.enabled:设置为 true 以启用基于 Cron 的备份
- gitlab.toolbox.backups.cron.schedule:按照 Kubernetes 调度文档进行设置
- gitlab.toolbox.backups.cron.extraArgs:可选地为 backup-utility 设置额外参数(例如 --skip db 或 --s3tool awscli)
备份工具额外参数
备份工具可以接受一些额外参数。
跳过组件
使用 --skip 参数跳过组件。有效的组件名称可以在从备份中排除特定数据中找到。
每个组件必须有自己的 --skip 参数。例如:
shellkubectl exec <Toolbox pod name> -it -- backup-utility --skip db --skip lfs
仅清理备份
在不创建新备份的情况下运行备份清理。
shellkubectl exec <Toolbox pod name> -it -- backup-utility --cleanup
指定要使用的 S3 工具
backup-utility 命令默认使用 s3cmd 连接到对象存储。 在 s3cmd 不如其他 S3 工具可靠的情况下,您可能希望覆盖此额外参数。
有一个已知问题, 当极狐GitLab 使用 S3 存储桶作为 CI 作业产物存储,并且使用默认的 s3cmd CLI 工具时, 备份作业会因 ERROR: S3 error: 404 (NoSuchKey): The specified key does not exist. 而崩溃。 将 s3cmd 切换为 awscli 可以使备份作业成功运行。 有关更多详细信息,请参阅议题 3338。
要使用的 S3 CLI 工具可以是 s3cmd 或 awscli。
shellkubectl exec <Toolbox pod name> -it -- backup-utility --s3tool awscli
使用服务账号的 IAM 角色(IRSA)
如果 Toolbox pod 使用服务账号的 IAM 角色(IRSA)进行身份验证,而不是使用静态 AWS 凭据,则 s3cmd 会因没有可用的 .s3cfg 文件而以 ERROR: /home/git/.s3cfg: None 错误失败。 awscli 没有此要求,因此请使用 --s3tool awscli 切换到它,并完全跳过 gitlab.toolbox.backups.objectStorage.config 密钥:
yaml1gitlab: 2 toolbox: 3 backups: 4 cron: 5 enabled: true 6 schedule: "@daily" 7 extraArgs: "--s3tool awscli"
要了解有关配置 ServiceAccount 注解的更多信息,请参阅使用 GitLab chart 时的 AWS IAM 角色。
将 MinIO 与 awscli 结合使用
要在使用 awscli 时将 MinIO 用作对象存储,请设置以下参数:
yaml1gitlab: 2 toolbox: 3 extraEnvFrom: 4 AWS_ACCESS_KEY_ID: 5 secretKeyRef: 6 name: <MINIO-SECRET-NAME> 7 key: accesskey 8 AWS_SECRET_ACCESS_KEY: 9 secretKeyRef: 10 name: <MINIO-SECRET-NAME> 11 key: secretkey 12 extraEnv: 13 AWS_DEFAULT_REGION: us-east-1 # MinIO default 14 backups: 15 cron: 16 enabled: true 17 schedule: "@daily" 18 extraArgs: "--s3tool awscli --aws-s3-endpoint-url <MINIO-INGRESS-URL>"
S3 CLI 工具 s5cmd 的支持正在调查中。 请参阅议题 523 以跟踪进展。
使用 awscli 的数据完整性保护
toolbox 中包含的 awscli 工具的新版本默认强制执行数据完整性保护。如果您的对象存储服务不支持此功能,则可以通过以下方式禁用此要求:
yamlextraEnv: AWS_REQUEST_CHECKSUM_CALCULATION: WHEN_REQUIRED
该配置可以是 toolbox pod 的 extraEnv 或全局的 extraEnv。
服务端代码仓库备份
与其在备份归档中存储大型代码仓库备份,不如将代码仓库备份配置为:由托管每个代码仓库的 Gitaly 节点负责创建备份并将其流式传输到对象存储。这有助于减少创建和恢复备份所需的网络资源。
请参阅创建服务端代码仓库备份。
其他参数
要查看完整的可用参数列表,请运行以下命令:
shellkubectl exec <Toolbox pod name> -it -- backup-utility --help
备份密钥
您还需要保存一份 rails 密钥的副本,因为出于安全考虑,这些内容不包含在备份中。我们建议将包含数据库的完整备份与密钥副本分开存放。
-
查找 rails 密钥的对象名称
shellkubectl get secrets | grep rails-secret -
保存一份 rails 密钥的副本
shellkubectl get secrets <rails-secret-name> -o jsonpath="{.data['secrets\.yml']}" | base64 --decode > gitlab-secrets.yaml -
将 gitlab-secrets.yaml 存放在安全的位置。恢复备份时需要用到它。