This guide will help you migrate from a package-based GitLab installation to the Helm chart.
Before the migration, a few prerequisites must be met:
- The package-based GitLab instance must be up and running. Run
gitlab-ctl statusand confirm no services report a
- It is a good practice to verify the integrity of Git repositories prior to the migration.
- A Helm charts based deployment running the same GitLab version as the package-based installation is required.
- You need to set up the object storage which the Helm chart based deployment will use. For production use, we recommend you use an external object storage and have the login credentials to access it ready. If you are using the built-in MinIO service, read the docs on how to grab the login credentials from it.
Migrate any existing files (uploads, artifacts, LFS objects) from the package-based installation to object storage:
/etc/gitlab/gitlab.rbfile and configure object storage for:
This must be the same object storage service that the Helm charts based deployment is connected to.
Run reconfigure to apply the changes:
sudo gitlab-ctl reconfigure
Migrate existing artifacts to object storage:
sudo gitlab-rake gitlab:artifacts:migrate
Migrate existing LFS objects to object storage:
sudo gitlab-rake gitlab:lfs:migrate
Migrate existing Packages to object storage:
Migrate existing uploads to object storage:
sudo gitlab-rake gitlab:uploads:migrate:all
- Visit the package-based GitLab instance and make sure the uploads are available. For example check if user, group and project avatars are rendered fine, image and other files added to issues load correctly, etc.
Create a backup tarball and exclude the already migrated uploads:
sudo gitlab-rake gitlab:backup:create SKIP=artifacts,lfs,packages,uploads
The backup file will be stored under
/var/opt/gitlab/backups, unless you explicitly changed it.
Restore from the package-based installation
to the Helm chart, starting with the secrets. You will need to migrate the
/etc/gitlab/gitlab-secrets.jsonto the YAML file that will be used by Helm.
Restart all pods to make sure changes are applied:
kubectl delete pods -lrelease=<helm release name>
- Visit the Helm-based deployment and confirm projects, groups, users, issues etc. that existed in the package-based installation are restored. Also, verify if the uploaded files (avatars, files uploaded to issues, etc.) are loaded fine.