46
Rancher GitLab を使う3つの理由 株式会社スタイルズ 矢野 哲朗 2017106

Rancher と GitLab を使う3つの理由

Embed Size (px)

Citation preview

Page 1: Rancher と GitLab を使う3つの理由

Rancher と GitLab を使う3つの理由

株式会社スタイルズ

矢野 哲朗

2017年10月6日

Page 2: Rancher と GitLab を使う3つの理由

自己紹介

経歴 : システム運用 10年・ネットワーク 6年・SI 8年

近頃はownCloud 営業、翻訳を担当

Rancherの好きな機能 :

その他 : 全く上達しないRubyist一番最初のPCは、OKI if-800 でした…。

矢野 哲朗

tetsurow.yano

株式会社スタイルズ

1

Page 3: Rancher と GitLab を使う3つの理由

Rancher との関わり最初

2

この投稿が、Rancher JP での活動する発端になった最初のアクションでした。

Page 4: Rancher と GitLab を使う3つの理由

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

それぞれの懇親会に参加してきました

Page 5: Rancher と GitLab を使う3つの理由

本日のお題

4

Rancher と GitLab を使う3つの理由

Page 6: Rancher と GitLab を使う3つの理由

Dockerライフサイクル

5

Page 7: Rancher と GitLab を使う3つの理由

6

GitLabがない場合

別々に用意する必要がある

Page 8: Rancher と GitLab を使う3つの理由

7

Rancher とGitLab を組み合わせると

Registry

1つで対応可能

Page 9: Rancher と GitLab を使う3つの理由

8

Rancher と GitLab を組み合わせると

Registry Docker Container

Registry

docker build

Rancher Catalog

GitLab Rancher

Page 10: Rancher と GitLab を使う3つの理由

9

どの辺がRancherとGitLabを使うと便利なのか?

Page 11: Rancher と GitLab を使う3つの理由

10

Rancher カタログRancherの魅力の一つ

Page 12: Rancher と GitLab を使う3つの理由

m-daichangもお勧め

11

Rancher プライベートカタログとComposehttps://www.slideshare.net/m-daichang/rancher-compose

Page 13: Rancher と GitLab を使う3つの理由

カタログって何ができるの?

12

『Dockerのイメージ』をボタン一つで、Rancher上に展開出来る仕組み

Page 14: Rancher と GitLab を使う3つの理由

カタログがなかったら?

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

黒い画面で実行する

大変ですね!

Page 15: Rancher と GitLab を使う3つの理由

カタログの使い方

14

Rancher カタログ画面から、デプロイしたいものを選んで

設定項目を入力して、を押すだけ。

Page 16: Rancher と GitLab を使う3つの理由

事例「マクニカ Dockerクラウド: App as a Service 」

15

社内で製品テスト用にプライベートカタログを作成しました。気軽に製品テストできるようになりました!

https://www.slideshare.net/minehikonohara/20170111-macnica-networksnohararancherusecase

Page 17: Rancher と GitLab を使う3つの理由

カタログの仕組みについてもっと詳しく

16

目的に合わせて複数のコンテナーをまとめたのがスタックそのスタックを作成するための設計書がカタログです

Rancher プライベートカタログとComposehttps://www.slideshare.net/m-daichang/rancher-compose

Page 18: Rancher と GitLab を使う3つの理由

カタログのメリット

17

例えばサービス丸ごとStackとしてCatalogにしておけば環境のデプロイがすごい簡単にできる、ということです。 (本番・開発でもA/Bテストでも) カタログからポチッと

デプロイ

Page 19: Rancher と GitLab を使う3つの理由

しかし!

18

Docker Hubに入っているお仕着せのDockerイメージはまず使えません

そんなバラ色の世界が来てるわけないじゃないですか

某氏談:

写真はイメージです

Page 20: Rancher と GitLab を使う3つの理由

Dockerfileの修正が発生します

19

保存先

GitLabで履歴管理しましょう

Dockerfile

Page 21: Rancher と GitLab を使う3つの理由

Dockerfile 作ったらビルドしないとね

20

でも手で作るのなんて馬鹿らしい

Page 22: Rancher と GitLab を使う3つの理由

Dockerfile 作ったらビルドしないとね

21

いろいろ、CIツールはありますが、

GitLab CI Runner これでしょ。

Page 23: Rancher と GitLab を使う3つの理由

ビルド用マシン

GitLab CI Runner の仕組み

22

4秒おきにポーリング

push

この辺りはRancherは

全く関係が無い

