vm.gowatana.jp

NEOにほんごVMware(仮)

TKG 2.4 に Prometheus + Grafana をインストールしてみる。

Tanzu Kubernetes Grid(TKG)2.4 + NSX ALB の環境に、Tanzu Package の Prometheus と 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 をインストールしてみる話でした。