Monitoring AKS with Prometheus を試してみた
AKS の公式 GitHub リポジトリ の中に「Monitoring AKS with Prometheus」という内容があり、興味があったのでやってみました。
内容的には、AKS にて Kustomize を使用して Prometheus と Grafana による監視環境をデプロイするものです。
実施手順
1. AKS クラスタのデプロイ
AKS クラスターの作成 の手順を参照。Cloud Shell でも問題なくできます。後述しますが、なるべく最新版のバージョンを利用した方が良いと思います。
2. Kustomize のインストール
今回、ここの手順は Cloud Shell を使用。デフォルトでは Kustomize はインストールされていなみたいなので、こちら を参考に別途インストールを実施します。
curl -s "https://raw.githubusercontent.com/\
kubernetes-sigs/kustomize/master/hack/install_kustomize.sh"  | bash
3. Kustomize の実行
あとは用意されたサンプルとコマンドを実行して…
kustomize build github.com/Azure/AKS/examples/kube-prometheus | kubectl apply -f -
新しく monitoring という namespace が作成され…
$ kubectl get namespace
NAME              STATUS   AGE
default           Active   14d
kube-node-lease   Active   14d
kube-public       Active   14d
kube-system       Active   14d
monitoring        Active   12h
その中に Prometheus や Grafana などの Pod が起動していれば OK です。
$ kubectl get pod --namespace=monitoring
NAME                                   READY   STATUS    RESTARTS   AGE
alertmanager-main-0                    2/2     Running   0          4m23s
alertmanager-main-1                    2/2     Running   0          4m23s
alertmanager-main-2                    2/2     Running   0          4m23s
grafana-696cd7b75b-zwphj               1/1     Running   0          8m41s
kube-state-metrics-6558dbd5b4-hhpj8    3/3     Running   0          8m41s
node-exporter-5zpkl                    2/2     Running   0          9m10s
node-exporter-pt72m                    2/2     Running   0          9m7s
prometheus-adapter-5dbb4cb95f-xvflh    1/1     Running   0          8m40s
prometheus-k8s-0                       2/2     Running   1          4m22s
prometheus-k8s-1                       2/2     Running   1          4m22s
prometheus-operator-58df7d7678-c2xh5   2/2     Running   0          8m40s
アクセス
Public IP は振られていないため、kubectl でのポートフォワーディングを利用します。こちらは Azure Cloud Shell ではなく、ローカルのコマンドプロンプト等を使用します。az cli で Azure に接続した後、kubectl コマンドを使っていきます。
Prometheus
$ kubectl --namespace monitoring port-forward svc/prometheus-k8s 9090
http://localhost:9090 にアクセスすると、下記のようにすぐに利用することができるようになっています。
Grafana
$ kubectl --namespace monitoring port-forward svc/grafana 3000
http://localhost:3000 にアクセスしてログイン。デフォルトのユーザーは admin、パスワードも admin です。
Alert Manager
$ kubectl --namespace monitoring port-forward svc/alertmanager-main 9093
http://localhost:9093 にアクセス。うーん、あまり勉強してないので勉強せねば…!
詰まったところ
今回の手順を試していたところ、手順『3. Kustomize の実行』にて下記のエラーが発生。
unable to recognize "STDIN": no matches for kind "Alertmanager" in version "monitoring.coreos.com/v1"
unable to recognize "STDIN": no matches for kind "Prometheus" in version "monitoring.coreos.com/v1"
unable to recognize "STDIN": no matches for kind "PrometheusRule" in version "monitoring.coreos.com/v1"
unable to recognize "STDIN": no matches for kind "ServiceMonitor" in version "monitoring.coreos.com/v1"
少し原因を探ってみると、Kustomize では結構 Kubernetes のバージョンにシビアなご様子 (バージョンマトリックスはこちら)。Kubernetes クラスタのバージョンは古めの 1.18 を使っていたため、コレが原因かと思い、AKS クラスタのバージョンをアップグレードしたところ、無事エラーが解消されました。
AKS クラスタのアップグレードは、こちら のドキュメントに沿って実施すれば大丈夫だと思います。
最後に
昔話をするのはアレですが、物理サーバや VM の時代からすると「やりたいことをデプロイする」ことが格段に楽になっていますね!
簡単にデプロイできてしまう分、仕組みの理解がおろそかにならないようには気を付けなければいけないですが、ともあれ便利便利。
Discussion