Upload
masahito-zembutsu
View
1.175
Download
2
Embed Size (px)
Citation preview
Rancher/Kubernetes入門ハンズオン資料
2016年11月8日(火)
さくらインターネット株式会社
Technology Evangelist 前佛雅人
@zembutsu
第 2 回さ くら とコンテナの夕べ ( さ く らの夕べ番外編 )
2
Rancherハンズオン
Rancher ハンズオン編の目的
Rancher のセットアップ方法を学ぶどのようにして Rancher サーバを動かすのか
ノードの登録方法を学ぶどのようにして複数台のサーバでコンテナ実行クラスタを構築するのか
サービスの実行方法を学ぶNginx のウェブサーバを実行するには?
Rocket.Chat のオンライン・チャットを実行するには?
4
1. さくらのクラウドにログイン
1.1. コントロールパネルの表示さくらのクラウド http://cloud.sakura.ad.jp/ から をクリックします。
5
1.2. 接続情報の確認配布資料のログイン情報を入力します。
入力後は をクリックします。
6
2. 仮想サーバの起動と接続
Rancher でクラスタを構成するため、3台の仮想サーバを起動します。
2.1. さくらのクラウドで仮想サーバを起動1. 【 さくらのクラウド(IaaS) 】をクリックします。
7
2. メニュー【 サーバ 】から【 追加 】をクリックします。
8
3. ディスクイメージは【 CentOS 7.2 64bit 】を使います。
9
4. 「サーバプラン」を【4GB / 2仮想コア】に変更します。「ディスクプラン」はそのままとします。
10
5. 【 管理ユーザのパスワード 】で root パスワードを設定します。※ 8文字以上の「アルファベット」「数字」「記号」の組み合わせが必要です。
11
6. ホスト名を【 rancher 】、作成数【 3 】として【 作成 】ボタンをクリックします。
12
7. 確認画面では【 作成 】をクリックします。
8. サーバ追加作業が完了するまで待ちます。起動後は【 閉じる 】をクリックします。
9. メニューの【 サーバ 】をクリックし、作成したサーバ「 rancher-01~03 」を確認します。
13
2.2. 仮想サーバへ接続1. IP アドレスを確認します。インターフェースを右クリックし【 IP アドレスをコピー 】を選びます。
2. Tera Term やターミナルなどを開き、3台のサーバに SSH でログインします。
• ログイン時のIDは「root」、パスワードは作成時に入力したもの
• ターミナルでは「ssh -l root <IPアドレス>」か「ssh root@<IPアドレス>」
14
$ ssh -l root 153.125.225.67The authenticity of host ‘153.125.225.67 (153.125.225.67)' can't be established.ECDSA key fingerprint is SHA256:MHsAGGJvASP/yj3JuhwuEH1BfbuJ8FebYyu7eWrjerI.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added ‘153.125.225.67' (ECDSA) to the list of known [email protected]'s password:[root@rancher-01 ~]#
実行例
ssh コマンドで仮想サーバに接続
接続を許可するので yes
パスワードを入力(画面に表示されません)
3. Docker Engine のセットアップ
15
エ ン ジ ンド ッ カ ー
$ docker
仮想サーバの準備が整いましたDocker コンテナを動かすためには、Docker Engine が必要です
3.1 安定版(stable)の最新バイナリを入れる1. パッケージを最新に更新します。
2. docker-engine パッケージをセットアップします。
16
# curl -fsSL https://get.docker.com/ | sh
# yum -y updateヤ ム ワ イ ア ッ プ デ ー ト
ス テ ー ブ ル
3.2. docker サービスの有効化とデーモン起動1. サービスを有効化(サーバのブート時に自動実行)します。
2. docker デーモンを起動します。
3. バージョン番号を確認します。
17
# systemctl enable docker.serviceCreated symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
systemctl を実行
# systemctl start docker.service
# docker version(省略)Server:Version: 1.12.3API version: 1.24Go version: go1.6.3Git commit: 6b644ecBuilt:OS/Arch: linux/amd64
docker コマンドで、クライアントとサーバ両方のバージョン表示
docker デーモンが起動していないと、サーバ側のバージョンを表示できない
システムシーティーエル
イ ネ ー ブ ル
ス タ ー ト
バ ー ジ ョ ン
3.3 firewalldの設定変更1. firewall-cmd で、管理用ポートとエージェント間の通信を許可します。
18
# firewall-cmd --add-port=8080/tcp --permanent ←ポート 8080 は rancher-01 のみ# firewall-cmd --add-port=3000/tcp --permanent# firewall-cmd --add-port=500/udp --permanent# firewall-cmd --add-port=4500/udp --permanent# firewall-cmd --reload
補足情報:CentOS 7 の場合
Docker を削除するには1. パッケージ情報を削除します。
2. データ用ディレクトリを削除します。
3. その他、設定ファイル等を置いた場合は、手作業で削除します。
19
# yum –y remove docker-engine
# rm –rf /var/lib/docker
リ ム ー ブ
アールエム
4. docker コマンドの基本操作
20
$ docker
Docker Hub
hello-world
Docker コンテナを実行するには Docker イメージが必要ですDocker(公式)イメージは Docker Hub から取得します
4.1. hello-world コンテナの実行とイメージ確認1. 【 docker run 】コマンドでコンテナを実行します。
21
# docker run hello-worldUnable to find image 'hello-world:latest' locallylatest: Pulling from library/hello-worldc04b14da8d14: Pull completeDigest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9Status: Downloaded newer image for hello-world:latest
Hello from Docker!This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:1. The Docker client contacted the Docker daemon.2. The Docker daemon pulled the "hello-world" image from the Docker Hub.3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker Hub account:https://hub.docker.com
For more examples and ideas, visit:https://docs.docker.com/engine/userguide/.
hello-world:latest イメージを実行
ローカルにイメージがないため、Docker Hubからダウンロード
ダウンロード(pull)完了
hello-world の出力
ド ッ カ ー ラ ン
ド ッ カ ー ラ ン ハ ロ ー ワ ー ル ド
ハ ロ ー ワ ー ル ド
プ ル
2. 【 docker ps 】コマンドで、コンテナの状態を確認します。
• CONTAINER ID … コンテナごとのユニークな ID• IMAGE … コンテナの元になったイメージ名• CREATED … コンテナの作成時間• STATUS … 現在の状態(ステータス)。「Exited (0)」は正常終了• PORTS … ポートをホスト側に割り当て(マッピング時)は情報を表示• NAMES … コンテナ名。実行時に指定しなければ、「形容詞_人名」を自動組み合わせ
3. 【 docker images 】で、ローカル上のイメージを一覧表示します。
• REPOSITORY … リポジトリ名• TAG … タグ名• IMAGE ID … イメージ ID• CREATED … 作成時• SIZE … イメージの使用容量
22
# docker ps -aCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES6d47af69a31b hello-world "/hello" 9 minutes ago Exited (0) 9 minutes ago awesome_varahamihira
オプション「-a」は全て(all)のコンテナを表示
# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEhello-world latest c54a2cc56cbb 3 months ago 1.848 kB
ピーエス
イ メ ー ジ ズ
4.2. Ubuntu コンテナの実行hello-world イメージを使ったコンテナ実行は、画面にメッセージを表示するシンプルなものでした。次は、サーバのように操作可能な Linux ディストリビューションのコンテナを実行します。
1. 【 docker pull 】コマンドで ubuntu 公式イメージを取得します。
2. ダウンロードしたイメージを【 docker images 】で確認します。
23
# docker pull ubuntuUsing default tag: latestlatest: Pulling from library/ubuntu
6bbedd9b76a4: Pull completefc19d60a83f1: Pull completede413bb911fd: Pull complete2879a7ad3144: Pull complete668604fde02e: Pull completeDigest: sha256:2d44ae143feeb36f4c898d32ed2ab2dffeb3a573d2d8928646dfc9cb7deb1315Status: Downloaded newer image for ubuntu:lates
# docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEubuntu latest f753707788c5 2 weeks ago 127.1 MBhello-world latest c54a2cc56cbb 3 months ago 1.848 kB
プ ル
3. ubuntu:latest コンテナを実行します(コロン「:」記号の後ろはタグ)。
4. Ubuntu のバージョンを確認します。
5. ps コマンドを実行します。コンテナ実行時の「/bin/bash」のPIDが「1」なのを確認します。
6. コンテナを終了します。
24
# docker run -i -t ubuntu:latest /bin/bashroot@27e3c865bd61:/#
# cat /etc/issueUbuntu 16.04.1 LTS ¥n ¥l
# ps -efUID PID PPID C STIME TTY TIME CMDroot 1 0 0 08:09 ? 00:00:00 /bin/bashroot 12 1 0 08:14 ? 00:00:00 ps -efl
root@27e3c865bd61:/# exitexit[root@docker ~]#
レ イ テ ス ト
プロンプトのホスト名はコンテナID
5. Rancher のセットアップ
25
5.1 Rancher サーバ用コンテナの起動1. 「rancher-01」上で Rancher サーバを起動します。【 rancher/server 】コンテナを起動します。
2. 「rancher/server」コンテナの起動状態を確認します。
起動すると、画面上のログに以下のような文字列が現れます。Ctrl+C で中断します。
3. ブラウザからホスト「rancher-01」のポート【 8080 】を開きます。
26
# docker run -d --restart=unless-stopped -p 8080:8080 rancher/server
# docker logs -f $(docker ps -lq)
10:06:51.173 [main] INFO ConsoleStatus - [DONE ] [47710ms] Startup Succeeded, Listening on port 8081time="2016-11-07T10:06:51Z" level=info msg="Starting websocket proxy. Listening on [:8080], Proxying to cattle API at [localhost:8081], Monitoring parent pid [7]."
5.2 Rancher のセキュリティ設定初回設定時は管理画面にパスワードが施されていません。GitHub やユーザ情報を使った認証設定を行う必要があります。ここではユーザのパスワードを設定します。
1. メニューの 【 ADMIN 】 から 【 Access Control 】 を選びます。
27
2. Access Control の認証方式 【 LOCAL 】をクリックします。
28
3. 「Setup an Admin user」(管理ユーザのセットアップ)の各フォームを入力します。
4. 【 Enable Local Auth 】(ローカル認証の有効化)をクリックします。
29
5.3 Rancher ホストの登録Rancher サーバに Rancher の管理対象ホストを追加します。ここでは rancher-01 自身を追加しますが、同様の手順で rancher-02 rancher-03 を追加できます。
1. メニューの【 Default 】から【 Default 】をクリックします。
2. 【 Add Host 】をクリックします。
30
3. 「This site’s address」(このサイトのアドレス)が選択された状態のまま、【 Save 】(保存)をクリックします。
31
4. 次のホスト追加画面では【 Custom 】が選択されたままの状態を確認します。
32
5. 「4」の入力フォームに【 rancher-01 】の IP アドレスを追加します。
33
6. 「5」にエージェント起動用スクリプトが表示されますので、コピーボタンをクリックします。コピーしたコマンドはテキスト・エディタに貼り付けます。
7. 【 Close 】をクリックします。
34
8. ホスト「rancher-01」に SSH ログインした画面を開きます。
9. 先ほどコピーしたホスト追加用コマンドを実行します。
10. メニューの【 INFRASTRUCTURE 】から【 HOSTS 】を選択し、画面上に「rancher-01」が見えるのを確認します(ACTIVE になるまで1分ほどかかります)。ホスト名【 rancher-01 】をクリックすると、詳細なリソースを表示します。
35
# sudo docker run -e CATTLE_AGENT_IP="153.125.225.67" -d --privileged –v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.0.2 http://153.125.225.67:8080/v1/scripts/BBB1DA5F2ADA22912343:1478570400000:BedWByUmUg9ySm4t2Y3ktXile9o
実行例
6. Rancher でコンテナ実行
36
nginx rocket.chat
6.1 手動で Nginx コンテナを起動1. メニューの【 STACKS 】から【 User 】をクリックします。
2. 「Default」スタックの【 Add Service 】をクリックします。
37
3. nginx のサービス情報を登録します。
38
4. ページ下方の【 Create 】をクリックします。
5. 画面が切り替わり「Activating」が「Active」になるまで待ちます。
39
6. 【 mynginx 】をクリックし、詳細画面を開きます。
7. 【 Ports 】タブをクリックします。
40
8. 【 IP アドレス 】をクリックすると、ブラウザが http://<rancher-01>:8081/ にアクセスし、Nginx の初期画面を表示するのを確認します。
41
6.2 カタログで複数コンテナの自動実行手動でサービス登録を行うほかに、複数のコンテナをまとめて起動できるテンプレートのような機能があります。ここでは Rocket.Chat 用のイメージと、Hubot、MongoDB を一括セットアップします。
1. メニューの【 CATALOG 】をクリックします。
2. 検索フォームに【 rocket 】と入力するか、画面上で【 RocketChat 】を探し、【 View Detials 】をクリックします。
42
3. ページ下方の【 Launch 】をクリックします。
4. 全てのコンテナが Active になるまで待ちます。この間、リンク・グラフボタンをクリックすると、コンテナ間の接続状態を確認できます。
43
5. 画面上の【 rocketchat 】をクリックします。
44
6. 「Ports」に表示されている【 IP アドレス:3000 】をクリックします。
7. Rocket.Chat が利用可能になります。
45
7. Rancher ホスト情報の削除
7.1 ユーザ・スタックの削除1. メニューの【 STACKS 】から【 User 】を選びます。
2. 不要なサービスを削除するため、右端のメニューから【 DELETE 】を選択します。
7.2 ホストの削除1. 【 INFRASTRUCTURE 】から【 Hosts 】をクリックします。
2. メニューから【 DEACTIVATE 】を選びます。
3. メニューから【 DELETE 】を選びます。
4. 確認画面で【 DELETE 】をクリックします。
46
7.3 エージェントの停止1. ホスト「rancher-01」上で【 docker ps 】コマンドを実行します。
2. 「rancher/agent」は不要なので停止します。
47
# docker ps
# docker stop $(docker ps -q --filter name=rancher)
48
Kubernetes on Rancherハンズオン
Kubernetes on Rancher 編の目的
Kubernetes のセットアップ方法を学ぶどのように Rancher を操作するのか
各ホスト間はどのような接続状況なのか
サービスの実行方法を学ぶRancher からどのように Kubernetes を管理するのか
可用性の高いウェブサーバを実行するには
49
8. Kubernetes クラスタの作成準備
50
8.1 Kubernetes 環境の追加1. メニューの【 Environment Default 】から【 Manage Environments 】をクリックします。
2. 【 Add Environment 】をクリックします。
51
3. 「Container Orchestration」の【 Kubernetes 】をクリックします。
4. 「Name」に【 k8s 】など入力します。
52
5. 【 Create 】ボタンを押し、環境を追加します。
6. 環境一覧に「kubernetes」があるのを確認します。
53
8.2 Kubernetes クラスタにホストを追加1. メニューの【 Default 】から【 k8s 】をクリックします。
2. 【 Add Host 】をクリックします。
54
3. ステップ「4」のフォームに【 rancher-01 】の IP アドレスを入力します。
4. ステップ「5」の内容をコピーし、サーバ rancher-01 の SSH 端末上で実行します。
55
# sudo docker run -e CATTLE_AGENT_IP="153.125.225.67" -d --privileged -v /var/run/docker.sock:/var/run/docker.sock -v /var/lib/rancher:/var/lib/rancher rancher/agent:v1.0.2 http://153.125.225.67:8080/v1/scripts/C5058B7B2F046CA3839F:1478581200000:Y00XljqZt4T8U936W9gEsbybg
実行例
5. 約1分ほど待つとか、【 Close 】をクリックします。画面が「Setting up Kubernetes...」約1分ほど待つとか、【 Close 】をクリックします。画面が `Setting up Kubernetes...` と変わり、セットアップが進行します。 と変わり、セットアップが進行します。
6. 画面に「kubernetes」サービスが自動的に表示されます。
56
7. メニューの 【 INFRASTRUCTURE 】から【 Host 】をクリックします。
8. 【 Add Host 】をクリックします。
9. 【 rancher-02 】と【 rancher-03 】に対しても、手順「2~5」の登録作業を繰り返します。
10. 【 Close 】をクリックして、しばらく待ちます。各サーバでエージェントのログを表示するには、次のコマンドを実行します。
57
# docker logs –f $(docker ps -ql)
11. ログに「Successfully registered node rancher-xx」が出て、【 INFRASTRUCTURE 】から【 Host 】をクリックし、各ノードの「etcd」が有効になるまで待ちます。
58
12. これで、3つの Kubernetes ノードは同一ネットワークにつながりました。各ノードの「etcd」の IP アドレスに対して、相互に `ping` が通るのを確認しましょう。
59
[root@rancher-03 ~]# ping 10.42.140.18PING 10.42.140.18 (10.42.140.18) 56(84) bytes of data.64 bytes from 10.42.140.18: icmp_seq=1 ttl=62 time=0.930 ms64 bytes from 10.42.140.18: icmp_seq=2 ttl=62 time=0.562 ms64 bytes from 10.42.140.18: icmp_seq=3 ttl=62 time=0.602 ms
9. Kubernetes を使う
9.1 カタログでゲストブックを動かす1. メニュー【 CATALOG 】をクリックします。
2. 【 K8s Example Geustbook 】の【 View Details 】をクリックします。
60
3. ページ下方の【 Launch 】をクリックします。
4. メニュー【 KUBERNETES 】から【 Services 】をクリックします。
5. 【 frontend 】をクリックし、「Pods」が順次作成されるのを確認します。
6. 同様に【 KUBERNETES 】から【 Replication Controller 】と【 Pods 】を確認します。
7. メニューの【 KUBERNETES】から【 System 】をクリックします。
8. 【 kubernetees-loadbalancers 】をクリックします。
61
9. リンク・グラフボタンをクリックします。
62
10. 【 lb- 】で始まるアイコンをクリックすると、ゲストブックのポートを確認できます。
63
11. ゲストブックを確認します。
12. あとは、色々さわってみましょう!
• スケールアウト、スケールイン
• コンテナの停止
• 手動でコンテナ(サービスの追加)
• ロードバランサ(HAproxy)を試す
• Ingress ロードバランサを試す
64
65
Q&A
66