仮想化通信

日本仮想化技術株式会社の公式エンジニアブログ

KubernetesクラスターをPrometheusとcAdvisorを使って監視してみる

今回はKubernetesクラスターをPrometheusとcAdvisorで監視してみるのを試してみようと思います。

Kubernetesの監視にPrometheusとGrafanaを使うのはメジャーな方法です。 久しぶりにセットアップしてみたら、Kubernetesのバージョンアップデートに伴って仕様変更など色々あり、旧来のやり方でうまくいきませんでした。

コンテナー基盤のクラスター監視は重要だと思うので、現時点(2020年5月9日)の動作確認した手順をここにまとめておきたいと思います。ちなみにKubernetesはmicrok8sを使って構築した環境で確認していますが、他の方法でセットアップしたKubernetesでも動くと思います。バージョンは1.17.5を用いましたが、おそらく1.18でも同様かと思います(後日確認します)。

想定する構成

本例では次の2台を想定しますが、Prometheusだけでは継続的な監視には不十分だと思います。 Prometheusと連携してGrafanaを使うとか、ZABBBIXを使うとか検討してください。今回の記事ではその辺りの説明は省略します。

Prometheusノード

Prometheusサーバーをセットアップします。 監視用のノードでそれ以外はインストールしません。 本例では192.168.1.52のIPアドレスを設定しています。

microk8sノード

microk8sを用いてKubernetesをセットアップします。 Prometheus Node exporterとcAdvisorを追加で導入します。 本例では192.168.1.51のIPアドレスを設定しています。

microk8s側のセットアップ

microk8sのインストール

microk8sを用いてKubernetesをセットアップします。

sudo snap install microk8s --channel=1.17/stable --classic
sudo microk8s.enable rbac storage dns metrics-server

本例はシングルノードのクラスターとしますが、複数台構成が必要なら次のドキュメントを参考にしてください。

Prometheusはアドオンとして追加しないのがポイントです。 microk8sのアドオンとしてPrometheusを手軽に導入できるのですが、このアドオンは設定の変更ができないため、microk8sのアドオンのPrometheusは今回、利用しません。 とはいえ、特にカスタマイズする必要がなければmicrok8sのアドオンとして追加する方が簡単です。

Prometheus Node exporterのインストール

監視対象のmicrok8sノードにNode exporterをインストールします。 microk8sノードのリソース監視をするために導入します。

snapパッケージでインストール

まずはsnapパッケージを使う方法です。このパッケージはコミュニティユーザーによる提供です。

sudo snap install node-exporter --channel=latest/beta --classic 

(2020/05/09現在ではv1.0.0-rc.0)

debパッケージでインストール

UbnutuにはPrometheus Node exporterのdebパッケージも提供されています。 aptコマンドを使ってインストールすることもできます。このパッケージはコミュニティによってメンテナンスされています。

sudo apt install prometheus-node-exporter

(2020/05/09現在ではv0.15.2+ds-1 universe)

コンテナーのメトリックを取るためcAdvisorの導入

microk8sノードのリソース監視のため、Node exporterをセットアップしました。 コンテナーのメトリックを取るにはNode exporterではできないため、cAdvisorを使ってみます。

本題に入る前にcAdvisorの概要

cAdvisorは、稼働中のコンテナのリソースとパフォーマンス状況を収集、出力できるツールです。プロセス、CPUやメモリの使用量、ファイルシステムの使用量を確認できます。収集したデータは専用のWebインターフェイスで確認するだけでなく、APIを使って他のアプリケーションにメトリックを提供できるため、PrometheusやGrafanaなどを用いてコンテナーやプラットフォームの監視が可能になります。

cAdvisorはかつてKubernetesのKubeletに実装されていたため、1.13以前のバージョンではデフォルトで利用できましたが、現在のバージョンでは利用できません。

Ubuntuの場合、cAdvisorのdebパッケージが用意されているためこれを利用することもできますが、少々古いのと、Kubernetesのようなノードが多数あるような構成に一つ一つセットアップして設定を投入していくのはちょっと面倒です。cAdvisorをKubernetesのDaemonsetとして動かす方法が推奨されるそうです。Kubernetes 1.17系で動作確認しましたが、おそらくそれ以降のバージョンでも動作すると思います。

ちなみに、cAdvisorはDockerで利用するのは本当に簡単です。

cAdvisorのセットアップ

cAdvisorをKubernetesのDaemonsetとして動かしてみます。 Kubernetes 1.14以降のバージョンではkustomizeはkubectlコマンドに実装されていますので、少々コマンドとオプションの指定が変わっているので注意します。

git clone https://github.com/google/cadvisor.git
kubectl kustomize deploy/kubernetes/base    (内容を確認)
kubectl apply -k deploy/kubernetes/base     (Kustomizeを使って展開)

-fオプションではなく、-kオプションとしてkustomization_directoryを指定します。 -kオプションは--kustomizeのエイリアス。

cAdvisorサービスの作成

外部からアクセス可能にするようにサービスを作成します。 以下はnodePortを使った場合の例。ポートは一意のものを指定すること。

apiVersion: v1
kind: Service
metadata:
  name: cadvisor
  namespace: cadvisor
spec:
  selector:
    app: cadvisor
  ports:
  - protocol: TCP
    port: 8080
    nodePort: 30080
  type: NodePort

cAdvisorの動作確認

コマンドでデータを取り出してみましょう。

curl http://192.168.1.51:30080/api/v2.0/stats

ブラウザーでDashboardを開いてみましょう。

http://192.168.1.51:30080/containers/

cAdvisorのダッシュボード

f:id:virtualtech:20200509215440p:plain

CPU、メモリー、プロセス、ファイルシステムの使用状況などを確認できる。

f:id:virtualtech:20200510150740p:plain

監視側

Prometheusのインストール

どちらかのバージョンをインストールしてください。Ubuntu Serverのセットアップ時にインストーラーでprometheusを追加した場合はバージョン1の方がインストールされます(2020/05/09現在)。

sudo snap install prometheus
(2020/05/09現在ではv1.8.2)

sudo snap install prometheus --channel=2/stable
(2020/05/09現在ではv2.9.1)

Prometheusの設定変更

snapパッケージの場合、設定は/var/snap/以下に展開されます。次の手順に従って設定ファイルを開きます。static_configsなどにサービスを追記します。30080はNodePortです。

cd /var/snap/prometheus/current
vi prometheus.yml 
...
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ['localhost:9090']
      - targets: ['192.168.1.51:30080']  ←cAdvisor実行ノードのIPアドレスを追記

備考

snapパッケージはバイナリーは/snap以下、設定は/var/snap以下のディレクトリーに展開されます。

Prometheusサービスの再起動

snapパッケージのサービスはsnap restartコマンドで行います。 実行後にsnap servicesコマンドでactiveになっていることを確認します。他のステータスの場合はPrometheusの設定に定義エラーがありますので、設定を見直します。

snap restart prometheus
snap services 
Service                Startup  Current  Notes
prometheus.prometheus  enabled  active   -

Prometheusダッシュボードへのアクセス

ブラウザーで以下URLにアクセスします。

f:id:virtualtech:20200509215502p:plain

「Zabbixでメトリックを使ってグラフ化(Zabbixで性能監視)する」に続く...

tech.virtualtech.jp