用于次要站点的容器镜像库
您可以在您的次要 Geo 站点上设置一个容器镜像库,以镜像主要 Geo 站点上的镜像。
支持的容器镜像库
Geo 支持以下类型的容器镜像库:
支持的镜像格式
Geo 支持以下容器镜像格式:
此外,Geo 还支持 BuildKit 缓存镜像。
支持的存储
Docker
有关受支持的镜像库存储驱动程序的更多信息,请参阅 Docker 镜像库存储驱动程序。
阅读部署 Registry 时的负载均衡注意事项,以及如何为极狐GitLab 集成的容器镜像库设置存储驱动。
支持 OCI 产物的镜像库
以下镜像库支持 OCI 产物:
- CNCF Distribution - local/offline verification
- Azure Container Registry (ACR)
- Amazon Elastic Container Registry (ECR)
- Google Artifact Registry (GAR)
- GitHub Packages container registry (GHCR)
- Bundle Bar
获取更多信息,查看 OCI Distribution Specification。
配置容器镜像库复制
您可以启用与存储无关的复制,以便将其用于云或本地存储。每当将新镜像推送到主要站点时,每个次要站点都会将其拉到自己的容器镜像库中。
要配置容器镜像库复制:
- 配置主要站点。
- 配置次要站点。
- 验证容器镜像库复制。
配置主要站点
在执行后续步骤之前,请确保您已设置容器镜像库,并在主要站点上工作。
为了能够复制新的容器镜像,容器镜像库必须针对每次推送,向主要站点发送通知事件。容器镜像库和主要站点上的 Web 节点之间共享的令牌,用于使通信更加安全。
-
SSH 进入您的极狐GitLab 主服务器并以 root 身份登录(对于 HA,只需要一个 Registry 节点):
sudo -i
-
编辑
/etc/gitlab/gitlab.rb
:registry['notifications'] = [ { 'name' => 'geo_event', 'url' => 'https://<example.com>/api/v4/container_registry_event/events', 'timeout' => '500ms', 'threshold' => 5, 'backoff' => '1s', 'headers' => { 'Authorization' => ['<replace_with_a_secret_token>'] } } ]
将<example.com>
替换为主要站点的/etc/gitlab/gitlab.rb
文件中定义的external_url
,并将<replace_with_a_secret_token>
替换为以字母开头的区分大小写的字母数字字符串。您可以使用< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c 32 | sed "s/^[0-9]*//"; echo
。如果您使用外部镜像库(不是与极狐GitLab 集成的镜像库),您必须自己将这些设置添加到其配置中。在这种情况下,您只需在/etc/gitlab/gitlab.rb
文件的registry.notification_secret
部分中指定通知密码。 -
仅适用于 HA。在每个 Web 节点上编辑
/etc/gitlab/gitlab.rb
:registry['notification_secret'] = '<replace_with_a_secret_token_generated_above>'
-
重新配置您刚刚更新的每个节点:
gitlab-ctl reconfigure
配置次要站点
在执行后续步骤之前,请确保您已设置容器镜像库并在次要站点上工作。
应在您希望看到复制的容器镜像的每个次要站点上执行以下步骤。
因为我们需要允许次要站点与主要站点容器镜像库进行安全通信,所以我们需要为所有站点提供一个密钥对。次要站点使用此密钥生成一个短期 JWT,该 JWT 只能拉取以访问主要站点容器镜像库。
对于次要站点上的每个应用程序和 Sidekiq 节点:
-
SSH 进入节点并以
root
用户身份登录:sudo -i
-
将
/var/opt/gitlab/gitlab-rails/etc/gitlab-registry.key
从主要站点复制到节点。 -
编辑
/etc/gitlab/gitlab.rb
并添加:gitlab_rails['geo_registry_replication_enabled'] = true # Primary registry's hostname and port, it will be used by # the secondary node to directly communicate to primary registry gitlab_rails['geo_registry_replication_primary_api_url'] = 'https://primary.example.com:5050/'
-
重新配置节点,使更改生效:
gitlab-ctl reconfigure
验证复制
要验证容器镜像库复制是否正常工作,请在次要站点上:
- 在左侧边栏上,展开最顶部的向下箭头 ()。
- 选择 管理中心。
- 在左侧边栏上,选择 Geo > 节点。初始复制或“回填”可能仍在进行中。
您可以从浏览器中的主要站点的 Geo 节点 仪表盘监控每个 Geo 站点上的同步过程。