Tanzu Kubernetes Grid(TKG)2.4 + NSX ALB の環境に、Tanzu Package の Prometheus と Grafana をインストールしてみます。
ドキュメントでは、下記のあたりです。
今回の内容です。
- 今回の環境
- 1. Tanzu Package Repository の追加
- 2. パッケージ インストール先 Namespace の作成
- 3. cert-manager のインストール
- 4. Contour のインストール
- 5. DNS へのレコード追加
- 6. Prometheus のインストール
- 7. Grafana のインストール
今回の環境
TKG は、下記のように環境構築してあります。Tanzu CLI の実行には、ひきつづき TKG の Bootstrap マシンを流用します。
今回 Prometheus & Grafana をインストールする、TKG Workload Cluster のノードです。
$ kubectl get nodes NAME STATUS ROLES AGE VERSION tkg24wc01-md-0-mrc99-667c5b6dcbxq9dqd-w7dc4 Ready <none> 152m v1.27.5+vmware.1 tkg24wc01-tv6xs-l8wfz Ready control-plane 156m v1.27.5+vmware.1
Prometheus と Grafana の FQDN を名前解決する DNS には、NSX ALB の DNS Virtual Service を利用します。NSX ALB には、下記のように環境構築ずみです。
1. Tanzu Package Repository の追加
デフォルトでは Tanzu パッケージのリポジトリが登録されていないので、Tanzu Standard として提供されているリポジトリを追加します。
今回は、TKG 2.4 に対応した v2023.9.19 を追加します。
ちなみに v2023.10.16 も公開されていますが、これは TKG 2.3.1 用です。
$ tanzu package repository add tanzu-standard -n tkg-system --url projects.registry.vmware.com/tkg/packages/standard/repo:v2023.9.19
パッケージのリポジトリが追加されました。
$ tanzu package repository list -n tkg-system NAME SOURCE STATUS tanzu-standard (imgpkg) projects.registry.vmware.com/tkg/packages/standard/repo:v2023.9.19 Reconcile succeeded
これで、下記のようなパッケージ一覧が表示されるようになります。
$ tanzu package available list -n tkg-system NAME DISPLAY-NAME cert-manager.tanzu.vmware.com cert-manager cluster-autoscaler.tanzu.vmware.com autoscaler contour.tanzu.vmware.com contour external-csi-snapshot-webhook.tanzu.vmware.com external-csi-snapshot-webhook external-dns.tanzu.vmware.com external-dns fluent-bit.tanzu.vmware.com fluent-bit fluxcd-helm-controller.tanzu.vmware.com Flux Helm Controller fluxcd-kustomize-controller.tanzu.vmware.com Flux Kustomize Controller fluxcd-source-controller.tanzu.vmware.com Flux Source Controller grafana.tanzu.vmware.com grafana harbor.tanzu.vmware.com harbor multus-cni.tanzu.vmware.com multus-cni prometheus.tanzu.vmware.com prometheus vsphere-pv-csi-webhook.tanzu.vmware.com vsphere-pv-csi-webhook whereabouts.tanzu.vmware.com whereabouts
2. パッケージ インストール先 Namespace の作成
今回は、デフォルトでインストールされるパッケージと区別するため、my-packages という Namespace に Tanzu パッケージをインストールします。この Namespace にはパッケージ情報のみが作成され、パッケージによって作成される Pod などの Kubernetes リソースは別の Namespace に作成されます。
$ kubectl create namespace my-packages
3. cert-manager のインストール
リポジトリに用意されている cert-manager のパッケージを確認しておきます。
$ tanzu package available list cert-manager.tanzu.vmware.com -n tkg-system NAME VERSION RELEASED-AT cert-manager.tanzu.vmware.com 1.1.0+vmware.1-tkg.2 2020-11-24 18:00:00 +0000 UTC cert-manager.tanzu.vmware.com 1.1.0+vmware.2-tkg.1 2020-11-24 18:00:00 +0000 UTC cert-manager.tanzu.vmware.com 1.11.1+vmware.1-tkg.1 2023-01-11 12:00:00 +0000 UTC cert-manager.tanzu.vmware.com 1.12.2+vmware.1-tkg.1 2023-06-15 12:00:00 +0000 UTC cert-manager.tanzu.vmware.com 1.5.3+vmware.2-tkg.1 2021-08-23 17:22:51 +0000 UTC cert-manager.tanzu.vmware.com 1.5.3+vmware.4-tkg.1 2021-08-23 17:22:51 +0000 UTC cert-manager.tanzu.vmware.com 1.5.3+vmware.7-tkg.1 2021-08-23 17:22:51 +0000 UTC cert-manager.tanzu.vmware.com 1.5.3+vmware.7-tkg.3 2021-08-23 17:22:51 +0000 UTC cert-manager.tanzu.vmware.com 1.7.2+vmware.1-tkg.1 2021-10-29 12:00:00 +0000 UTC cert-manager.tanzu.vmware.com 1.7.2+vmware.3-tkg.1 2021-10-29 12:00:00 +0000 UTC cert-manager.tanzu.vmware.com 1.7.2+vmware.3-tkg.3 2021-10-29 12:00:00 +0000 UTC
cert-manager は、最新の「1.12.2+vmware.1-tkg.1」をインストールします。
$ tanzu package install cert-manager -n my-packages --package cert-manager.tanzu.vmware.com --version 1.12.2+vmware.1-tkg.1
これで、cert-manager がインストールされました。
$ kubectl get apps -n my-packages NAME DESCRIPTION SINCE-DEPLOY AGE cert-manager Reconcile succeeded 32s 33s
下記のように、Pod が作成されます。
$ kubectl get pods -n cert-manager NAME READY STATUS RESTARTS AGE cert-manager-5f944bbd57-gpr4h 1/1 Running 0 44s cert-manager-cainjector-6dc7868bc5-x42ng 1/1 Running 0 44s cert-manager-webhook-6df6cf84f7-7ndcq 1/1 Running 0 44s
4. Contour のインストール
Contour のパッケージは、「1.25.2+vmware.1-tkg.1」を利用します。
$ tanzu package available list contour.tanzu.vmware.com -n tkg-system NAME VERSION RELEASED-AT contour.tanzu.vmware.com 1.24.5+vmware.1-tkg.1 2023-07-26 00:00:00 +0000 UTC contour.tanzu.vmware.com 1.25.2+vmware.1-tkg.1 2023-07-26 00:00:00 +0000 UTC
下記のように、デフォルトとは異なるパラメータを記載した values.yaml ファイルを用意しておきます。
cat << EOF > contour-values.yaml envoy: service: type: "LoadBalancer" EOF
YAML が作成されたことを確認しておきます。
$ cat contour-values.yaml envoy: service: type: "LoadBalancer"
Contour をインストールします。
$ tanzu package install contour -n my-packages --package contour.tanzu.vmware.com --version 1.25.2+vmware.1-tkg.1 --values-file ./contour-values.yaml
これで、Contour がインストールされました。
$ kubectl get apps -n my-packages NAME DESCRIPTION SINCE-DEPLOY AGE cert-manager Reconcile succeeded 3m 3m1s contour Reconcile succeeded 43s 46s
下記のように Pod が作成されます。
$ kubectl get pods -n tanzu-system-ingress NAME READY STATUS RESTARTS AGE contour-d898c9b76-9c2bf 1/1 Running 0 55s contour-d898c9b76-s66js 1/1 Running 0 55s envoy-bl52q 2/2 Running 0 55s
cert-manager による Issuer も作成されました。
$ kubectl get issuers.cert-manager.io -n tanzu-system-ingress NAME READY AGE contour-ca-issuer True 69s contour-selfsigned-ca-issuer True 69s
cert-manager による証明書も発行されています。
$ kubectl get certificates.cert-manager.io -n tanzu-system-ingress NAME READY SECRET AGE contour-ca True contour-ca-key-pair 82s contour-cert True contourcert 82s envoy-cert True envoycert 82s
Contour で設定された、envoy による EXTERNAL-IP を確認しておきます。この IP アドレスに対応するレコードを、このあと DNS サーバに登録します。
$ kubectl get svc -n tanzu-system-ingress envoy NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE envoy LoadBalancer 100.64.163.67 192.168.61.224 80:31129/TCP,443:31826/TCP 96s
5. DNS へのレコード追加
Contour(envoy)で、External-IP として「192.168.61.224」が設定されました。この IP アドレスに、Prometheus と Grafana の FQDN に対応するレコードを登録しておきます。
今回は、NSX ALB の DNS Virtual Service で、下記のワイルド カードの A レコードを登録しておきます。
- *.tkg24wc01.avi-02.go-lab.jp → 192.168.61.224
これにより、「*」の部分を自由に指定しても、下記のように名前解決できるようになります。今回はワイルド カード レコードを登録しましたが、それぞれを普通の A レコードとして、2件登録しても動作します。
- Prometheus 用の FQDN
prometheus.tkg24wc01.avi-02.go-lab.jp → 192.168.61.224 - Grafana 用の FQDN
grafana.tkg24wc01.avi-02.go-lab.jp → 192.168.61.224
6. Prometheus のインストール
Prometheus パッケージの一覧です。このなかで最新の「2.45.0+vmware.1-tkg.1」をインストールします。
$ tanzu package available list prometheus.tanzu.vmware.com -n tkg-system NAME VERSION RELEASED-AT prometheus.tanzu.vmware.com 2.27.0+vmware.1-tkg.1 2021-05-12 18:00:00 +0000 UTC prometheus.tanzu.vmware.com 2.27.0+vmware.2-tkg.1 2021-05-12 18:00:00 +0000 UTC prometheus.tanzu.vmware.com 2.36.2+vmware.1-tkg.1 2022-06-23 18:00:00 +0000 UTC prometheus.tanzu.vmware.com 2.37.0+vmware.1-tkg.1 2022-10-25 18:00:00 +0000 UTC prometheus.tanzu.vmware.com 2.37.0+vmware.2-tkg.1 2022-10-25 18:00:00 +0000 UTC prometheus.tanzu.vmware.com 2.37.0+vmware.3-tkg.1 2022-10-25 18:00:00 +0000 UTC prometheus.tanzu.vmware.com 2.45.0+vmware.1-tkg.1 2023-03-21 18:00:00 +0000 UTC
values.yaml ファイルを作成しておきます。デフォルト値を含む values.yaml ファイルはパッケージから取得可能ですが、今回は指定するパラメータが少ないので手作業で作成しています。
cat << EOF > prometheus-values.yaml ingress: enabled: true virtual_host_fqdn: prometheus.tkg24wc01.avi-02.go-lab.jp EOF
ファイルが作成されたことを確認しておきます。
$ cat prometheus-values.yaml ingress: enabled: true virtual_host_fqdn: prometheus.tkg24wc01.avi-02.go-lab.jp
Prometheus をインストールします。
$ tanzu package install prometheus -n my-packages --package prometheus.tanzu.vmware.com --version 2.45.0+vmware.1-tkg.1 --values-file prometheus-values.yaml
Prometheus がインストールされました。
$ kubectl get apps -n my-packages NAME DESCRIPTION SINCE-DEPLOY AGE cert-manager Reconcile succeeded 6m34s 6m35s contour Reconcile succeeded 4m17s 4m20s prometheus Reconcile succeeded 91s 94s
Pod などのリソースは、tanzu-system-monitoring Namespace に作成されます。
$ kubectl get pods -n tanzu-system-monitoring NAME READY STATUS RESTARTS AGE alertmanager-57b64b8fbd-q4frm 1/1 Running 0 102s prometheus-kube-state-metrics-69d8c77585-4q6l8 1/1 Running 0 102s prometheus-node-exporter-p8xrs 1/1 Running 0 102s prometheus-node-exporter-zxvr2 1/1 Running 0 102s prometheus-pushgateway-756d5c99df-t6gk5 1/1 Running 0 102s prometheus-server-86bf58dc87-d7thd 2/2 Running 0 102s
cert-manager による Issuer も作成されています。
$ kubectl get issuers.cert-manager.io -n tanzu-system-monitoring NAME READY AGE prometheus-ca-issuer True 2m prometheus-self-signed-ca-issuer True 2m
証明書も作成されています。
$ kubectl get certificates.cert-manager.io -n tanzu-system-monitoring NAME READY SECRET AGE prometheus-ca True prometheus-ca-key-pair 2m12s prometheus-tls-cert True prometheus-tls 2m12s
values.yaml で指定した FQDN で、HTTPProxy リソースも作成されています。
$ kubectl get httpproxies.projectcontour.io -n tanzu-system-monitoring NAME FQDN TLS SECRET STATUS STATUS DESCRIPTION prometheus-httpproxy prometheus.tkg24wc01.avi-02.go-lab.jp prometheus-tls valid Valid HTTPProxy
Web ブラウザからこのアドレスにアクセスすると、Prometheus の画面が表示できます。
「up」などで検索すると、メトリクスが取得できている様子がわかります。
7. Grafana のインストール
Grafana は、「10.0.1+vmware.1-tkg.1」をインストールします。
$ tanzu package available list grafana.tanzu.vmware.com -n tkg-system NAME VERSION RELEASED-AT grafana.tanzu.vmware.com 10.0.1+vmware.1-tkg.1 2022-05-19 18:00:00 +0000 UTC grafana.tanzu.vmware.com 7.5.16+vmware.1-tkg.1 2022-05-19 18:00:00 +0000 UTC grafana.tanzu.vmware.com 7.5.17+vmware.1-tkg.2 2022-05-19 18:00:00 +0000 UTC grafana.tanzu.vmware.com 7.5.7+vmware.1-tkg.1 2021-05-19 18:00:00 +0000 UTC grafana.tanzu.vmware.com 7.5.7+vmware.2-tkg.1 2021-05-19 18:00:00 +0000 UTC grafana.tanzu.vmware.com 9.5.1+vmware.2-tkg.1 2022-05-19 18:00:00 +0000 UTC
values.yaml を作成します。
- virtual_host_fqdn には、Contour の External-IP にひもづく FQDN を指定します。
- ダッシュボードのデータソースにデフォルトで設定される URL は、デフォルトでは「http://」が省略されていて、Prometheus への接続がエラーになってしまいます。そのため「datasource_yaml」配下の「url」を指定しています。
- このアドレスは Kubernetes 内部のネットワーク経由で接続するので、Contour の External-IP にひもづく FQDN は指定しません。
- このデータソースの URL を後から編集する場合は、tanzu-system-dashboards Namespace にある grafana-datasource ConfigMap を編集して、Pod を再起動します。
cat << EOF > grafana-values.yaml grafana: config: datasource_yaml: |- apiVersion: 1 datasources: - name: Prometheus type: prometheus url: http://prometheus-server.tanzu-system-monitoring.svc.cluster.local access: proxy isDefault: true ingress: enabled: true virtual_host_fqdn: grafana.tkg24wc01.avi-02.go-lab.jp EOF
values.yaml ファイルが作成されたことを確認しておきます。
$ cat grafana-values.yaml grafana: config: datasource_yaml: |- apiVersion: 1 datasources: - name: Prometheus type: prometheus url: http://prometheus-server.tanzu-system-monitoring.svc.cluster.local access: proxy isDefault: true ingress: enabled: true virtual_host_fqdn: grafana.tkg24wc01.avi-02.go-lab.jp
Grafana をインストールします。
$ tanzu package install grafana -n my-packages --package grafana.tanzu.vmware.com --version 10.0.1+vmware.1-tkg.1 --values-file grafana-values.yaml
Grafana のパッケージがインストールされました。
$ tanzu package installed list -n my-packages NAME PACKAGE-NAME PACKAGE-VERSION STATUS cert-manager cert-manager.tanzu.vmware.com 1.12.2+vmware.1-tkg.1 Reconcile succeeded contour contour.tanzu.vmware.com 1.25.2+vmware.1-tkg.1 Reconcile succeeded grafana grafana.tanzu.vmware.com 10.0.1+vmware.1-tkg.1 Reconcile succeeded prometheus prometheus.tanzu.vmware.com 2.45.0+vmware.1-tkg.1 Reconcile succeeded
Pod などの Kubernetes リソースは、tanzu-system-dashboards Namespace に作成されます。
$ kubectl get pods -n tanzu-system-dashboards NAME READY STATUS RESTARTS AGE grafana-664798bf4d-wrc64 2/2 Running 0 95s
cert-manager による Issuer と証明書も作成されています。
$ kubectl get issuers.cert-manager.io -n tanzu-system-dashboards NAME READY AGE grafana-ca-issuer True 110s grafana-self-signed-ca-issuer True 110s $ kubectl get certificates.cert-manager.io -n tanzu-system-dashboards NAME READY SECRET AGE grafana-ca True grafana-ca-key-pair 117s grafana-tls-cert True grafana-tls 117s
データソースの URL も、values.yaml で指定したとおり「http://」ありで設定されています。
$ kubectl get cm -n tanzu-system-dashboards grafana-datasource -o jsonpath={.data.'datasource\.yaml'} | more apiVersion: 1 datasources: - name: Prometheus type: prometheus url: http://prometheus-server.tanzu-system-monitoring.svc.cluster.local access: proxy isDefault: true
Contour による HTTPProxy で、FQDN も設定されています。
$ kubectl get httpproxies.projectcontour.io -n tanzu-system-dashboards NAME FQDN TLS SECRET STATUS STATUS DESCRIPTION grafana-httpproxy grafana.tkg24wc01.avi-02.go-lab.jp grafana-tls valid Valid HTTPProxy
Web ブラウザから Grafana の FQDN にアクセスしてみます。
初回は、デフォルトのユーザ / パスワードでログインします。
- Email or username: admin
- Password: admin
パスワード変更を要求されるので、新しいパスワードを2回入力して「Submit」をクリックします。
Grafana にログインできるので、画面左上のメニュー →「Dashboards」を開きます。
「General」配下に、デフォルトで2つのダッシュボードが作成されています。
- Kubernetes / API server
- TKG Kubernetes cluster monitoring (via Prometheus)
せっかくなので、「TKG Kubernetes cluster monitoring (via Prometheus)」ダッシュボードを開いてみます。
下記のように、メトリクスが表示されるはずです。何も表示されない場合は、データソースの URL が正しいか(http:// から指定されているか)再確認します。
以上、TKG 2.4 に Prometheus と Grafana をインストールしてみる話でした。