【GitLab 公式 を訳してみた】GitLab Runnerをインストール & Dockerオートスケーリング機能をフル活用する

法律: IT 解説記事 GitLab CI コンテナ フノス(訳者)

  GitLab Runner>GitLab Runnerをインストールする>オートスケーリング機能をフル活用

  オートスケーリング機能は、GitLab Runner 1.1.0から導入されました。

  オートスケーリング機能の詳細についは、こちらのドキュメントに記されています。

 

  この機能を使う前に

 オートスケーリング機能を使うには、まず同じマシンにDockerとGitLab Runnerがインストールされている必要があります。

 1.新しいLinux系マシンにログインして、Dockerを運用するための踏み台サーバーに改変します。
 2.GitLab Runner installation documentationを参考にGitLab Runnerをインストール。
 3. Docker Machine installation documentationを参考にDocker Machineをインストール。


 Dockerレジストリとキャッシュサーバーの準備

  ビルドのスピードのことを考えると、パーソナルDockerレジストリをプロキシモードで動かすように準備したり、
キャッシュサーバーを用意しておく必要があるでしょう。
 

  Docker Registryをインストール

  注:Distributed registry mirroringも併せてお読みください

  1.まずは、Dockerレジストリ・プロキシ専用にする予定のマシンを1つ用意して、そこにログインします。
  2.このマシンにDockerエンジンをインストールします。
 3.Dockerレジストリを新規作成します。

======================
docker run -d -p 6000:5000 \
  -e REGISTRY_PROXY_REMOTEURL=https://registry-1.docker.io \
  --restart always \
  --name registry registry:2
======================

  Dockerレジストリが接続するためのポート番号は(6000)と設定されていますが、これは変更できます。
 

  4.サーバーのIPアドレスを確認します。

======================
hostname --ip-address
======================

  この時に選択しておくのは、プライベート・ネットワークIPアドレスであった方がよいでしょう。
 単一プロバイダにおいて(DigitalOcean, AWS, Azure, etc)複数台のマシンを相互的に通信させる場合、プライベート・ネットワークを用いることが最も高速な手段であることと、月々の帯域幅に制限がかからないことが多いことなどが、その理由です。

  5.以上の設定で、Dockerレジストリが「MY_REGISTRY_IP:6000」配下でアクセス可能になりました。


 

  キャッシュサーバーをインストール

 注:ここで使用するサーバーは、S3が使用可能なサーバーにしておいてください。(例:Amazon S3など)
 詳しくは、 Distributed runners cachingをご覧ください。

  1.キャッシュサーバー専用にする予定のマシンを1つ用意して、そこにログインします。
 2.マシンにDockerエンジンをインストールします。
 3.そこで「minio」という、Dockerコンテナを構築します。これはGo言語で記述されており、S3が使用可能であるサーバーの役割を果たします。
 

======================
docker run -it --restart always -p 9005:9000 \
-v /.minio:/root/.minio -v /export:/export \
--name minio \
minio/minio:latest server /export
======================
 注:¥はバックスラッシュの誤変換です。

  キャッシュサーバーが接続するためのポート番号は(9005)と設定されていますが、これは変更できます。
 

  4.サーバーのIPアドレスを確認します。

======================
hostname --ip-address
======================

  5.これにて、キャッシュサーバーには「MY_CACHE_IP:9005」でアクセス可能になりました。

  6.minioの秘密鍵は「sudo cat /.minio/config.json」というコマンドで閲覧可能です。

  7.ランナーで使われるバケットを作成するには、「sudo mkdir /export/runner. runner」というコマンドを使うとよいでしょう。export以下が、バケットの名前です。他のバケットを選択する場合は、名前の部分を変更します。

  8.全てのキャッシュは「/export」ディレクトリに収容されます。

 

  GitLab Runnerの設定

  1.GitLab Runnerを登録する時に、「docker+machine」をエクゼキュータに設定します。(詳しくは、ランナー説明書から、トークンを獲得する方法を探して読んでください。)

======================
sudo gitlab-runner register
======================

 アウトプット例:

