Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編

7.679 Aufrufe

Veröffentlicht am

https://sakura-kanto.doorkeeper.jp/events/53172

Veröffentlicht in: Technologie
  • Als Erste(r) kommentieren

Rancher/Kubernetes入門ハンズオン資料~第2回さくらとコンテナの夕べ #さくらの夕べ 番外編

  1. 1. Rancher/Kubernetes 入門ハンズオン資料 2016年11月8日(火) さくらインターネット株式会社 Technology Evangelist 前佛雅人 @zembutsu 第 2 回 さ く ら と コ ン テ ナ の 夕 べ ( さ く ら の 夕 べ 番 外 編 )
  2. 2. 2 Rancherハンズオン
  3. 3. 3
  4. 4. Rancher ハンズオン編の目的 Rancher のセットアップ方法を学ぶ どのようにして Rancher サーバを動かすのか ノードの登録方法を学ぶ どのようにして複数台のサーバでコンテナ実行クラスタを構築するのか サービスの実行方法を学ぶ Nginx のウェブサーバを実行するには? Rocket.Chat のオンライン・チャットを実行するには? 4
  5. 5. 1. さくらのクラウドにログイン 1.1. コントロールパネルの表示 さくらのクラウド http://cloud.sakura.ad.jp/ から をクリックします。 5
  6. 6. 1.2. 接続情報の確認 配布資料のログイン情報を入力します。 入力後は をクリックします。 6
  7. 7. 2. 仮想サーバの起動と接続 Rancher でクラスタを構成するため、3台の仮想サーバを起動します。 2.1. さくらのクラウドで仮想サーバを起動 1. 【 さくらのクラウド(IaaS) 】をクリックします。 7
  8. 8. 2. メニュー【 サーバ 】から【 追加 】をクリックします。 8
  9. 9. 3. ディスクイメージは【 CentOS 7.2 64bit 】を使います。 9
  10. 10. 4. 「サーバプラン」を【4GB / 2仮想コア】に変更します。「ディスクプラン」はそのままとします。 10
  11. 11. 5. 【 管理ユーザのパスワード 】で root パスワードを設定します。 ※ 8文字以上の「アルファベット」「数字」「記号」の組み合わせが必要です。 11
  12. 12. 6. ホスト名を【 rancher 】、作成数【 3 】として【 作成 】ボタンをクリックします。 12
  13. 13. 7. 確認画面では【 作成 】をクリックします。 8. サーバ追加作業が完了するまで待ちます。起動後は【 閉じる 】をクリックします。 9. メニューの【 サーバ 】をクリックし、作成したサーバ「 rancher-01~03 」を確認します。 13
  14. 14. 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.67 The 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)? yes Warning: Permanently added ‘153.125.225.67' (ECDSA) to the list of known hosts. root@153.125.225.67's password: [root@rancher-01 ~]# 実行例 ssh コマンドで仮想サーバに接続 接続を許可するので yes パスワードを入力(画面に表示されません)
  15. 15. 3. Docker Engine のセットアップ 15 エ ン ジ ンド ッ カ ー $ docker 仮想サーバの準備が整いました Docker コンテナを動かすためには、Docker Engine が必要です
  16. 16. 3.1 安定版(stable)の最新バイナリを入れる 1. パッケージを最新に更新します。 2. docker-engine パッケージをセットアップします。 16 # curl -fsSL https://get.docker.com/ | sh # yum -y update ヤ ム ワ イ ア ッ プ デ ー ト ス テ ー ブ ル
  17. 17. 3.2. docker サービスの有効化とデーモン起動 1. サービスを有効化(サーバのブート時に自動実行)します。 2. docker デーモンを起動します。 3. バージョン番号を確認します。 17 # systemctl enable docker.service Created 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.3 API version: 1.24 Go version: go1.6.3 Git commit: 6b644ec Built: OS/Arch: linux/amd64 docker コマンドで、クライアントとサーバ両方のバージョン表示 docker デーモンが起動していないと、 サーバ側のバージョンを表示できない システムシーティーエ ル イ ネ ー ブ ル ス タ ー ト バ ー ジ ョ ン
  18. 18. 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
  19. 19. 補足情報:CentOS 7 の場合 Docker を削除するには 1. パッケージ情報を削除します。 2. データ用ディレクトリを削除します。 3. その他、設定ファイル等を置いた場合は、手作業で削除します。 19 # yum –y remove docker-engine # rm –rf /var/lib/docker リ ム ー ブ アールエム
  20. 20. 4. docker コマンドの基本操作 20 $ docker Docker Hub hello-world Docker コンテナを実行するには Docker イメージが必要です Docker(公式)イメージは Docker Hub から取得します
  21. 21. 4.1. hello-world コンテナの実行とイメージ確認 1. 【 docker run 】コマンドでコンテナを実行します。 21 # docker run hello-world Unable to find image 'hello-world:latest' locally latest: Pulling from library/hello-world c04b14da8d14: Pull complete Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9 Status: 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 の出力 ド ッ カ ー ラ ン ド ッ カ ー ラ ン ハ ロ ー ワ ー ル ド ハ ロ ー ワ ー ル ド プ ル
  22. 22. 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 -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6d47af69a31b hello-world "/hello" 9 minutes ago Exited (0) 9 minutes ago awesome_varahamihira オプション「-a」は全て(all)のコンテナを表示 # docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest c54a2cc56cbb 3 months ago 1.848 kB ピーエス イ メ ー ジ ズ
  23. 23. 4.2. Ubuntu コンテナの実行 hello-world イメージを使ったコンテナ実行は、画面にメッセージを表示するシンプルなもの でした。次は、サーバのように操作可能な Linux ディストリビューションのコンテナを実行します。 1. 【 docker pull 】コマンドで ubuntu 公式イメージを取得します。 2. ダウンロードしたイメージを【 docker images 】で確認します。 23 # docker pull ubuntu Using default tag: latest latest: Pulling from library/ubuntu 6bbedd9b76a4: Pull complete fc19d60a83f1: Pull complete de413bb911fd: Pull complete 2879a7ad3144: Pull complete 668604fde02e: Pull complete Digest: sha256:2d44ae143feeb36f4c898d32ed2ab2dffeb3a573d2d8928646dfc9cb7deb1315 Status: Downloaded newer image for ubuntu:lates # docker images REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest f753707788c5 2 weeks ago 127.1 MB hello-world latest c54a2cc56cbb 3 months ago 1.848 kB プ ル
  24. 24. 3. ubuntu:latest コンテナを実行します(コロン「:」記号の後ろはタグ)。 4. Ubuntu のバージョンを確認します。 5. ps コマンドを実行します。コンテナ実行時の「/bin/bash」のPIDが「1」なのを確認します。 6. コンテナを終了します。 24 # docker run -i -t ubuntu:latest /bin/bash root@27e3c865bd61:/# # cat /etc/issue Ubuntu 16.04.1 LTS ¥n ¥l # ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 08:09 ? 00:00:00 /bin/bash root 12 1 0 08:14 ? 00:00:00 ps -efl root@27e3c865bd61:/# exit exit [root@docker ~]# レ イ テ ス ト プロンプトのホスト名はコンテナID
  25. 25. 5. Rancher のセットアップ 25
  26. 26. 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 8081 time="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]."
  27. 27. 5.2 Rancher のセキュリティ設定 初回設定時は管理画面にパスワードが施されていません。GitHub やユーザ情報を使った認証設定 を行う必要があります。ここではユーザのパスワードを設定します。 1. メニューの 【 ADMIN 】 から 【 Access Control 】 を選びます。 27
  28. 28. 2. Access Control の認証方式 【 LOCAL 】をクリックします。 28
  29. 29. 3. 「Setup an Admin user」(管理ユーザのセットアップ)の各フォームを入力します。 4. 【 Enable Local Auth 】(ローカル認証の有効化)をクリックします。 29
  30. 30. 5.3 Rancher ホストの登録 Rancher サーバに Rancher の管理対象ホストを追加します。ここでは rancher-01 自身を追加しま すが、同様の手順で rancher-02 rancher-03 を追加できます。 1. メニューの【 Default 】から【 Default 】をクリックします。 2. 【 Add Host 】をクリックします。 30
  31. 31. 3. 「This site’s address」(このサイトのアドレス)が選択された状態のまま、【 Save 】(保存)を クリックします。 31
  32. 32. 4. 次のホスト追加画面では【 Custom 】が選択されたままの状態を確認します。 32
  33. 33. 5. 「4」の入力フォームに【 rancher-01 】の IP アドレスを追加します。 33
  34. 34. 6. 「5」にエージェント起動用スクリプトが表示されますので、コピーボタンをクリックします。 コピーしたコマンドはテキスト・エディタに貼り付けます。 7. 【 Close 】をクリックします。 34
  35. 35. 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 実行例
  36. 36. 6. Rancher でコンテナ実行 36 nginx rocket.chat
  37. 37. 6.1 手動で Nginx コンテナを起動 1. メニューの【 STACKS 】から【 User 】をクリックします。 2. 「Default」スタックの【 Add Service 】をクリックします。 37
  38. 38. 3. nginx のサービス情報を登録します。 38
  39. 39. 4. ページ下方の【 Create 】をクリックします。 5. 画面が切り替わり「Activating」が「Active」になるまで待ちます。 39
  40. 40. 6. 【 mynginx 】をクリックし、詳細画面を開きます。 7. 【 Ports 】タブをクリックします。 40
  41. 41. 8. 【 IP アドレス 】をクリックすると、ブラウザが http://<rancher-01>:8081/ にアクセスし、Nginx の初期画面を表示するのを確認します。 41
  42. 42. 6.2 カタログで複数コンテナの自動実行 手動でサービス登録を行うほかに、複数のコンテナをまとめて起動できるテンプレートのような機能が あります。ここでは Rocket.Chat 用のイメージと、Hubot、MongoDB を一括セットアップします。 1. メニューの【 CATALOG 】をクリックします。 2. 検索フォームに【 rocket 】と入力するか、画面上で【 RocketChat 】を探し、【 View Detials 】を クリックします。 42
  43. 43. 3. ページ下方の【 Launch 】をクリックします。 4. 全てのコンテナが Active になるまで待ちます。この間、リンク・グラフボタンをクリックすると、 コンテナ間の接続状態を確認できます。 43
  44. 44. 5. 画面上の【 rocketchat 】をクリックします。 44
  45. 45. 6. 「Ports」に表示されている【 IP アドレス:3000 】をクリックします。 7. Rocket.Chat が利用可能になります。 45
  46. 46. 7. Rancher ホスト情報の削除 7.1 ユーザ・スタックの削除 1. メニューの【 STACKS 】から【 User 】を選びます。 2. 不要なサービスを削除するため、右端のメニューから【 DELETE 】を選択します。 7.2 ホストの削除 1. 【 INFRASTRUCTURE 】から【 Hosts 】をクリックします。 2. メニューから【 DEACTIVATE 】を選びます。 3. メニューから【 DELETE 】を選びます。 4. 確認画面で【 DELETE 】をクリックします。 46
  47. 47. 7.3 エージェントの停止 1. ホスト「rancher-01」上で【 docker ps 】コマンドを実行します。 2. 「rancher/agent」は不要なので停止します。 47 # docker ps # docker stop $(docker ps -q --filter name=rancher)
  48. 48. 48 Kubernetes on Rancher ハンズオン
  49. 49. Kubernetes on Rancher 編の目的 Kubernetes のセットアップ方法を学ぶ どのように Rancher を操作するのか 各ホスト間はどのような接続状況なのか サービスの実行方法を学ぶ Rancher からどのように Kubernetes を管理するのか 可用性の高いウェブサーバを実行するには 49
  50. 50. 8. Kubernetes クラスタの作成準備 50
  51. 51. 8.1 Kubernetes 環境の追加 1. メニューの【 Environment Default 】から【 Manage Environments 】をクリックします。 2. 【 Add Environment 】をクリックします。 51
  52. 52. 3. 「Container Orchestration」の【 Kubernetes 】をクリックします。 4. 「Name」に【 k8s 】など入力します。 52
  53. 53. 5. 【 Create 】ボタンを押し、環境を追加します。 6. 環境一覧に「kubernetes」があるのを確認します。 53
  54. 54. 8.2 Kubernetes クラスタにホストを追加 1. メニューの【 Default 】から【 k8s 】をクリックします。 2. 【 Add Host 】をクリックします。 54
  55. 55. 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 実行例
  56. 56. 5. 約1分ほど待つとか、【 Close 】をクリックします。画面が「Setting up Kubernetes...」約1分ほど 待つとか、【 Close 】をクリックします。画面が `Setting up Kubernetes...` と変わり、セット アップが進行します。 と変わり、セットアップが進行します。 6. 画面に「kubernetes」サービスが自動的に表示されます。 56
  57. 57. 7. メニューの 【 INFRASTRUCTURE 】から【 Host 】をクリックします。 8. 【 Add Host 】をクリックします。 9. 【 rancher-02 】と【 rancher-03 】に対しても、手順「2~5」の登録作業を繰り返します。 10. 【 Close 】をクリックして、しばらく待ちます。各サーバでエージェントのログを表示するには、次の コマンドを実行します。 57 # docker logs –f $(docker ps -ql)
  58. 58. 11. ログに「Successfully registered node rancher-xx」が出て、【 INFRASTRUCTURE 】から 【 Host 】をクリックし、各ノードの「etcd」が有効になるまで待ちます。 58
  59. 59. 12. これで、3つの Kubernetes ノードは同一ネットワークにつながりました。各ノードの「etcd」の IP アドレスに対して、相互に `ping` が通るのを確認しましょう。 59 [root@rancher-03 ~]# ping 10.42.140.18 PING 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 ms 64 bytes from 10.42.140.18: icmp_seq=2 ttl=62 time=0.562 ms 64 bytes from 10.42.140.18: icmp_seq=3 ttl=62 time=0.602 ms
  60. 60. 9. Kubernetes を使う 9.1 カタログでゲストブックを動かす 1. メニュー【 CATALOG 】をクリックします。 2. 【 K8s Example Geustbook 】の【 View Details 】をクリックします。 60
  61. 61. 3. ページ下方の【 Launch 】をクリックします。 4. メニュー【 KUBERNETES 】から【 Services 】をクリックします。 5. 【 frontend 】をクリックし、「Pods」が順次作成されるのを確認します。 6. 同様に【 KUBERNETES 】から【 Replication Controller 】と【 Pods 】を確認します。 7. メニューの【 KUBERNETES】から【 System 】をクリックします。 8. 【 kubernetees-loadbalancers 】をクリックします。 61
  62. 62. 9. リンク・グラフボタンをクリックします。 62
  63. 63. 10. 【 lb- 】で始まるアイコンをクリックすると、ゲストブックのポートを確認できます。 63
  64. 64. 11. ゲストブックを確認します。 12. あとは、色々さわってみましょう! • スケールアウト、スケールイン • コンテナの停止 • 手動でコンテナ(サービスの追加) • ロードバランサ(HAproxy)を試す • Ingress ロードバランサを試す 64
  65. 65. 65
  66. 66. Q&A 66

×