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


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やメモリの使用率をアイコンに見ることができます。

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

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

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

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

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

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

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

PODとDeploymentの関係

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

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

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

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 の仮想マシンを作成します。

今回は、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/ を実行して次の画面が表示されればデプロイ成功です。

参考資料

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