Deploy and migrate the new container registry for GitLab.com (epic of epics)
This epic is meant to store the project plans for the various stages of the container registry deployment and migration.
## Context
GitLab is planning a significant upgrade to the container registry. This update will include support for online garbage collection, which will allow GitLab to reduce the cost of storage for the registry by up to 40%. In addition, by moving the storage of container image manifests to Postgres, we'll be able to measure and display how much storage a given project's registry is using, which will help customers better manage their storage costs, including GitLab.com
## Problem to solve
We would like to have all projects/groups object storage usage for the container registry displayed on the usage quotas page. In order to achieve that, we will need to have completed the migration for all GitLab.com projects from using object storage for the image manifests to the new Postgres database.
The problem is that it's a lot of data. At 5+ petabytes, migrating projects to the new registry will be a long process. We will encounter issues that need to be triaged and remediated. These issues will likely impact not just the Package group but the Support, Infrastructure, Delivery, and Datastores teams as well.
This epic houses the various environment level project plans that have been requested.
## Success Metrics
1. 100% of GitLab.com projects migrated to the next generation Container Registry
1. Reduce total storage consumption for the Container Registry on GitLab.com by 40%.
## Rollout Strategy
A gradual migration plan was proposed, discussed, and approved in https://gitlab.com/gitlab-org/container-registry/-/issues/374. We refer to the phases detailed in this plan whenever we mention Phase 1, 2, or 3 in this epic and sub-epics/issues. Please refer to it for additional details.
## DRIs
This major effort requires involvement from multiple teams and departments across GitLab. Therefore, we have defined a list of primary and backup DRIs across those teams (see https://gitlab.com/gitlab-com/Product/-/issues/3431 - internal). These individuals are the point of contact for all related tasks assigned to their teams:
| Group | Primary DRI | Backup DRI | Extra support |
|-------|-------------|------------|---------------|
| ~"group::package" | `@jdrpereira` | `@hswimelar` | `@jaime` |
| ~"group::database" | `@stomlinson` | n/a [notes](https://gitlab.com/gitlab-com/Product/-/issues/3431#note_737233408) | |
| ~"group::distribution" | `@WarheadsSE` | `@balasankarc` | `@pursultani` |
|~"team::Delivery" | `@ggillies` | `@skarbek` | |
| ~"team::Scalability" | `@qmnguyen0711` | `@reprazent` | |
## Timeline
### Phase 2 (Existing repositories)
```mermaid
gantt
dateFormat YYYY-MM-DD
axisFormat %m-%d
section Development
excludes weekends
section Staging
P1 Development Work : done, dev1, 2022-01-25, 2022-03-01
P2 Development Work : done, dev2, after dev1, 10d
P3 Development Work : done, dev3, after dev2, 18d
Testing : done, stg1, 2022-03-10, 2022-04-09
section Production
Readiness review : done, prd0, 2022-03-28, 2022-04-13
Deployment : done, prd1, after prd0, 1d
section Rollout - GitLab Org Testing
Testing : done, r1, after prd1, 2d
section Rollout - free
All Repositories : done, r2, after r1, 30d
section Rollout - premium and ultimate
All Repositories : done, r3, after r2, 42d
section Rollout - VIP
VIP Repositories : done, r4, after r3, 25d
section Rollout - GitLab Org Remaining
Remaining Repositories: r5, after r4, 9d
section Rollout - Exceptional Repositories
Exceptional Repositories : r6, after r3, 47d
section Delete duplicate data from storage
Quiet Period: r7, after r6, 14d
section Delete duplicate data from storage
Delete duplicate data: r8, after r7, 4d
```
<details><summary>Full detail</summary>
Including past tasks:
```mermaid
gantt
dateFormat YYYY-MM-DD
axisFormat %m-%d
section Development
excludes weekends
section Staging
P1 Development Work : done, dev1, 2022-01-25, 2022-03-01
P2 Development Work : done, dev2, after dev1, 10d
P3 Development Work : done, dev3, after dev2, 18d
Testing : done, stg1, 2022-03-10, 2022-04-09
section Production
Readiness review : done, prd0, 2022-03-28, 2022-04-13
Deployment : done, prd1, after prd0, 1d
section Rollout - GitLab Org Testing
Testing : done, r1, after prd1, 2d
section Rollout - free
All Repositories done, : r2, after r1, 30d
section Rollout - premium and ultimate
All Repositories : done, r3, after r2, 30d
section Rollout - VIP
VIP Repositories done, : done, r4, after r3, 30d
section Rollout - GitLab Org Remaining
Remaining Repositories: r5, after r4, 4d
section Delete duplicate data from storage
Delete duplicate data: r6, after r5, 4d
```
</details>
## Updates
- 2022-05-23 👉 https://gitlab.com/groups/gitlab-org/-/epics/5523#note_957122497
epic