0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Gitlab registryを別nodeで立てる

0
Posted at

概要

Gitlabをself hostedで立てていて、1つのサーバーでGitlab registryも有効にして使っている場合、コンテナイメージがストレージを圧迫してGitlabが動かなくなってしまうことがある。
これを回避する方法としては、registryのストレージを外部(S3)に置く方法と、もう1つサーバーを立てて、そちらにGitlab registryを分散稼働する方法がある。
お手軽なのは前者だが、あえて後者でやってみた(やってみたかった)らちょっとてこずったので躓きポイントの記録。

前提

  • dockerで動かしている
  • ローカルのドメインでhttpsで立てている

公式の手順の確認

見るのは ここ
registryノードとgitlabノードの設定すべき項目が書かれているが、デフォルト云々で設定しなくてよさそうに見えて設定が必要なものがあったりするので注意が必要。
設定しなくても良いものと足りないところを補うと

registry node (registry.sample.local)

# Disable unneeded services
gitlab_workhorse['enable'] = false
puma['enable'] = false
sidekiq['enable'] = false
redis['enable'] = false
gitlab_kas['enable'] = false
gitaly['enable'] = false

# Configure registry settings
gitlab_rails['registry_host'] = 'registry.sample.local'
registry['enable'] = true
registry['registry_http_addr'] = '0.0.0.0:5000'
registry['token_realm'] = 'https://gitlab.sample.local'

registry['database'] = {
   'enabled' => true,
}

# Configure registry nginx settings
registry_nginx['enable'] = true
registry_nginx['listen_port'] = 443
registry_nginx['listen_https'] = true

公式との相違点

  • nginxの無効化をしない(httpsの為)
    registry_nginxの部分、gitlab_rails['registry_host']
  • postgresの無効化をしない(どのぐらい使ってるか分かるようにする為、registryメタデータ データベースを有効にしたい)
    registry['database']の部分

dockerはこんな感じで、やることは基本的にgitlabノード単体で立てていた時と同じ

services:
  web:
    image: 'gitlab/gitlab-ce:18.6.1-ce.0'
    restart: always
    container_name: 'registry'
    hostname: 'registry.sample.local'
    ports:
      - '80:80'
      - '443:443'
    volumes:
      - './config:/etc/gitlab'
      - './logs:/var/log/gitlab'
      - './data:/var/opt/gitlab'
      - './ssl:/etc/gitlab/ssl'
      - './trusted-certs:/etc/gitlab/trusted-certs'
  • ./trusted-certsにはローカルドメインのルート証明書を入れる
    (ノード間をhttpsで通信する為)
  • ./ssl にはこのサーバーの証明書と秘密鍵を入れる
    (registry.sample.local.crt と registry.sample.local.key という風に名前を合わせておくと設定が省ける)
  • ./config には gitlabノードの gitlab-secrets.json を取って来て入れる

gitlab node (gitlab.sample.local)

# registry_external_url = 'xxx'

gitlab_rails['registry_enabled'] = true
gitlab_rails['registry_host'] = 'registry.sample.local'
gitlab_rails['registry_port'] = '443'

gitlab_rails['registry_api_url'] = 'https://registry.sample.local'

公式との相違点

  • registry_external_urlの無効化

動作確認

適当にプロジェクト作ってCIで

  - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
  - docker push $CI_REGISTRY_IMAGE/hoge

とかやってpushできるか

docker login registry.sample.local
docker pull registry.sample.local/hoge

とかやってpullできるか

プロジェクトの「deploy」「Container registry」で見れるか

厄介だった点

  • nginxまわり
  • やり始めた時点のバージョン(18.5)のバグでregistryメタデータ保存ができなかった(18.6で修正)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?