Helm安装的gitlab备份恢复实践
目录
环境
一套现有且正在使用的gitlab,版本:14.8.4,helm repo版本:5.8.4
备份
helm部署的gitlab的备份方式与传统二进制的方式略有不同。
通过gitlab-toolbox容器来进行备份,操作如下:
|
|
访问minio,查看gitlab-backups这个bucket,下面生成了一个文件

恢复
同样通过gitlab-toolbox进行恢复,命令如下:
|
|
恢复完成后,可进入web,可以使用备份的账号密码登录进入,通常会碰到这些问题,例如:
-
/admin/runners页面不可访问,也就是配置runner的主配置页面,还有迁移过来后,某些项目的CICD流水线详情进不去,返回页面提示500,通常是因为备份时,gitlab刚刚好有人在运行流水线,将部分时效性的key-value写入了数据库,被我们备份过来了,现在这些数据成了脏数据,影响了我们恢复的数据的正常使用,解决办法如下:
进入pgsql控制台:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21# 进入toolbox容器 kubectl exec -it <toolbox-containerID> bash # 14.1以及之前版本,进入控制台,14.2执行该命令可以获取用户密码,14.2需要输入密码 gitlab-rails dbconsole # 14.2以及之后版本,进入控制台 gitlab-rails dbconsole --database main # 执行sql SELECT * FROM public."ci_group_variables"; SELECT * FROM public."ci_variables"; DELETE FROM ci_group_variables; DELETE FROM ci_variables; UPDATE projects SET runners_token = null, runners_token_encrypted = null; UPDATE namespaces SET runners_token = null, runners_token_encrypted = null; UPDATE application_settings SET runners_registration_token_encrypted = null; UPDATE application_settings SET encrypted_ci_jwt_signing_key = null; UPDATE ci_runners SET token = null, token_encrypted = null; UPDATE ci_builds SET token = null, token_encrypted = null; TRUNCATE web_hooks CASCADE;此时
/admin/runners页面恢复。 -
runner全部离线,或者runner的pod无法running,通常是因为备份恢复后,重新生成了runner注册码,老的注册码失效了,恢复操作如下:
1 2 3 4 5 6 7 8 9# 1. admin/runners页面上找到新的共享runner令牌。 # 2. 查找存储在 Kubernetes 中的现有 runner 令牌 Secret 的名称. kubectl get secrets | grep gitlab-runner-secret # 3. 删除现有的secret kubectl delete secret <runner-secret-name> # 4. 使用两个密钥(runner-registration-token使用您的共享令牌和一个空的runner-token) 创建新密钥 kubectl create secret generic <runner-secret-name> --from-literal=runner-registration-token=<new-shared-runner-token> --from-literal=runner-token="" # 5. 删除pod kubectl delete pod gitlab-gitlab-runner
CloudNativeQingFeng