Bluemix
kubernetes
ibmcloud
weavescope
IBM-Cloud

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

More than 1 year has passed since last update.

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

そんな要望に応えてくれるのが、Weaveworksのオープンソースのコンテナ監視ツール Weave Scope です。 そして、これを Bluemix k8s のクラスタ環境を監視できる様にサンプルYAMLガイドが提供されています。

そこで、この記事は Bluemix Docのガイドを参考にしながら、「Bluemix k8sで、アプリをHTTPSとドメイン名でアクセスする設定方法のメモ」で作ったk8sクラスタとアプリを Weave Scope に適用した記録です。


Wave Scope の概要

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


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

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

スクリーンショット 2017-09-14 1.01.27.png


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

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

スクリーンショット 2017-09-14 1.07.47.png


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

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

スクリーンショット 2017-09-14 1.21.24.png

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

スクリーンショット 2017-09-14 1.21.44.png


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

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

スクリーンショット 2017-09-14 1.28.11.png


PODとDeploymentの関係

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

スクリーンショット 2017-09-14 1.53.04.png


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

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

スクリーンショット 2017-09-14 1.53.54.png


Weave Scope のドキュメント

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


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


Vagrantの環境設定

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

スクリーンショット 2017-09-14 8.17.54.png

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


Vagrantfile

  config.vm.network :forwarded_port, host: 4040, guest: 4040



Bluemix ログイン

今回の記事は、「Bluemix k8sで、アプリをHTTPSとドメイン名でアクセスする設定方法のメモ」の続きにあたるので、もし、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 クラスター・リソースの視覚化」にある手順に従って、設定を進めます。 また、最近、GitHubのrawファイルへのアクセスのURLが変わっている様なので、分かり難ですがが、以下のコマンドで実行されているYAMLファイルの内容は、GitHUB https://github.com/IBM-Bluemix/kube-samples/tree/master/weave-scope で参照できます。

k8sのRBAC(Role-based access control)の設定を実施します。

$ 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 を実行して 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


参考資料

(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/