【IBM Cloud k8s検証メモ】OSSのコンテナ監視ツール Weave Scope を利用してKubernetesリソース監視


Kubernetes(以下k8s)を利用すると、クラスタ環境でコンテナを運用するで優れた環境であると同時に、コンテナをホストするサーバーに、複数のアプリのコンテナが共存し、仮想ネットワークが形成され、密接に連携するために、k8s の [Web UI (Dashboard)](https://kubernetes.io/docs/tasks/access-application-cluster/web-ui-dashboard/) よりも詳細に把握できるツールが欲しいと感じていました。

そんな要望に応えてくれるのが、[Weaveworks](https://www.weave.works/)のオープンソースのコンテナ監視ツール [Weave Scope](https://github.com/weaveworks/scope) です。 そして、これを Bluemix k8s のクラスタ環境を監視できる様に[サンプルYAML](https://github.com/IBM-Bluemix/kube-samples/tree/master/weave-scope)と[ガイド](https://console.bluemix.net/docs/containers/cs_cluster.html#cs_weavescope)が提供されています。

そこで、この記事は Bluemix Docの[ガイド](https://console.bluemix.net/docs/containers/cs_cluster.html#cs_weavescope)を参考にしながら、「[Bluemix k8sで、アプリをHTTPSとドメイン名でアクセスする設定方法のメモ](http://qiita.com/MahoTakara/items/34565e3c4095b6701a6a)」で作ったk8sクラスタとアプリを Weave Scope に適用した記録です。


## Wave Scope の概要
Weave Scope は、アプリのマップを自動的に生成し、コンテナ化されたアプリを直感的かつリアルタイムに把握、監視、および制御できるようにします。

### Dockerコンテナのリアリタイムな把握

画面上部にある CONTAINERS をクリックすると、各ポットに配置されたアプリ・コンテナを表示し、CPUやメモリの使用率をアイコンに見ることができます。

![スクリーンショット 2017-09-14 1.01.27.png](https://qiita-image-store.s3.amazonaws.com/0/42829/f17a5a26-e2ec-4565-3f31-fe372c08508b.png "スクリーンショット 2017-09-14 1.01.27.png")

### コンテキストの詳細なリンク

前述の図中のexpress-containerをクリックすると、コンテナのコンテキストメトリック、タグ、およびメタデータを表示します。　これによって、特定のホストまたはサービスの中で、最も多くのCPUやメモリを消費するコンテナを簡単に見つけることができます。

![スクリーンショット 2017-09-14 1.07.47.png](https://qiita-image-store.s3.amazonaws.com/0/42829/69984fe6-8e7f-6cd8-d172-4f4200d86bef.png "スクリーンショット 2017-09-14 1.07.47.png")

### コンテナのコンソール出力とログイン

詳細ウィンドのモニタのアイコンをクリックすることで、コンテナのコンソール出力をブラウザ上に表示できます。 

![スクリーンショット 2017-09-14 1.21.24.png](https://qiita-image-store.s3.amazonaws.com/0/42829/5c92263e-104f-e004-6d6a-534f4bd9657d.png "スクリーンショット 2017-09-14 1.21.24.png")

また、">_"　のアイコンをクリックすることで、コンテナへログインして、コマンドを実行することができます。

![スクリーンショット 2017-09-14 1.21.44.png](https://qiita-image-store.s3.amazonaws.com/0/42829/85978354-fc89-bf9d-8f63-473e0a7d88a9.png "スクリーンショット 2017-09-14 1.21.44.png")

### クラスタ全体の状態を直感的に把握

画面左下にあるフィルタを操作して、k8sクラスタの全容を把握することもできます。

![スクリーンショット 2017-09-14 1.28.11.png](https://qiita-image-store.s3.amazonaws.com/0/42829/69a55665-0c5d-2ef2-d883-3062fa13c8f9.png "スクリーンショット 2017-09-14 1.28.11.png")


### PODとDeploymentの関係

ブラウザ画面上部のPOD列を選択することで、コントローラやサービスのPOD数と連携を把握することができます。


![スクリーンショット 2017-09-14 1.53.04.png](https://qiita-image-store.s3.amazonaws.com/0/42829/da275c16-671a-b965-407e-3bc7b9199e77.png "スクリーンショット 2017-09-14 1.53.04.png")


### クラスタ構成のサーバーリソースの把握

HOSTSをクリックすることで、インターネットとの受信と送信、および、サーバー関係の図を見ることができます。

![スクリーンショット 2017-09-14 1.53.54.png](https://qiita-image-store.s3.amazonaws.com/0/42829/998f5eef-b451-10e9-4000-95e7f06169c0.png "スクリーンショット 2017-09-14 1.53.54.png")


## Weave Scope のドキュメント

Weave Scope のマニュアルは、https://www.weave.works/docs/scope/latest/introducing/ にありますので、詳しく知りたい方は、どうぞ、ご参照願います。


## Bluemix k8s クラスタでのセットアップ

### Vagrantの環境設定

次の図の様な環境を迅速に作成するために、GitHUBに [Vagrantfile](https://github.com/takara9/bluemix-dev)を公開しています。　このVagrantfile は、Node.js, PHP, Python, Ruby の開発環境を作成するとともに、Docker コンテナのビルド環境、Bluemix CLIコマンドとkubectlコマンドのインストールされた Ubuntu Linux の仮想マシンを作成します。

![スクリーンショット 2017-09-14 8.17.54.png](https://qiita-image-store.s3.amazonaws.com/0/42829/85896273-6387-7173-53e4-8c5fc6fa059d.png "スクリーンショット 2017-09-14 8.17.54.png")



今回は、weavescope に PCのブラウザからアクセスするために、GitからクローンしたVagrantfileの7行目あたりに、以下の設定を追加します。これにより、Vagrant内の仮想マシンで立ち上がったプロセスのポート番号 4040 を Vritual Box ホストの4040ポートへマッピングして、http://localhost:4040/ でアクセスできる様になります。

~~~file:Vagrantfile
  config.vm.network :forwarded_port, host: 4040, guest: 4040
~~~



### Bluemix ログイン

今回の記事は、「[Bluemix k8sで、アプリをHTTPSとドメイン名でアクセスする設定方法のメモ](http://qiita.com/MahoTakara/items/34565e3c4095b6701a6a)」の続きにあたるので、もし、Bluemix k8s のスタンダード・クラスタを未作成であれば、前回の記事を参照して、クラスタを作成して、アプリをデプロイしておきます。

以下、スタンダード・クラスタが作成され、簡単なアプリがデプロイされ、Ingress （ロードバランサー）が稼働している状態に、Bluemix ログインから再開します。 


~~~
$ bx login
~~~

ログイン完了の応答メッセージの指示に従って、`bx target --cf` を実行しておきます。


### kubectlの環境変数設定

kubectlコマンドで、k8sのマスターに接続して、クラスタを操作できる様にするため、マスターの接続情報のダウンロードと環境変数の設定までを進めていきます。

k8sクラスタのリストを表示して、接続したいk8sクラスタの名前を確認します。

~~~
$ bx cs clusters
~~~

次のコマンドで、クラスタへ接続するためのYAMLファイルをダウンロードします。 そして、応答メッセージとして、 export KUBECONFIG=... が表示されるので、コピペして、環境変数として設定します。

~~~
bx cs cluster-config mycluster3
~~~


以上で、kubectlをk8sの特定のマスターへ接続する準備が整いましたので、実際にアクセスして確認します。　`kubectl get all`などが適当だと思います。 これで 次の様なPODやサービスの状態が表示されれば成功です。

~~~
$ kubectl get all
NAME                              READY     STATUS    RESTARTS   AGE
po/express-app-1882574706-pfhjv   1/1       Running   0          3d
po/express-app-1882574706-pqmf2   1/1       Running   0          3d
po/express-app-1882574706-xlgr4   1/1       Running   0          3d

NAME              CLUSTER-IP    EXTERNAL-IP   PORT(S)          AGE
svc/express-svc   10.10.10.57   <nodes>       3000:31514/TCP   3d
svc/kubernetes    10.10.10.1    <none>        443/TCP          3d

NAME                 DESIRED   CURRENT   UP-TO-DATE   AVAILABLE   AGE
deploy/express-app   3         3         3            3           3d

NAME                        DESIRED   CURRENT   READY     AGE
rs/express-app-1882574706   3         3         3         3d
~~~


### Weave Scope の設定

「[Weave Scope と IBM Bluemix Container Service での Kubernetes クラスター・リソースの視覚化](https://console.bluemix.net/docs/containers/cs_cluster.html#cs_weavescope)」にある手順に従って、設定を進めます。 また、最近、GitHubのrawファイルへのアクセスのURLが変わっている様なので、分かり難ですがが、以下のコマンドで実行されているYAMLファイルの内容は、GitHUB https://github.com/IBM-Bluemix/kube-samples/tree/master/weave-scope で参照できます。

k8sの[RBAC(Role-based access control)](https://kubernetes.io/docs/admin/authorization/#rbac-mode)の設定を実施します。

~~~
$ kubectl apply -f "https://raw.githubusercontent.com/IBM-Bluemix/kube-samples/master/weave-scope/weave-scope-rbac.yaml"
/master/weave-scope/weave-scope-rbac.yaml"
clusterrole "weave-scope-mgr" created
clusterrolebinding "weave-scope-mgr-role-binding" created
~~~

次のコマンドで、weaveworks社のサイトのYAMLファイルを適用して、weavescope をデプロイします。

~~~
$ kubectl apply --namespace kube-system -f "https://cloud.weave.works/k8s/scope.yaml?k8s-version=$(kubectl version | base64 | tr -d '\n')"
serviceaccount "weave-scope" created
deployment "weave-scope-app" created
service "weave-scope-app" created
daemonset "weave-scope-agent" created
~~~

kubectl で [port-forward](https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/) を実行して wevascope へアクセスできる様にします。

~~~
$ kubectl port-forward -n kube-system "$(kubectl get -n kube-system pod --selector=weave-scope-component=app -o jsonpath='{.items..metadata.name}')" 4040
Forwarding from 127.0.0.1:4040 -> 4040
Forwarding from [::1]:4040 -> 4040
~~~


## 動作確認

Vagrant + VirtualBox の ホストとなっている PCのブラウザから `http://localhost:4040/` を実行して次の画面が表示されればデプロイ成功です。

![スクリーンショット 2017-09-14 9.40.33.png](https://qiita-image-store.s3.amazonaws.com/0/42829/cdfdeebd-1546-b6f7-8e36-974fd52a002c.png "スクリーンショット 2017-09-14 9.40.33.png")




# 参考資料
(1) Weaveworksがコンテナとマイクロサービス監視ツール‘Weave Scope’をリリース https://www.infoq.com/jp/news/2015/06/weave-scope-container-monitoring
(2) Weave Scopeでコンテナ構成をリアルタイム視覚化 http://pocketstudio.jp/log3/2015/07/14/weave-scope-container-visualization/
(3) weaveworks https://www.weave.works/
(4) GitHub waveworks/scope https://github.com/weaveworks/scope
(5) GitHub IBM-Bluemix https://github.com/IBM-Bluemix/kube-samples/tree/master/weave-scope
(5) Weave Scope と IBM Bluemix Container Service での Kubernetes クラスター・リソースの視覚化 https://console.bluemix.net/docs/containers/cs_cluster.html#cs_weavescope 
(6) Weave Scope 概要 https://www.weave.works/docs/scope/latest/introducing/