Gitlab Helm安装迁移到Omnibus

环境

版本:13.12.5
helm 使用 minio,omnibus 新建 minio 最新版,删除 helm 种的 minio

备份

  1. 备份 gitlab 数据
1
kubectl exec <task-runner pod name> -i /bin/bash backup-utility
  1. 备份 gitlab 密钥(ci 变量,runner token 均用这个加密)
    1. 查找密钥名称
1
kubectl get secrets | grep rails-secret
  1. 保存为 yaml 文件
1
kubectl get secrets <rails-secret-name> -o jsonpath="{.data['secrets\.yml']}" | base64 --decode > secrets.yaml
  1. 下载备份文件

Omnibus 实例启动

  1. 根据 helm 安装版本启动 docker 镜像,版本必须一致,迁移完再考虑升级最新版
1
2
3
4
5
6
7
8
9
10
11
export GITLAB_HOME=$HOME/gitlab

sudo docker run --detach \
--hostname gitlab.example.com \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab \
--restart always \
--volume $GITLAB_HOME/config:/etc/gitlab \
--volume $GITLAB_HOME/logs:/var/log/gitlab \
--volume $GITLAB_HOME/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest

恢复

以下 gitlab 均表示 omnibus 实例
恢复之前需要先启动一遍

密钥恢复

  1. 先恢复密钥文件到 gitlab 中
  2. 使用 yaml 转 json 工具 https://json.im/json2/yaml2json.html
  3. 复制 json 到 /etc/gitlab/gitlab-secrets.json文件 gitlab_rails节点下
1
2
3
4
5
6
7
8
"gitlab_rails": {
"secret_key_base": "",
"db_key_base": "",
"otp_key_base": "",
"encrypted_settings_key_base": "",
"openid_connect_signing_key": "",
"ci_jwt_signing_key": ""
},

minio 配置

  1. 编辑 gitlab.rb 配置文件
1
vim /etc/gitlab/gitlab.rb
  1. 启用 object_store 配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
gitlab_rails['object_store']['enabled'] = true
gitlab_rails['object_store']['connection'] = {
'provider' => 'AWS',
'region' => 'eu-west-1',
'aws_access_key_id' => 'access_key_id',
'aws_secret_access_key' => 'secret_access_key',
'endpoint' => 'minio地址',
'path_style' => true
}
gitlab_rails['object_store']['storage_options'] = {}
gitlab_rails['object_store']['proxy_download'] = false
gitlab_rails['object_store']['objects']['artifacts']['bucket'] = 'gitlab-artifacts'
gitlab_rails['object_store']['objects']['external_diffs']['bucket'] = 'gitlab-external-diffs'
gitlab_rails['object_store']['objects']['lfs']['bucket'] = 'gitlab-lfs-objects'
gitlab_rails['object_store']['objects']['uploads']['bucket'] = 'gitlab-uploads'
gitlab_rails['object_store']['objects']['packages']['bucket'] = 'gitlab-packages'
gitlab_rails['object_store']['objects']['dependency_proxy']['bucket'] = 'gitlab-dependency-proxy'
gitlab_rails['object_store']['objects']['terraform_state']['bucket'] = 'gitlab-terraform-state'
  1. 重新配置,重启
1
2
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart

数据文件恢复

  1. 复制备份文件到 omnibus 实例,data 目录中 backups 文件夹,容器中目录是/var/opt/gitlab/backups,本地目录对应 $GITLAB_HOME/data/backups
  2. 停止 gitlab 相关服务
1
2
3
4
sudo gitlab-ctl stop puma
sudo gitlab-ctl stop sidekiq
# Verify
sudo gitlab-ctl status
  1. 恢复 gitlab 备份,根据时间戳
1
sudo gitlab-backup restore BACKUP=11493107454_2018_04_25_10.6.4-ce
  1. 重新配置,重启,检查 gitlab
1
2
3
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
sudo gitlab-rake gitlab:check SANITIZE=true