Upload
tetsurou-yano
View
493
Download
2
Embed Size (px)
Citation preview
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 プライベートカタログとComposehttps://www.slideshare.net/m-daichang/rancher-compose
カタログって何ができるの?
12
『Dockerのイメージ』をボタン一つで、Rancher上に展開出来る仕組み
カタログがなかったら?
13
Docker Hubで欲しいイメージを探す
Docker Hubで欲しいイメージを探す
$ sudo docker run nginxUnable to find image 'nginx:latest' locallylatest: Pulling from library/nginxafeb2bfd31c0: Pull complete7ff5d10493db: Pull completed2562f1ae1d0: Pull completeDigest: sha256:af32e714a9cc3157157374e68c818b05ebe9e0737aac06b55a09da374209a8f9Status: Downloaded newer image for nginx:latest
黒い画面で実行する
大変ですね!
カタログの使い方
14
Rancher カタログ画面から、デプロイしたいものを選んで
設定項目を入力して、を押すだけ。
事例「マクニカ Dockerクラウド: App as a Service 」
15
社内で製品テスト用にプライベートカタログを作成しました。気軽に製品テストできるようになりました!
https://www.slideshare.net/minehikonohara/20170111-macnica-networksnohararancherusecase
カタログの仕組みについてもっと詳しく
16
目的に合わせて複数のコンテナーをまとめたのがスタックそのスタックを作成するための設計書がカタログです
Rancher プライベートカタログとComposehttps://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 -sSL https://get.docker.com/ | sh
sudo apt-get install gitlab-runner
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash
sudo gpasswd -a user docker
GitLab CI Runner(Docker in Docker)設定方法
24
1. GitLab Runner を起動するようにしておくこのGitLab Runnerが常駐してGitLabにジョブがないか常に問合せする
2. GitLab Runner をGitLabに登録する
sudo docker run -d --name gitlab-runner --restart always \-v /srv/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock \gitlab/gitlab-runner:latest
sudo docker exec -it gitlab-runner gitlab-runner registeruser@ubuntu:~$ sudo docker exec -it gitlab-runner gitlab-runner registerRunning in system-mode.Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):https://gitlab.example.co.jp/Please enter the gitlab-ci token for this runner:PER-RUNNER-TOKENPlease enter the gitlab-ci description for this runner:[5c6a3c1400ca]: runner-name-if-you-wantPlease enter the gitlab-ci tags for this runner (comma separated):Whether to lock the Runner to current project [true/false]:[true]: falseRegistering runner... succeeded runner=ZZZZZZZZZPlease enter the executor: docker, parallels, ssh, docker-ssh, shell, virtualbox, docker+machine, docker-ssh+machine, kubernetes:dockerPlease enter the default Docker image (e.g. ruby:2.1):alpine:3.6Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
こんな感じです
GitLab CI Runner の設定
25
追加で、以下のファイルを設定(gitlab-omnibus でインストールの場合)
concurrent = 1check_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 = falseimage = "docker:latest"privileged = truedisable_cache = falsevolumes = ["/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
# This file is a template, and might need editing before it works on your project.# Official docker image.image: docker:latest
services:- docker:dind
stages:- build
before_script:- docker info- docker login -u "gitlab-ci-token" -p "$CI_JOB_TOKEN" $CI_REGISTRY- export IMAGE_TAG="${CI_BUILD_TAG-${CI_COMMIT_SHA:0:8}}"
fluent-twitter:stage: buildscript:
- docker build --pull -t "${CI_REGISTRY_IMAGE}/${CI_JOB_NAME}:${IMAGE_TAG}" "fluent/${CI_JOB_NAME}"- docker push "${CI_REGISTRY_IMAGE}/${CI_JOB_NAME}:${IMAGE_TAG}"- docker tag "${CI_REGISTRY_IMAGE}/${CI_JOB_NAME}:${IMAGE_TAG}" "${CI_REGISTRY_IMAGE}/${CI_JOB_NAME}"- docker push "${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 GitLabhttps://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
ServerRancher 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への道!
ご清聴ありがとうございました