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/ でアクセスできる様になります。
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/