Registry

常駐build起動用Dockerを起動

buildコマンドを実行

Page 24: Rancher と GitLab を使う3つの理由

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

Page 25: Rancher と GitLab を使う3つの理由

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!

こんな感じです

Page 26: Rancher と GitLab を使う3つの理由

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

Page 27: Rancher と GitLab を使う3つの理由

26

GitLab CI Runner で注意して欲しいこと

GitLab CI Runner と GitLab サーバーは必ず別サーバーにすること

ビルド用マシン

Page 28: Rancher と GitLab を使う3つの理由

27

GitLab CI Runner で注意して欲しいこと

CI Runnerでビルドが動くと CPUとメモリーがガッツリ持っていかれます。そうなると、GitLab が動かなくなります。こんな感じ。

Page 29: Rancher と GitLab を使う3つの理由

28

GitLab Runner がセットアップできたら

.gitlab-ci.yml を用意しましょう

Page 30: Rancher と GitLab を使う3つの理由

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

が分からん..。

Page 31: Rancher と GitLab を使う3つの理由

わからんので日本語訳しました

30

.gitlab-ci.yml によるジョブの設定方法(日本語訳) https://qiita.com/ynott/items/1ff698868ef85e50f5a1

間違いなどありましたらご指摘下さい。

付帯ドキュメントも鋭意翻訳予定

Page 32: Rancher と GitLab を使う3つの理由

この資料も勉強になります

31

GitHub to GitLab 〜よりよいCI/CD環境を求めて〜 / GitHub to GitLabhttps://speakerdeck.com/yamamotofebc/github-to-gitlab

Page 33: Rancher と GitLab を使う3つの理由

こんな風に言われて動かない場合は...。

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

Page 34: Rancher と GitLab を使う3つの理由

うまくいけば、こんな感じでビルドされます

33

Page 35: Rancher と GitLab を使う3つの理由

34

【再掲】Rancher と GitLab を組み合わせると

Registry Docker Container

Registry

docker build

Rancher Catalog

GitLab Rancher

Page 36: Rancher と GitLab を使う3つの理由

プライベートカタログの話

35

カタログ便利!

というお話をしました

その為に、コンテナーイメージファイル をビルドして

コンテナーレジストリー に入れるところまで来ました

次はプライベートカタログ を設定してみましょう

Registry

Catalog

Page 37: Rancher と GitLab を使う3つの理由

36

おっと、その前に

DockerコンテナーイメージがRancherから読み出せないといけないので、RancherからGitLab Container Registryが使える必要があります

Page 38: Rancher と GitLab を使う3つの理由

37

Rancher から GitLab Container Registry を使うhttp://qiita.com/ynott/items/823d9b3c7275dbd49ae7

GitLab Container Registry

Page 39: Rancher と GitLab を使う3つの理由

Rancher Host

Rancher Host

プライベートカタログの仕組み

38

②pull/run

やっと僕の出番

Registry

Rancher

ServerRancher Catalog

Rancher Catalog

リポジトリー⓪プライベートカタログのデータを読み込み

Rancher Host

Rancher UI

①pull/runを指示

でぷろ~い

③コンテナーを利用

Page 40: Rancher と GitLab を使う3つの理由

プライベートカタログの設定方法

39

①プライベートカタログ用のリポジトリーを用意

②リポジトリーにプライベートカタログ用の定義を設定

③Rancherからそのレポジトリーを参照

Rancher プライベートカタログとCompose https://www.slideshare.net/m-daichang/rancher-compose

Page 41: Rancher と GitLab を使う3つの理由

【再掲】カタログの使い方

40

Rancher カタログ画面から、デプロイしたいものを選んで

設定項目を入力して、を押すだけ。

Page 42: Rancher と GitLab を使う3つの理由

41

【再掲】Rancher と GitLab を組み合わせると

Registry Docker Container

Registry

docker build

Rancher Catalog

GitLab Rancher

Page 43: Rancher と GitLab を使う3つの理由

42

Rancher と GitLabによる「型」

弊社の考えるDevOpsに必要な「型」

Page 44: Rancher と GitLab を使う3つの理由

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

Page 45: Rancher と GitLab を使う3つの理由

つまり、

44

RancherとGitLabで快適な

コンテナーライフを!

Page 46: Rancher と GitLab を使う3つの理由

まとめ

45

①GitLabとRancherの蜜月関係

②Rancherはカタログを使い始めてからが本番!

③これこそがDevOpsへの道!

ご清聴ありがとうございました