Rancherで作るお⼿軽コンテナ運⽤環境!!
〜 Kubenetes & Mesos 牧場でコンテナ⽜を飼おう!〜
Rancher JP ”Cowboys”_・)つかまん@tsukaman
Who am I ?• 名前:_・)つかまん( @tsukaman )• 仕事:⽇本ヒューレット・パッカード株式会社
PointNext Hybrid IT CoE 所属• 担当:打楽器• 参加:Rancher JP、Mesos User Group Tokyo、
TokyoHacker Space 他 いろいろと・・・• 好き:⾳楽、息⼦と遊ぶ、ガジェットIYH、眼鏡• 最近:GPD Pocketが届いて嬉しい
2
3
今⽇お伝えしたいこと
4
眼鏡っていいよね!
5
じゃなくて
6
ウシかわいいよウシ
7
8
9
Rancherはオープンソースのコンテナ管理プラットフォーム
10
コンテナ(※1)っていいよね!Docker環境さえあればどこでも動くし、イメージをレポジトリで共有しやすいし、HW部分から仮想化するVMと違ってアプリケーションプロセスのみの仮想化だからオーバーヘッドも少なくて起動もはやい!アプリケーションのデプロイにちょうどいいって感じ!
でも実際に運⽤するときは、Docker環境を提供するホストのクラスタ管理とか、コンテナ間の依存を意識したスケジューリングや健全性監視とか、ネットワークやロギングや名前解決やボリュームとかの管理もちょうどいい感じにやってくれる仕組みも何か考えて⽤意しなくちゃいけないのよね〜。
※2 彼⼥達はアプリ開発者で⾃分のお茶を淹れてます
※1 ここではDockerコンテナのことを指しています
この仕組みのことを⼀般的に”コンテナオーケストレーションツール”
といいます
11
12
このへんのが ソレ です。
13
主なオーケストレーションツールKubernetes(k8s)(https://kubernetes.io)
Google社が⾃社サービス向け⼤規模コンテナ管理システムの”Borg”をベースにオープンソースプとして開発したもの。⻑年培ったコンテナ運⽤ノウハウを活かしたツールとなっており、Google Container Engineでも利⽤される。現在はCNCFが管理。
Apache Mesos(http://mesos.apache.org)UCバークレー校の研究から始まり現在はApache財団で管理される。DC全体のリソースを集約し、巨⼤なリソースプールとして管理できる。Marathonなど多様な処理フレームワークと組み合わせることができる。ビッグデータに強みがあり、TwitterやAirbnb、Appleなどで採⽤される。
Docker Swarm(https://www.docker.com)Docker社が提供するDocker標準とも⾔えるオーケストレーションツール。複数のDocker環境(ホスト)を1つのリソースプールのように扱うことができる。以前はDocker Swarmとして独⽴した存在だったが、現在はDocker EngineにSwarm Modeとして組み込まれて使い勝⼿が向上している。
14
主なオーケストレーションツール
これ全部で
できるよ!
15
主なオーケストレーションツール
これ全部で
できるよ!
CattleとかWindowsとか
他にもあるよ
16
各種コンテナオーケストレーションツールが”環境”としてテンプレート化されており、簡単に構築できるようになっています。
17
ちなみにこんなイメージ(私の妄想)らんちゃー(かんりしゃ)
こんてな(うし)
かんきょう(ぼくじょう)
18
こんなのが簡単につくれちゃう!
Kubernetes牧場 Mesos牧場 Swarm牧場 Cattle牧場
※必要な⼟地(マシンリソース)は別途購⼊(課⾦)してください。
おんぷれみす帝国内 ぱぶりっくくらうど公国内
Rancherの主要なコンポーネント
19http://rancher.com/docs/rancher/v1.6/en/より引⽤
20
Rancherのチャームポイント♥
インストールが楽!♥画⾯が綺麗!
ホスト追加も簡単!
カタログが便利!
コミュニティが熱い!
マルチな環境で使える!
実績豊富でサポートも充実!
操作がわかりやすい!
簡単なのにパワフル!
充実のRBAC機能!
とても語りきれません!
21
ウシかわいいよウシ♥
22
それでは、作ってみましょうか。
今回のデモ環境TRY Rancher(https://try.rancher.com)
Rancher Labs社が提供するRancherのお試し環境。Githubアカウントがあれば誰でも無償でRancherの機能を利⽤できる。Rancherがどんなものなのかちょっと触ってみたいって時に最適。
CloudGarage(https://cloudgarage.jp)NHNテコラス社が提供する定額型パブリッククラウドサービス。安価に複数台のインスタンスを⽉単位で定額利⽤することができる。Rancher Agentを複数台⽤意してクラスタ構成を使いたいときに便利。
Packet(https://www.packet.co.jp)Packet社が提供するベアメタルクラウドサービス。安価にベアメタルサーバを時間単位で利⽤することができる。仮想サーバではなく物理サーバを占有利⽤できるので⾼パフォーマンス。
23
今回のデモ環境TRY Rancher(https://try.rancher.com)
CloudGarage(https://cloudgarage.jp)
Packet(https://www.packet.co.jp)
24
利⽤無料!!
複数VMが安い!
ベアメタルが安い!
今回のデモ環境
25
お財布に優しい!!
デモの流れ(完成形)
26
5 Mesos環境ホストデプロイ3 RancherOSインストール
4 K8s環境ホストセットアップ
1 Try Rancherログイン
2 k8s /Mesos 環境の作成
参考構成(より安価に使う場合)
27
デモではCloudGarageは BOX3 / 2GB プラン を利⽤しています。BOX3 / 1GB プランだとKubernetes環境にはリソースが不⾜しますので、Packetと環境を⼊れ替えて構築してください(無料お試しプランは現在ポート制限があるので不向き)。
デモの流れ
28
5 Mesos環境ホストデプロイ3 RancherOSインストール
4 K8s環境ホストセットアップ
1 Try Rancherログイン
2 k8s /Mesos 環境の作成
29
https://try.rancher.com にアクセスし、必要に応じてお好みの表⽰⾔語に切り替えます。
30
”GitHubで認証”をクリックします。
31
GitHubにログインします。
32
認証内容を確認して、問題が無ければ”Authorizerancher”をクリックします。
33
TryRancherにログインできたことを確認します。
デモの流れ
34
5 Mesos環境ホストデプロイ3 RancherOSインストール
4 K8s環境ホストセットアップ
1 Try Rancherログイン
2 k8s /Mesos 環境の作成
デモの流れ
35
5 Mesos環境ホストデプロイ3 RancherOSインストール
4 K8s環境ホストセットアップ
1 Try Rancherログイン
2 k8s /Mesos 環境の作成
✓
できた!
デモの流れ
36
5 Mesos環境ホストデプロイ3 RancherOSインストール
4 K8s環境ホストセットアップ
1 Try Rancherログイン
2 k8s /Mesos 環境の作成
✓
37
画⾯左上の環境メニューから”環境を管理”をクリックします。
38
”環境のテンプレート”の内容を確認します。その後、”環境を追加”をクリックします。
39
”名前”と”詳細情報”に任意の内容を⼊⼒し、環境のテンプレートに”Kubernetes“を選択します。その後、”作成”をクリックします。
40
同様の⼿順で、“環境の追加”からMesos環境も作成します。
41
KubernetesとMesosの環境が作成できたことを確認します。
デモの流れ
42
5 Mesos環境ホストデプロイ3 RancherOSインストール
4 K8s環境ホストセットアップ
1 Try Rancherログイン
2 k8s /Mesos 環境の作成
✓
デモの流れ
43
5 Mesos環境ホストデプロイ3 RancherOSインストール
4 K8s環境ホストセットアップ
1 Try Rancherログイン
2 k8s /Mesos 環境の作成
✓✓
できた!
デモの流れ
44
5 Mesos環境ホストデプロイ3 RancherOSインストール
4 K8s環境ホストセットアップ
1 Try Rancherログイン
2 k8s /Mesos 環境の作成
✓✓
45
https://id.cloudgarage.jp/login にアクセスし、CloudGarageにログインします。
46
”+ インスタンスを追加する”をクリックします。
47
インスタンス選択では”2GBタイプ” を選択し、イメージ選択に”RancehrOS”の”1.0.3_64bit_ISO”を選択します(OSバージョンが異なっても可)。
48
”インスタンス名”を任意名で⼊⼒します。その後、”インスタンス作成”をクリックします。
49
インスタンスが作成されたことを確認します。その後、インスタス名をクリックします。
50
インスタンスのグローバルネットワーク側IPアドレスをメモしておきます。その後、”コンソール表⽰”をクリックします。
51
コマンドラインで ʼsudo passwd rancherʼ を実⾏し、rancherユーザのパスワードを変更します。このパスワードはSSHログインで使⽤します。
52
コマンドラインで ʼsudo ros enginelistʼ を実⾏し、使⽤可能なdockerバージョンを確認します。現在、Kubernetesは「1.12.XX」のみの対応です。
53
SSHログイン⽤の秘密鍵/公開鍵を作成します。今回はローカル環境に作業ディレクトリを作成し、’ssh-keygen –ted25519’を実⾏しています。
54
⽣成した公開鍵をコピーして”cloud-config.yml”を作成(1)し、内容を編集(2)します。編集後、メモしておいたIPアドレスを使い、インスタンスにrancherユーザでSCP転送(3)します。
cloud-config.ymlの内容#cloud-configssh_authorized_keys:- ssh-ed25519 AAAA…
rancher:docker:engine: docker-1.12.6
55
⽣成した公開鍵の内容をこの⾏に埋め込みます。
以前に確認した利⽤可能な“1.12.XX“のDockerバージョンをこの⾏で指定します。
YAML形式では”TAB”でのインデントは使えません。必ず”空⽩”で各⾏のインデントを⾏ってください。また、インデント位置を各⾏で揃える必要があります。
56
インスタンスにrancherユーザでSSHログイン(1)します。ログイン後、”cloud-config.yml”を確認(2)します。ʼsudo ros install–cconfig-engine.yml –d/dev/vdaʼ を実⾏(3)してRancherOSをインストールします。
57
インストールの継続と再起動を確認する質問が途中で表⽰されますがどちらも’y’と回答します。
58
インストールが完了したらISOを取り出します。コンソール表⽰を確認し、再起動が完了したら”ISOイメージのアンマウント”をクリックします。
59
ISOイメージのアンマウントの確認がでますので、”OK”をクリックします。
60
ISOイメージアンマウントの完了を確認します。この後、画⾯の指⽰に従ってインスタンスの再起動(強制)を⾏います(コマンド不可)。
61
CloudGarageの管理画⾯に戻り、インスタンスの詳細情報から”再起動(強制)”をクリックします。
62
インスタンス再起動(強制)の確認がでますので、”OK”をクリックします。
63
同様の⼿順を繰り返し、RancherOSインスタンスを合計3台稼働(全て2GBプラン)させ、さらに各インスタンスのグローバルIPの値をメモします。
64
各インスタンスのホスト公開鍵情報をローカル環境のknown_hostsから削除します。’ssh-keygen –R各IPアドレス’を実⾏します。
デモの流れ
65
5 Mesos環境ホストデプロイ3 RancherOSインストール
4 K8s環境ホストセットアップ
1 Try Rancherログイン
2 k8s /Mesos 環境の作成
✓✓
デモの流れ
66
5 Mesos環境ホストデプロイ3 RancherOSインストール
4 K8s環境ホストセットアップ
1 Try Rancherログイン
2 k8s /Mesos 環境の作成
✓✓
✓
できた!
デモの流れ
67
5 Mesos環境ホストデプロイ3 RancherOSインストール
4 K8s環境ホストセットアップ
1 Try Rancherログイン
2 k8s /Mesos 環境の作成
✓✓
✓
68
Rancher管理画⾯の左上にある環境メニューから、以前に作成したKubernetes環境をクリックします。
69
”ホストを追加”をクリックします。
70
”Custom”を選択し、5番の項⽬のコマンド内容をクリップボードにコピーします。
71
以前に⽣成した秘密鍵を利⽤し各インスタンスにrancherユーザでSSHログイン(1)します。ログイン後、コピーしたコマンドを実⾏します(2)。
1台⽬
72
2台⽬
2台⽬のインスタンスでも同様にコピーしたコマンドを実⾏します。
73
3台⽬
3台⽬のインスタンスでも同様にコピーしたコマンドを実⾏します。
74
コマンドの実⾏が完了したら、ログアウトして構いません。
75
Rancher管理画⾯の上部にあるインフラストラクチャメニューから、”ホスト”をクリックします。
76
各インスタンス(ホスト)内にKubernetes環境で必要となるコンテナ群が⾃動的にデプロイされていく様⼦が確認できます。
デモの流れ
77
5 Mesos環境ホストデプロイ3 RancherOSインストール
4 K8s環境ホストセットアップ
1 Try Rancherログイン
2 k8s /Mesos 環境の作成
✓✓
✓
デモの流れ
78
5 Mesos環境ホストデプロイ3 RancherOSインストール
4 K8s環境ホストセットアップ
1 Try Rancherログイン
2 k8s /Mesos 環境の作成
✓✓
✓✓
できた!
デモの流れ
79
5 Mesos環境ホストデプロイ3 RancherOSインストール
4 K8s環境ホストセットアップ
1 Try Rancherログイン
2 k8s /Mesos 環境の作成✓✓✓
✓
80
https://app.packet.net/#/loginにアクセスし、Packetにログインします。
81
Projectを新規作成します。既存のProjectを利⽤しても構いません。
82
Project Nameに任意名を⼊⼒します。
83
”Create Project”をクリックします。
84
Projectが作成されたら、Projectの管理画⾯より”Setting”をクリックします。
85
Project IDの値をメモしておきます。
86
画⾯左側の”APIKeys”をクリックします。その後、画⾯中央の”here”をクリックして、API Keyを新規作成します。
87
API KeyNameに任意名を⼊⼒し、”Generate”をクリックします。
88
TOKENの値をメモしておきます。
89
Rancher管理画⾯の左上にある環境メニューから、以前に作成したMesos環境をクリックします。
90
”ホストを追加”をクリックします。
91
”Packet”を選択(1)し、名前を任意名で⼊⼒(2)します。数のスライダーを動かし”3”に設定し(3)、メモしておいたProject ID(4)とAPI Key Token(5)を⼊⼒します。
92
任意のサイズ(1)とリージョン(2)を選択(1)し、その後、“⽣成” (2)をクリックします。(今回は ”Sunnyvale、 CA” および ”type0” を選択)
93
DockerMachineの仕組みにより、⾃動的にPacket上でServerの作成が開始されます。
94
Server作成の様⼦は、Packetの管理画⾯からも確認することが可能です。すべてのServerのStatusがGreenになるまで待ちます。
95
各ホスト内にMesos環境で必要となるコンテナ群が⾃動的にデプロイされていく様⼦が確認できます。
デモの流れ
96
5 Mesos環境ホストデプロイ3 RancherOSインストール
4 K8s環境ホストセットアップ
1 Try Rancherログイン
2 k8s /Mesos 環境の作成✓✓✓
✓
デモの流れ
97
5 Mesos環境ホストデプロイ3 RancherOSインストール
4 K8s環境ホストセットアップ
1 Try Rancherログイン
2 k8s /Mesos 環境の作成✓✓✓
✓✓
できた!
98
それでは、使ってみましょうか。
99
Kubernetes環境を使ってみよう
100
各ホストのデプロイが完了したら画⾯上部にあるKUBERNETESメニューから、”ダッシュボード”をクリックします。
101
”Kubernetes UI”をクリックします。
102
Kubernetes UIに接続できることを確認します。
103
Rancherの管理画⾯に戻り、上部にあるKUBERNETESメニューから”CLI”をクリックします。
104
KubernetesCLIの画⾯からは直接シェルでkubectlコマンドを実⾏することが可能(1)です。ローカル環境でkubectlコマンドを実⾏する場合は、”設定の⽣成”をクリック(2)します。
105
kubectlの為のコンフィグ内容が表⽰されるのでクリップボードにコピーします。
106
ローカル環境にkubectlをインストールします。macOSの場合は homebrewを利⽤します。’brewinstallkubectl’ を実⾏します。
107
ローカル環境に”~/.kube/config”を作成し、コピーした内容を保存します。
108
kubectlコマンドを実⾏して動作確認をします。‘kubectl version’でバージョン情報が確認できます。‘kubectl getnodes’でノード情報が確認できます。
109
kubectlコマンドを利⽤してKubernetes環境上にGuest Bookアプリケーションをデプロイします。‘kubectl create-fhttps://raw.githubusercontent.com/kubernetes/kubernetes/master/examples/guestbook/all-in-one/guestbook-all-in-one.yaml’ のコマンドを改⾏しないで実⾏します。
guestbook-all-in-one.yaml(参考)apiVersion: v1kind: Servicemetadata:
name: redis-masterlabels:
app: redistier: backendrole: master
110
spec:ports:- port: 6379
targetPort: 6379selector:
app: redistier: backendrole: master
---apiVersion: extensions/v1beta1kind: Deploymentmetadata:
name: redis-masterspec:
replicas: 1template:
metadata:labels:
app: redisrole: mastertier: backend
111
spec:containers:- name: master
image: gcr.io/google_containers/redis:e2e# image: redisresources:
requests:cpu: 100mmemory: 100Mi
ports:- containerPort: 6379
guestbook-all-in-one.yaml(参考)
---apiVersion: v1kind: Servicemetadata:
name: redis-slavelabels:
app: redistier: backendrole: slave
112
spec:ports:- port: 6379selector:
app: redistier: backendrole: slave
guestbook-all-in-one.yaml(参考)
---apiVersion: extensions/v1beta1kind: Deploymentmetadata:
name: redis-slavespec:
replicas: 2template:
metadata:labels:
app: redisrole: slavetier: backend
113
spec:containers:- name: slave
image: gcr.io/google_samples/gb-redisslave:v1resources:
requests:cpu: 100mmemory: 100Mi
env:- name: GET_HOSTS_FROM
value: dns # or Use -> value: envports:- containerPort: 6379
guestbook-all-in-one.yaml(参考)
---apiVersion: v1kind: Servicemetadata:
name: frontendlabels:
app: guestbooktier: frontend
114
spec:# type: LoadBalancer
ports:- port: 80selector:
app: guestbooktier: frontend
guestbook-all-in-one.yaml(参考)
---apiVersion: extensions/v1beta1kind: Deploymentmetadata:
name: frontendspec:
replicas: 3template:
metadata:labels:
app: guestbooktier: frontend
115
spec:containers:- name: php-redis
image: gcr.io/google-samples/gb-frontend:v4resources:
requests:cpu: 100mmemory: 100Mi
env:- name: GET_HOSTS_FROM
value: dns # or Use -> value: envports:- containerPort: 80
guestbook-all-in-one.yaml(参考)
116
KubernetesUIの画⾯左側にある”Workloads”をクリックすると、アプリケーションのデプロイの様⼦を確認することができます。
117
デプロイが完了するまで待機します。
118
デプロイが完了したら画⾯左側メニューにある”Services”をクリックし、frontendサービスにExternal Endpointがないことを確認します。
119
Rancher管理画⾯の上部にあるKUBERNETESメニューから”インフラストラクチャスタック”をクリックします。
120
kubernetes-ingress-lbの項⽬にある” ”をクリックし、”ロードバランサーを追加”を選択します。
121
名前(1)とリクエストホストポート(2)に任意の値を⼊⼒します。また、対象サービス(3)は”frontend”、対象ポート(4)は”80”をそれぞれ指定して”作成”(5)をクリックします。
122
ロードバランサーが作成されるまで待機します。完了後インフォメーションボタン(1)をクリックし、さらにポート情報のリンクをクリックします。
123
Guestbookアプリケーションにアクセスできることを確認します。
124
Rancherの管理画⾯に戻り、上部にあるインフラストラクチャメニューから、”ホスト”をクリックします。
125
画⾯左上の”システムコンテナの表⽰”のチェックを外し、LBのコンテナを確認します。LBコンテナが載っているホスト名をクリックします。
126
ホストの情報を確認します。
127
ホスト情報の中にあるコンテナ⼀覧からkubernetes-ingress-lbsのLBコンテナを⾒つけて、名前をクリックします。
128
LBコンテナの情報を確認します。
129
画⾯右上の” ”をクリックし、”シェルを実⾏”を選択します。
…
130
Rancherの管理画⾯からコンテナ内部のShellが利⽤できることを確認します。確認後は”閉じる”をクリックします。
131
画⾯右上の” ”をクリックし、”ログを⾒る”を選択します。
…
132
Rancherの管理画⾯からコンテナのログが確認できることを確認します。確認後は”閉じる”をクリックします。
133
Mesos環境を使ってみよう
134
各ホストのデプロイが完了したら画⾯上部にあるMESOSメニューから、”概要”をクリックします。
135
”Mesos UI”をクリックします。
136
Mesos UIに接続できることを確認します。
137
Mesos環境に切り替え”概要”の画⾯に進みます。画⾯左側にある”フレームワークを起動”をクリックします。
138
Rancherのカタログ画⾯に切り替わります。デフォルトでカタログにはMesosフレームワークの”Chronos”と”Marathon”が登録されています。
139
Chronosの”詳細をみる”をクリックします。
140
デフォルトの内容のまま”起動”をクリックします。
141
Marathonも同様にカタログの”詳細を⾒る”からデフォルトの内容のまま”起動”をクリックします。
142
インフラストラクチャスタックの画⾯にChronosとMarathonが追加されたことを確認します。chronosの名前の左側にある”+”をクリックし、展開された項⽬からポート番号をクリックします。
143
Chronos UIが表⽰されることを確認します。確認出来たら画⾯上部中央にある”+ New Job”をクリックします。
144
NAMEに任意のジョブ名、COMMANDに”date”、SCHEDULEの右端の欄に”T1M”をそれぞれ⼊⼒し、上部の”✓Create”をクリックします。
145
ChronosにJobが新しく登録され、さらに実⾏されたことを確認します。
146
Mesos UI上でも実⾏されたジョブのTaskが表⽰されることを確認します。確認後、Task右端の”Sandbox”をクリックします。
147
”stdout”をクリックし、実⾏したTaskの標準出⼒の内容を表⽰します。
148
dateコマンドが実⾏されたことを確認します。
149
1分間隔でJobが実⾏されている様⼦を確認します。
150
Rancherの管理画⾯に戻ります。インフラストラクチャスタックの中のmarathonの名前の左側にある”+”をクリックし、展開された項⽬からポート番号をクリックします。
151
Marathon UIが表⽰されることを確認します。確認出来たら画⾯中央にある”Create Application”をクリックします。
152
任意のID名を⼊⼒します。
153
左側メニューの”Docker Container”(1)をクリックし、Image名に”nginx”(2)を⼊⼒します。⼊⼒後、”Create Application”(3)をクリックします。
154
デプロイが完了するまで待機します。完了後、アプリケーション名をクリックします。
155
アプリケーションの情報を確認します。接続先IPアドレスの80番ポートにアクセスします。(表⽰のポート番号はここでは無視します)
156
nginxの画⾯が表⽰されることを確認します。
157
Marathon UIに戻ります。アプリケーション情報の画⾯左上にある”Scale Application”をクリックします。
158
アプリケーションをスケールする数として”3”を⼊⼒します。⼊⼒後、”Scale Application”をクリックします。
159
スケール数に応じてコンテナが増減します。スケールする様⼦をMarathon UI上で確認します。
160
Mesos UI上でも稼働しているAppplicationのTaskを確認することが可能です。
161
同様にRancherのホスト画⾯などからでもApplicationコンテナの情報を確認できます。
162
どう?ウシかわいいでしょ?
Rancherのことで困ったらRancher JPを頼ってください!!
⽇本のRancherコミュニティである”Rancher JP”では、Slackを開設しており毎⽇活発なコミュニケーションがとられています。Meetupやもくもく会も毎⽉開催されており、困ったことがあったらすぐに相談できる仲間が沢⼭みつかります。
Rancher JPについての詳細は・・・Rancher JPの活動や参加⽅法などは、次のスライドで公開しています。まずは気軽にSlackに参加してみてください!
163
”Rancher JPが仲間になりたそうにこちらを⾒ている”https://www.slideshare.net/tsukaman/rancher-jp
今後のRancher JPの予定09/01(⾦) Rancher Meetup #01 in Sapporo
https://rancherjp.connpass.com/event/63218/09/08(⾦) CROSS 2017(パネルディスカッションに参加)
http://2017.cross-party.com09/09(⼟)-10(⽇) OSC Tokyo / Fall(出展 & セミナー)
https://www.ospn.jp/osc2017-fall/09/13(⽔) Rancher Meetup Tokyo #09
https://rancherjp.connpass.com/event/63963/9/下旬 Rancher ハンズオン #03 & もくもく会(仮)
164ご参加お待ちしております!!
165
またな!