============================================
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com )
gitlab-ciのコーディネーター URL (例:https://gitlab.com ) を入力してください。
https://gitlab.com

Please enter the gitlab-ci token for this runner
このランナーにあてはまるgitlab-ci トークンを入力してください。
xxx

Please enter the gitlab-ci description for this runner
このランナーの説明を入力してください。
my-autoscale-runner
INFO[0034] fcf5c619 Registering runner... succeeded
INFO[0034] fcf5c619 ランナーを認証しています… 成功

Please enter the executor: shell, docker, docker-ssh, docker+machine, docker-ssh+machine, ssh?
エクゼキュータを入力してください。ここには、shell, docker, docker-ssh, docker+machine, docker-ssh+machine, sshなどが当てはまります。
docker+machine

Please enter the Docker image (eg. ruby:2.1):
Dockerイメージを指定してください(例:ruby:2.1)
ruby:2.1

INFO[0037] Runner registered successfully. Feel free to start it, but if it's
INFO[0037] ランナーの認証 成功。ランナーはいつでも開始できる状態です。
running already the config should be automatically reloaded!
開始時には、コンフィグが自動的にリロードされます。
============================================


 2.「config.toml」を編集します。
 今回の場合、このファイルに、[runners.machine] [runners.cache] という項目を設けなくてはなりません。
 [runners.machine]配下の「MachineDriver」には、皆さんがお使いのプロバイダを記述します。その下の「MachineOptions」には、「limit」と「IdleCount」を設定します。

  さらに詳しい情報は、GitLab Runner Autoscalingをご覧ください。
 

  たとえば、「DigitalOcean」というプロバイダを利用していた場合、以下のような設定が想定されます。

============================================
concurrent = 20

[[runners]]
executor = "docker+machine"
limit = 20
[runners.docker]
 image = "ruby:2.1"
[runners.machine]
 IdleCount = 5
 MachineDriver = "digitalocean"
 MachineName = "auto-scale-runners-%s.my.domain.com"
 MachineOptions = [
   "digitalocean-image=coreos-stable",
   "digitalocean-ssh-user=core"
,
   "digitalocean-access-token=MY_DIGITAL_OCEAN_TOKEN"
,
   "digitalocean-region=nyc2",
   "digitalocean-private-networking"
,
   "engine-registry-mirror=http://MY_REGISTRY_IP:6000"

  ]

[runners.cache]
 Type = "s3"
 ServerAddress = "MY_CACHE_IP:9005"
 AccessKey = "ACCESS_KEY"
 SecretKey = "SECRET_KEY"
 BucketName = "runner"
 Insecure = true  #この設定は、MinioにTLS証明書をつけないで利用する場合にのみ指定します。

============================================

  3.プロジェクトをビルドしてみてください。数秒後に、「docker-machine ls」で新しいマシンが作成されていることが確認できるでしょう。


 

  ランナーのアップグレード

  1.ランナーに手を付けていない状態で、オペレーティングシステムが自動的にランナーを再起動していないことを確認してください。(OSによってはデフォルトの設定で再起動する場合がありますが、それではこれから説明する設定ができません。)

  2.ランナーを停止します。

======================
killall -SIGQUIT gitlab-runner
======================

  SIGQUITシグナルを送ることで、gitlab-runnerの停止がより丁寧に実行されるはずです。この方法は、jobの受け入れを停止し、現在のビルドをすぐさま終了させます。

  3.ランナーの停止を待ちます。
 ランナーの状態は「gitlab-runner status」でチェックできます。あるいは、ランナーの自動シャットダウンを30分ほど待つのもよいでしょう。

======================
for i in `seq 1 180`; do # 1800 seconds = 30分
  gitlab-runner status || break
  sleep 10
done
======================

  4.この状態になると、中途でビルド作業が割り込む可能性がなくなり、ランナーのアップグレードをより安全に図れるようになります。


 

  Dockerマシンの管理

  1.ランナーに手を付けていない状態で、オペレーティングシステムが自動的にランナーを再起動していないことを確認してください。(OSによってはデフォルトの設定で再起動する場合がありますが、それではこれから説明する設定ができません。)

  2.ランナーを停止します。

======================
killall -SIGQUIT gitlab-runner
======================

  3.ランナーの停止を待ちます。
 ランナーの状態は「gitlab-runner status」でチェックできます。あるいは、ランナーの自動シャットダウンを30分ほど待つのもよいでしょう。

======================
for i in `seq 1 180`; do # 1800 seconds = 30分
  gitlab-runner status || break
  sleep 10
done
======================

  4.この状態になると、何らかの管理操作(upgrade や remove)をdocker-machineコマンドでくり出せるようになります。

 Edit this page

 

 

 2017-12-04 23:21:13 / Hnoss
原文サイトを表示
[ 原文 ] https://docs.gitlab.com/runner/install/autoscaling.html
原文ページプロジェクト並びにドキュメントファイルは、MIT Licenseのもと公開されています。(URL:https://gitlab.com/gitlab-com/gitlab-docs/blob/master/LICENSE) この記事の文章は、訳者の判断によりCreative Commons BY (version 3.0) を適用するものとします。