nikkie-ftnextの日記

イベントレポートや読書メモを発信

イベントレポート | お盆休み KubernetesとRancher講習+もくもく勉強会 #kujiraya

はじめに

いつも心は虹色に! nikkieです。
k8sのハンズオンに行ってきました。
Dockerを独学してdocker-composeでデプロイできるようにはなったのですが、
composeは本番環境向けではないと知ったので、コンテナの本番環境運用が知りたくて参加しました。

勉強会の概要

お盆休み KubernetesとRancher講習+もくもく勉強会 - connpass
上記リンクより抜粋。

普段なかなかDockerやKunernetesの勉強が追いついていない方、ぜひこの機会に初めの一歩を踏み出してください。
この勉強会では、コーチ(「コンテナ・ベース・オーケストレーション」の著者 cyberblack28 こと市川 豊)と共にハンズオン形式で学習していきます。難しいことは一先ずおいて、手を動かしてみましょう!
Rancherでkubernetesクラスタ構築、Guestbookアプリのデプロイ、Weavescopeによる可視化をやってみましょう!

講義部分の資料は先日のDevLOVEでの登壇をもとにされているそうです。

ハンズオンの資料はこちらです。
Introduction of Kubernetes & Rancher2.0

勉強会中にとったメモはこちらです。
scrapbox.io

ハンズオンでやったことを整理

Guestbookアプリをデプロイしました。1
f:id:nikkie-ftnext:20180812191539p:plain

  1. GCPで2台のVMインスタンスを立てる(rancher-server/rancher-host)
  2. 2台ともGCP コンソールからブラウザでSSH接続
  3. 2台ともDockerが使えるように設定(クライアント・サーバともにバージョンは 17.03.2-ce)
    • curl https://releases.rancher.com/install-docker/17.03.2.sh | sh
  4. rancher-serverの稼働(ブラウザからRancher UIにアクセスできるようにする)
    • sudo docker run -d --restart=unless-stopped -p 80:80 -p 443:443 rancher/rancher
  5. ブラウザでRancher UIにアクセス
    • GCPコンソールで確認できるVM(rancher-server)の外部IPを使う
    • Chromeがおすすめ(Safariで試みたところ、安全でない扱いでアクセスできなかった)
    • ブラウザからadminユーザのパスワード設定
    • Helmカタログ有効化
  6. クラスタ構築: Rancher UIを操作してrancher-hostで実行するクラスタ構築用コマンドを生成する
    • Rancher UIにてコマンド(dockerコマンド)生成
      • CUSTOM選択
      • Node Roleにetcd, Control Planeを追加
      • GCPコンソールで確認できるrancher-host内部IP、外部IPを設定 f:id:nikkie-ftnext:20180812191632p:plain
    • rancher-host(ssh接続)にてクラスタ構築コマンド実行
    • クラスタ構築後、Rancher UIでクラスタの状況が確認できる
  7. カタログからweavescopeをデプロイ
    • Rancher UIからIngressを作る(外部からアクセスできるようにする) f:id:nikkie-ftnext:20180812191757p:plain
    • 生成されたURLからweavescopeの画面を確認できる
  8. Guestbookアプリケーションデプロイ
    • Rancher UIのクラスタから「Launch kubectl」
    • kubectl apply
      • 構成はredis-masterが1つ、slaveが2つ、frontendが3つ2
    • Rancher UIからIngressを作る(外部からアクセスできるようにする) f:id:nikkie-ftnext:20180812191832p:plain
      • Rancher UIで分けて表示されるのは、Ingress作成時のnamespaceを分けているためか

最終的な状態(Rancher UIのクラスタからLaunch kubectl)

> kubectl get nodes
NAME           STATUS    ROLES                      AGE       VERSION
rancher-host   Ready     controlplane,etcd,worker   53m       v1.10.5
> kubectl get services
NAME                                       TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)        AGE
frontend                                   ClusterIP   10.43.70.55     <none>        80/TCP         41m
ingress-8f292af7be845e4b740a8e031deba7c7   NodePort    10.43.169.177   <none>        80:32513/TCP   38m
kubernetes                                 ClusterIP   10.43.0.1       <none>        443/TCP        54m
redis-master                               ClusterIP   10.43.157.208   <none>        6379/TCP       41m
redis-slave                                ClusterIP   10.43.90.210    <none>        6379/TCP       41m
> kubectl get pods
NAME                            READY     STATUS    RESTARTS   AGE
frontend-5c548f4769-bhtvt       0/1       Pending   0          48m
frontend-5c548f4769-mzpdc       1/1       Running   0          48m
frontend-5c548f4769-nk7cw       0/1       Pending   0          48m
redis-master-55db5f7567-q25w6   1/1       Running   0          48m
redis-slave-584c66c5b5-8cv5r    1/1       Running   0          48m
redis-slave-584c66c5b5-rq8p6    1/1       Running   0          48m
>

weavescope3
Guestbookのページにアクセスがあると、frontendがslaveからデータ取得し、
f:id:nikkie-ftnext:20180812191900p:plain Guestbookに書き込まれるとflontend→master→slaveとデータが書き込まれる様子が確認できます。 f:id:nikkie-ftnext:20180812191917p:plain

k8sの用語に理解が追いついていないのですが、ハンズオンのケースのノードはrancher-hostと理解しました。
今回は1ノードだから1Pod(Pod=デプロイ単位。中には3種のコンテナ)
f:id:nikkie-ftnext:20180812192737p:plain

感想

k8sは難しそうというイメージでしたが、Rancherのおかげで一歩目を踏み出すことができました。GUIは偉大ですね。
これをベースに黄色本(『コンテナ・ベース・オーケストレーション』)や教えていただいたリンク(katacodaなど)で情報収集続けていきます。
ハンズオンを開催いただき、どうもありがとうございました!


  1. ハンズオンの後、インスタンスは全て削除しています。

  2. yamlファイルのreplicasを確認:https://raw.githubusercontent.com/kubernetes/examples/master/guestbook/all-in-one/guestbook-all-in-one.yaml

  3. 「コンテナ構成をリアルタイム視覚化」するものだそうです。 http://pocketstudio.jp/log3/2015/07/14/weave-scope-container-visualization/