Tanzu Kubernetes Grid(TKGm) に Prometheus をデプロイする

Tanzu Kubernetes Grid multicloud(TKGm) にTKG Extensions を利用し、Prometheus をデプロイしたので、その際の手順です。


環境

  • Tanzu Kubernetes Grid v1.3.0 on vSphere
  • Workload Cluster v1.20.4
  • こちらの記事で構築した環境を利用

Prometheus のデプロイ

こちらの「Deploy Prometheus on Tanzu Kubernetes Clusters」に沿って実施していきます。作業するディレクトリとしては、<tkg-extensions-v1.3.0+vmware.1/extensions>になります。
先ずは、Namespace を作成します。
kubectl apply -f monitoring/prometheus/namespace-role.yaml

以下の様に、<tanzu-system-monitoring>というNamespace が作成され、このNamespace に対してリソースをデプロイしていく形になります。
namespace/tanzu-system-monitoring created
serviceaccount/prometheus-extension-sa created
role.rbac.authorization.k8s.io/prometheus-extension-role created
rolebinding.rbac.authorization.k8s.io/prometheus-extension-rolebinding created
clusterrole.rbac.authorization.k8s.io/prometheus-extension-cluster-role created
clusterrolebinding.rbac.authorization.k8s.io/prometheus-extension-cluster-rolebinding created

Prometheus をデプロイする際の values.yaml をコピーし、編集します。
cp monitoring/prometheus/prometheus-data-values.yaml.example monitoring/prometheus/prometheus-data-values.yaml

デフォルトだと、以下の様なファイルの中身になっています。
#@data/values
#@overlay/match-child-defaults missing_ok=True
---
monitoring:
  prometheus_server:
    image:
      repository: projects.registry.vmware.com/tkg/prometheus
  alertmanager:
    image:
      repository: projects.registry.vmware.com/tkg/prometheus
  kube_state_metrics:
    image:
      repository: projects.registry.vmware.com/tkg/prometheus
  node_exporter:
    image:
      repository: projects.registry.vmware.com/tkg/prometheus
  pushgateway:
    image:
      repository: projects.registry.vmware.com/tkg/prometheus
  cadvisor:
    image:
      repository: projects.registry.vmware.com/tkg/prometheus
  prometheus_server_configmap_reload:
    image:
      repository: projects.registry.vmware.com/tkg/prometheus
  prometheus_server_init_container:
    image:
      repository: projects.registry.vmware.com/tkg/prometheus

定義出来るパラメータはこちら「Customize Your Prometheus Deployment」を参考に作成していきます。以下の様な形で定義しました。<monitoring.ingress.tlsCertificate.tls.crt>と<monitoring.ingress.tlsCertificate.tls.key>は以下の設定で通ったのですが、tls 以下は更にインデントを下げるのが正解なのかもしれません。。。
また、tls.crt と tls.key に関しては、こちらの手順で作成したLet's Encrypt での証明書とキーを利用しています。tls.crtfullchain.pem の1つ目の証明書を、tls.keyprivkey.pem を指定しています。
#@data/values
#@overlay/match-child-defaults missing_ok=True
---
monitoring:
  prometheus_server:
    image:
      repository: projects.registry.vmware.com/tkg/prometheus
    sc:
      sc_enabled: true
      is_default: true
    pvc:
      storage: 50Gi
  alertmanager:
    image:
      repository: projects.registry.vmware.com/tkg/prometheus
    sc:
      sc_enabled: true
      is_default: true
    pvc:
      storage: 20Gi
  kube_state_metrics:
    image:
      repository: projects.registry.vmware.com/tkg/prometheus
  node_exporter:
    image:
      repository: projects.registry.vmware.com/tkg/prometheus
  pushgateway:
    image:
      repository: projects.registry.vmware.com/tkg/prometheus
  cadvisor:
    image:
      repository: projects.registry.vmware.com/tkg/prometheus
  prometheus_server_configmap_reload:
    image:
      repository: projects.registry.vmware.com/tkg/prometheus
  prometheus_server_init_container:
    image:
      repository: projects.registry.vmware.com/tkg/prometheus
  ingress:
    enabled: true
    virtual_host_fqdn: prometheus.<MYDOMAIN>
    tlsCertificate:
      tls.crt: |
        -----BEGIN CERTIFICATE-----
        ...(SNIP)...
        -----END CERTIFICATE-----
      tls.key: |
        -----BEGIN PRIVATE KEY-----
        ...(SNIP)...
        -----END PRIVATE KEY-----

この定義ファイルを元に、Secret リソースを作成します。
kubectl create secret generic prometheus-data-values --from-file=values.yaml=monitoring/prometheus/prometheus-data-values.yaml -n tanzu-system-monitoring

この後、Prometheus extension をデプロイします。
kubectl apply -f monitoring/prometheus/prometheus-extension.yaml

デプロイ出来たかどうか確認します。
$ kubectl get extension prometheus -n tanzu-system-monitoring
NAME         STATE   HEALTH   VERSION
prometheus   3
$ kubectl get pod -n tanzu-system-monitoring
NAME                                             READY   STATUS    RESTARTS   AGE
prometheus-alertmanager-78bdc5d795-k4w77         2/2     Running   0          3m1s
prometheus-cadvisor-xhp2p                        1/1     Running   0          3m1s
prometheus-kube-state-metrics-57c8d99b9f-9vqqt   1/1     Running   0          3m1s
prometheus-node-exporter-5q8d5                   1/1     Running   0          3m1s
prometheus-pushgateway-5b686c79f-fmggq           1/1     Running   0          3m1s
prometheus-server-655d4bf98c-s9qt4               2/2     Running   0          3m1s
$ kubectl get app prometheus -n tanzu-system-monitoring
NAME         DESCRIPTION           SINCE-DEPLOY   AGE
prometheus   Reconcile succeeded   4s             3m5s

設定等を変える時は以下のコマンドでSecret リソースを更新します。
kubectl create secret generic prometheus-data-values --from-file=values.yaml=monitoring/prometheus/prometheus-data-values.yaml -n tanzu-system-monitoring -o yaml --dry-run=client | kubectl replace -f -

Prometheus のDashboard とAlertmanager にアクセスします。Alertmanager は、prometheus.<MYDOMAIN>/alertmanager でアクセス出来ます。





無事にデプロイ出来ました。

このブログの人気の投稿