Rancher と GitLab を使う3つの理由
株式会社スタイルズ
矢野 哲朗
2017年10月6日
自己紹介
経歴 : システム運用 10年・ネットワーク 6年・SI 8年
近頃はownCloud 営業、翻訳を担当
Rancherの好きな機能 :
その他 : 全く上達しないRubyist
一番最初のPCは、OKI if-800 でした…。
矢野 哲朗
tetsurow.yano
株式会社スタイルズ
1
Rancher との関わり最初
2
この投稿が、Rancher JP での活動する発端になった
最初のアクションでした。
Rancher JPでの活動(昨年から今年)
3
#1
2016/10/7
#1
2016/10/21
Tokyo Meetup
Tokyo もくもく勉強会
#2
2016/12/8
#3
2017/1/11
#4
2017/2/15
#2
2017/1/31
#3
2017/2/28
#5
2017/3/15
#4
2017/3/28
#6
2017/5/17
#7
2017/6/15
#8
2017/7/13
#9
2017/9/13
#5
2017/6/5
それぞれの懇親会に
参加してきました
本日のお題
4
Rancher と GitLab を使う
3つの理由
Dockerライフサイクル
5
6
GitLabがない場合
別々に用意する必要がある
7
Rancher とGitLab を組み合わせると
Registry
1つで対応可能
8
Rancher と GitLab を組み合わせると
Registry Docker Container
Registry
docker build
Rancher Catalog
GitLab Rancher
①
②
③
9
どの辺がRancherとGitLabを
使うと便利なのか?
10
Rancher カタログ
Rancherの魅力の一つ
m-daichangもお勧め
11
RancherプライベートカタログとCompose
https://www.slideshare.net/m-daichang/rancher-compose
カタログって何ができるの?
12
『Dockerのイメージ』をボタン一つで、
Rancher上に展開出来る仕組み
カタログがなかったら?
13
Docker Hubで欲しいイメージを探す
Docker Hubで欲しい
イメージを探す
$ sudo docker run nginx
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
afeb2bfd31c0: Pull complete
7ff5d10493db: Pull complete
d2562f1ae1d0: Pull complete
Digest: sha256:af32e714a9cc3157157374e68c818b05ebe9e0737aac06b55a09da374209a8f9
Status: Downloaded newer image for nginx:latest
黒い画面で実行する
大変ですね!
カタログの使い方
14
Rancher カタログ画面から、デ
プロイしたいものを選んで
設定項目を入力して、
を押すだけ。
事例「マクニカ Dockerクラウド: App as a Service 」
15
社内で製品テスト用に
プライベートカタログを
作成しました。
気軽に製品テストできるよ
うになりました!
https://www.slideshare.net/minehikonohara/20170111-macnica-networksnohararancherusecase
カタログの仕組みについてもっと詳しく
16
目的に合わせて複数のコンテナーをまとめたのがスタック
そのスタックを作成するための設計書がカタログです
RancherプライベートカタログとCompose
https://www.slideshare.net/m-daichang/rancher-compose
カタログのメリット
17
例えばサービス丸ごとStackとしてCatalogにしておけば 環境のデ
プロイがすごい簡単にできる、ということです。 (本番・開発でも
A/Bテストでも) カタログからポチッと
デプロイ
しかし!
18
Docker Hubに入っている
お仕着せのDockerイメージはまず使えません
そんなバラ色の世界が
来てるわけない
じゃないですか
某氏談:
写真はイメージです
Dockerfileの修正が発生します
19
保存先
GitLabで履歴管理しましょう
Dockerfile
Dockerfile 作ったらビルドしないとね
20
でも手で作るのなんて馬鹿らしい
Dockerfile 作ったらビルドしないとね
21
いろいろ、CIツールはありますが、
GitLab CI Runner これでしょ。
ビルド用マシン
GitLab CI Runner の仕組み
22
4秒おきにポーリング
push
この辺りは
Rancherは
全く関係が無い
Registry
常駐
build起動用
Dockerを起動
buildコマンド
を実行
GitLab CI Runner(Docker in Docker)設定方法
23
1. Dockerをインストール
Run GitLab Runner in a container - GitLab Documentation
https://docs.gitlab.com/runner/install/docker.html
※注意:dockerを実行する user をaddしておく
2. GitLab Runner のレポジトリーをOSに追加
Install GitLab Runner using the official GitLab repositories - GitLab Documentation
https://docs.gitlab.com/runner/install/linux-repository.html
(GitLab 10以前と後で違うので注意)
3. GitLab-runner パッケージをインストール
curl-sSLhttps://get.docker.com/|sh
sudoapt-getinstall gitlab-runner
curl -Lhttps://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh| sudobash
sudogpasswd-auserdocker
GitLab CI Runner(Docker in Docker)設定方法
24
1. GitLab Runner を起動するようにしておく
このGitLab Runnerが常駐してGitLabにジョブがないか常に問合せする
2. GitLab Runner をGitLabに登録する
sudodockerrun-d--namegitlab-runner--restartalways
-v/srv/gitlab-runner/config:/etc/gitlab-runner -v/var/run/docker.sock:/var/run/docker.sock
gitlab/gitlab-runner:latest
sudodockerexec-it gitlab-runnergitlab-runnerregister
user@ubuntu:~$ sudo docker exec-it gitlab-runner gitlab-runner register
Running in system-mode.
Pleaseenterthegitlab-ci coordinator URL (e.g.https://gitlab.com/):
https://gitlab.example.co.jp/
Pleaseenterthegitlab-ci token forthis runner:
PER-RUNNER-TOKEN
Pleaseenterthegitlab-ci description for this runner:
[5c6a3c1400ca]: runner-name-if-you-want
Pleaseenterthegitlab-ci tags forthis runner(comma separated):
Whetherto lock theRunner tocurrent project [true/false]:
[true]: false
Registering runner...succeeded runner=ZZZZZZZZZ
Pleaseentertheexecutor:docker,parallels, ssh, docker-ssh, shell,virtualbox, docker+machine, docker-ssh+machine, kubernetes:
docker
PleaseenterthedefaultDocker image (e.g.ruby:2.1):
alpine:3.6
Runner registeredsuccessfully. Feelfreeto startit, but if it'srunning already theconfig should beautomatically reloaded!
こんな感じです
GitLab CI Runner の設定
25
追加で、以下のファイルを設定(gitlab-omnibus でインストールの場合)
concurrent = 1
check_interval = 0
[[runners]]
name = "runner-name-if-you-want"
url = "https://gitlab.example.co.jp/"
token = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
executor = "docker"
output_limit = 1048576
[runners.docker]
tls_verify = false
image = "docker:latest"
privileged = true
disable_cache = false
volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]
shm_size = 0
[runners.cache]
/etc/gitlab-runner/config.toml
26
GitLab CI Runner で注意して欲しいこと
GitLab CI Runner と GitLab サーバーは必ず
別サーバーにすること
ビルド用マシン
27
GitLab CI Runner で注意して欲しいこと
CI Runnerでビルドが動くと CPUとメモリーがガッツリ持って
いかれます。そうなると、GitLab が動かなくなります。こんな感じ。
28
GitLab Runner がセットアップできたら
.gitlab-ci.yml を用意しましょう
GitLabのCI 用ファイル .gitlab-ci.yml
29
#Thisfile isatemplate,andmightneededitingbeforeitworksonyourproject.
#Officialdockerimage.
image:docker:latest
services:
- docker:dind
stages:
- build
before_script:
- dockerinfo
- dockerlogin -u"gitlab-ci-token"-p "$CI_JOB_TOKEN"$CI_REGISTRY
- exportIMAGE_TAG="${CI_BUILD_TAG-${CI_COMMIT_SHA:0:8}}"
fluent-twitter:
stage:build
script:
- dockerbuild--pull -t"${CI_REGISTRY_IMAGE}/${CI_JOB_NAME}:${IMAGE_TAG}""fluent/${CI_JOB_NAME}"
- dockerpush"${CI_REGISTRY_IMAGE}/${CI_JOB_NAME}:${IMAGE_TAG}"
- dockertag"${CI_REGISTRY_IMAGE}/${CI_JOB_NAME}:${IMAGE_TAG}""${CI_REGISTRY_IMAGE}/${CI_JOB_NAME}"
- dockerpush"${CI_REGISTRY_IMAGE}/${CI_JOB_NAME}" しかし、.gitlab-ci.yml
が分からん..。
わからんので日本語訳しました
30
.gitlab-ci.yml によるジョブの設定方法(日本語訳)
https://qiita.com/ynott/items/1ff698868ef85e50f5a1
間違いなどありましたら
ご指摘下さい。
付帯ドキュメントも鋭意翻訳予定
この資料も勉強になります
31
GitHub to GitLab 〜よりよいCI/CD環境を求めて〜 / GitHub to GitLab
https://speakerdeck.com/yamamotofebc/github-to-gitlab
こんな風に言われて動かない場合は...。
32
*** WARNING: Service runner-217ba09c-project-113-concurrent-0-docker-0 probably
didn't start properly.
service runner-217ba09c-project-113-concurrent-0-docker-0-wait-for-service did timeout
2017-10-05T08:49:31.743008682Z mount: permission denied (are you root?)
2017-10-05T08:49:31.743306504Z Could not mount /sys/kernel/security.
2017-10-05T08:49:31.743345554Z AppArmor detection and --privileged mode might
break.
2017-10-05T08:49:31.747574221Z mount: permission denied (are you root?)
sudo docker rm -f $(docker ps -a -q)
で一旦コンテナーを全て消しましょう
Using Docker Build - GitLab Documentation
http://docs.gitlab.com/ce/ci/docker/using_docker_build.html#use-docker-socket-binding
うまくいけば、こんな感じでビルドされます
33
34
【再掲】Rancher と GitLab を組み合わせると
Registry Docker Container
Registry
docker build
Rancher Catalog
GitLab Rancher
①
②
③
プライベートカタログの話
35
カタログ便利!
というお話をしました
その為に、コンテナーイメージファイル をビルドして
コンテナーレジストリー に入れるところまで来ました
次はプライベートカタログ を設定してみましょう
Registry
Catalog
36
おっと、その前に
Dockerコンテナーイメージが
Rancherから読み出せないと
いけないので、Rancherから
GitLab Container Registryが
使える必要があります
37
Rancher から GitLab Container Registry を使う
http://qiita.com/ynott/items/823d9b3c7275dbd49ae7
GitLab Container Registry
Rancher Host
Rancher Host
プライベートカタログの仕組み
38
②pull/run
やっと僕の出番
Registry
Rancher
Server
Rancher Catalog
Rancher Catalog
リポジトリー
⓪プライベートカタログの
データを読み込み
Rancher Host
Rancher UI
①pull/run
を指示
でぷろ~い
③コンテナーを
利用
プライベートカタログの設定方法
39
①プライベートカタログ用のリポジトリーを用意
②リポジトリーにプライベートカタログ用の定義を設定
③Rancherからそのレポジトリーを参照
Rancher プライベートカタログとCompose
https://www.slideshare.net/m-daichang/rancher-compose
【再掲】カタログの使い方
40
Rancher カタログ画面から、デ
プロイしたいものを選んで
設定項目を入力して、
を押すだけ。
41
【再掲】Rancher と GitLab を組み合わせると
Registry Docker Container
Registry
docker build
Rancher Catalog
GitLab Rancher
①
②
③
42
Rancher と GitLabによる「型」
弊社の考えるDevOpsに必要な「型」
Infrataster
管理者
① マスターブランチへ
更新データをpush
【コンテンツ】
・テーマ
・画像
・DBデータ
・Dockerfile
・テストコード
③ DBセットアップ
- git上のダンプデータを
インポート
⑤ テスト1
- 設定等の内部情報の確認
⑥ テスト2
- 外部からの確認
⑦ コンテナイメージを
レジストリへ登録
・.gitlab-ci.yml
本番用RDS(Green)
② マスターブランチ用動作実行
④ ビルド
- Registryから元イメージ取得
- テーマとDockerfileを
取得しビルド実行
テストOK
⑧ 本番用コンテナ作成
⑪ 接続確認
本番用RDS
(Blue)
本番用コンテナ
(Blue)
本番用コンテナ
(Green)
Route 53
⑩ DNS変更
ELB
(Blue)
ELB
(Green)
Rancherを使ったビルド・デプロイ(プロダクト環境)
Registry
43
つまり、
44
RancherとGitLabで
快適な
コンテナーライフを!
まとめ
45
①GitLabとRancherの蜜月関係
②Rancherはカタログを
使い始めてからが本番!
③これこそがDevOpsへの道!
ご清聴ありがとうございました

Rancher と GitLab を使う3つの理由