このトピックでは、Grafana 用 TKG 拡張機能 v1.3.1 をデプロイおよび管理する方法について説明します。Grafana を使用すると、保存納場所に関係なく、メトリックの照会、可視化、アラート、および確認を行うことができます。Grafana は、アプリケーション データからグラフを作成し、可視化するためのツールを提供します。Tanzu Kubernetes クラスタのメトリックを生成して表示するには、Grafana 用 TKG 拡張機能をデプロイします。

Grafana 拡張機能の前提条件

拡張機能をデプロイするには、次の要件を満たす必要があります。

Grafana 拡張機能の追加要件

Grafana 監視用 TKG 拡張機能 v1.3.1 には、インストール前およびインストール後の追加要件があります。

  • Grafana の監視拡張機能にはデフォルトのパーシステント ストレージ クラスが必要です。デフォルトのパーシステント ストレージ クラスを使用してクラスタを作成するか、拡張機能をデプロイするときに Grafana 構成ファイルでクラスタを指定することができます。TKG 拡張機能のパーシステント ストレージの要件の確認を参照してください。
  • Grafana 拡張機能がデプロイされたら、ClusterIP(デフォルト)、NodePort、または LoadBalancer のいずれかの Kubernetes サービス タイプによって公開される IP アドレスを使用して、HTTP/S 経由で Grafana ダッシュボードにアクセスします。クラスタの外部から Grafana ダッシュボードにアクセスするには、Grafana をデプロイする前に Contour 拡張機能をデプロイします。Contour 拡張機能をデプロイするには、Grafana Monitoring 用 TKG 拡張機能のデプロイと管理を参照してください。

    Grafana は次の Kubernetes サービス タイプをサポートします。

    サービス タイプ 説明 アクセス可能性
    ClusterIP クラスタ内の IP アドレスでサービスを公開します。 サービスには、クラスタ内からのみアクセスできます。
    NodePort 静的ポートの各ノードの IP アドレスでサービスを公開します。 サービスには、クラスタの外部からアクセスできます。
    LoadBalancer ロード バランサを使用してサービスを外部で公開します。 サービスには、クラスタの外部からアクセスできます。
    ClusterIP がデフォルトですが、アクセスできるのはクラスタ内からのみです。スーパーバイザー クラスタ に対して NSX-T ネットワークを使用している場合は、LoadBalancer タイプの Contour Envoy サービスを作成します。スーパーバイザー クラスタ に対して vSphere Distributed Switch ネットワークを使用している場合は、要件に応じて LoadBalancer タイプまたは NodePort タイプの Contour Envoy サービスを作成します。

可視化と分析のための Grafana 拡張機能のデプロイ

Grafana 用 TKG 拡張機能は、単一のコンテナをデプロイします。詳細については、『 https://grafana.com/』を参照してください。
コンテナ リソースの種類 レプリカ 説明
Grafana デプロイ 2 データの可視化
この拡張機能は、 https://projects.registry.vmware.com/ にある VMware パブリック レジストリからコンテナをプルするように構成されています。プライベート レジストリを使用する場合は、データ値と拡張機能構成に含まれるエンドポイント URL を、対応するものに変更します。 Grafana 拡張機能の構成を参照してください。
  1. Grafana 拡張機能のすべての前提条件を満たしていることを確認します。Grafana 拡張機能の前提条件を参照してください。
  2. Grafana 拡張機能のディレクトリに移動します。
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/grafana
  3. tanzu-system-monitoring 名前空間と、Grafana サービスのアカウントおよびロール オブジェクトを作成します。
    kubectl apply -f namespace-role.yaml
  4. Grafana データ値ファイルを作成します。
    サンプル データ値ファイルには、最低限必要な構成が含まれています。
    cp grafana-data-values.yaml.example grafana-data-values.yaml
  5. grafana-data-values.yaml を更新して Grafana 拡張機能を構成します。

    必要に応じて構成をカスタマイズします。Grafana 拡張機能の構成を参照してください。

    admin_password は base64 でエンコードする必要がありますが、base64 でエンコードされていない場合でも、拡張機能のデプロイはブロックされません。次の例では、パスワード「admin」は base64 でエンコードされています。Grafana のパスワードを独自にエンコードするには、次のサイトにアクセスします:https://www.base64encode.org/

    クラスタがデフォルトのストレージ クラスでプロビジョニングされていない場合は、データ値ファイル内で指定できます。また、名前空間にパーシステント ボリュームの要求を格納するのに必要なストレージが確保されている必要があります。
    monitoring:
      grafana:
        image:
          repository: "projects.registry.vmware.com/tkg/grafana"
        pvc:
          storage_class: vwt-storage-policy
          storage: "8Gi"  
        secret:
          admin_password: "YWRtaW4="
      grafana_init_container:
        image:
          repository: "projects.registry.vmware.com/tkg/grafana"
      grafana_sc_dashboard:
        image:
          repository: "projects.registry.vmware.com/tkg/grafana"
    
    LoadBalancer タイプまたは NodePort タイプの Envoy サービスを使用して Contour をデプロイした場合は、これを次のように構成ファイルで指定します。詳細については Grafana 拡張機能の構成を参照してください。
    monitoring:
      grafana:
        service:
          type: LoadBalancer OR NodePort
    

    デフォルトでは、Grafana 拡張機能は Grafana ダッシュボードにアクセスするための完全修飾ドメイン名 (FQDN) grafana.system.tanzu を作成します。この FQDN をカスタマイズするには、monitoring.grafana.ingress.virtual_host_fqdn の構成ファイルで目的のホスト名を指定します。詳細についてはGrafana 拡張機能の構成を参照してください。

  6. grafana-data-values ファイルを使用して Grafana シークレットを作成します。
    kubectl create secret generic grafana-data-values --from-file=values.yaml=grafana-data-values.yaml -n tanzu-system-monitoring

    grafana-data-values シークレットが tanzu-system-monitoring 名前空間に作成されている。kubectl get secrets -n tanzu-system-monitoring を使用して確認します。

  7. Grafana 拡張機能をデプロイします。
    kubectl apply -f grafana-extension.yaml

    成功すると、Grafana アプリケーションが作成されます:app.kappctrl.k14s.io/grafana created

  8. Grafana アプリケーションのステータスを確認します。
    kubectl get app grafana -n tanzu-system-monitoring
    ステータスが Reconciling から Reconcile succeeded に変わります。ステータスが Reconcile failed の場合は、トラブルシューティングを参照してください。
  9. Grafana アプリケーションの詳細なステータスを確認します。
    kubectl get app grafana -n tanzu-system-monitoring -o yaml
  10. Grafana のデプロイを確認します。
    kubectl get deployments -n tanzu-system-monitoring

LoadBalancer タイプの Contour Envoy サービスを使用した Grafana ダッシュボードへのアクセス

LoadBalancer タイプの前提条件である Contour Envoy サービスがデプロイされていて、Grafana 構成ファイル内で指定されている場合は、ロード バランサの外部 IP アドレスを取得し、Grafana FQDN の DNS レコードを作成します。
  1. LoadBalancer タイプの Envoy サービスの External-IP アドレスを取得します。
    kubectl get service envoy -n tanzu-system-ingress
    返された External-IP アドレスが次の例のように表示されます。
    NAME    TYPE           CLUSTER-IP     EXTERNAL-IP     PORT(S)                      AGE
    envoy   LoadBalancer   10.99.25.220   10.195.141.17   80:30437/TCP,443:30589/TCP   3h27m
    または、次のコマンドを使用して External-IP アドレスを取得することもできます。
    kubectl get svc envoy -n tanzu-system-ingress -o jsonpath='{.status.loadBalancer.ingress[0]}'
  2. Grafana 拡張機能のインストールを確認するには、次の例のように、ロード バランサの External-IP アドレスにマッピングされる Grafana の FQDN を指定してローカルの /etc/hosts ファイルを更新します。
    127.0.0.1 localhost
    127.0.1.1 ubuntu
    # TKG Grafana Extension with Envoy Load Balancer
    10.195.141.17 grafana.system.tanzu
    
  3. https://grafana.system.tanzu に移動して、Grafana ダッシュボードにアクセスします。

    サイトでは自己署名証明書が使用されるため、ダッシュボードにアクセスする前にブラウザ固有のセキュリティ警告を確認しなければならない場合があります。

  4. 本番環境にアクセスする場合は、DNS サーバで 2 つの CNAME レコードを作成し、Envoy サービス ロード バランサの External-IP アドレスを Grafana ダッシュボードにマッピングします。

NodePort タイプの Contour Envoy サービスを使用した Grafana ダッシュボードへのアクセス

NodePort タイプの前提条件である Contour Envoy サービスがデプロイされていて、Grafana 構成ファイル内で指定されている場合は、ワーカー ノードの仮想マシン IP アドレスを取得し、Grafana FQDN の DNS レコードを作成します。
  1. クラスタがプロビジョニングされている vSphere 名前空間 にコンテキストを切り替えます。
    kubectl config use-context VSPHERE-NAMESPACE
  2. クラスタ内のノードを一覧表示します。
    kubectl get virtualmachines
    クラスタ ノードが次のように表示されます。
    NAME                                            POWERSTATE   AGE
    tkgs-cluster-X-control-plane-6dgln              poweredOn    6h7m
    tkgs-cluster-X-control-plane-j6hq6              poweredOn    6h10m
    tkgs-cluster-X-control-plane-xc25f              poweredOn    6h14m
    tkgs-cluster-X-workers-9twdr-59bc54dc97-kt4cm   poweredOn    6h12m
    tkgs-cluster-X-workers-9twdr-59bc54dc97-pjptr   poweredOn    6h12m
    tkgs-cluster-X-workers-9twdr-59bc54dc97-t45mn   poweredOn    6h12m
  3. ワーカー ノードの 1 つを選択し、次のコマンドを使用して記述します。
    kubectl describe virtualmachines tkgs-cluster-X-workers-9twdr-59bc54dc97-kt4cm
  4. Vm Ip: 10.115.22.43 などの仮想マシンの IP アドレスを見つけます。
  5. Grafana 拡張機能のインストールを確認するには、次の例のように、ワーカー ノードの IP アドレスにマッピングされる Grafana の FQDN を指定してローカルの /etc/hosts ファイルを更新します。
    127.0.0.1 localhost
    127.0.1.1 ubuntu
    # TKGS Grafana with Envoy NodePort
    10.115.22.43 grafana.system.tanzu
    
  6. https://grafana.system.tanzu に移動して、Grafana ダッシュボードにアクセスします。

    サイトでは自己署名証明書が使用されるため、ダッシュボードにアクセスする前にブラウザ固有のセキュリティ警告を確認しなければならない場合があります。

Grafana のデプロイのトラブルシューティング

デプロイまたは調整が失敗した場合は、kubectl get pods -A を実行してポッドのステータスを確認します。contour および envoy ポッドは、Running である必要があります。ポッドのステータスが ImagePullBackOff または ImageCrashLoopBackOff の場合は、コンテナ イメージをプルできていません。データ値と拡張機能 YAML ファイルに記述されているリポジトリ URL を確認し、これらが正確であることを確認します。

コンテナログを確認します。 name-XXXX は、 kubectl get pods -A を実行したときの一意のポッド名です。
kubectl logs pod/grafana-XXXX -c grafana -n tanzu-system-monitoring

Grafana 拡張機能の更新

Tanzu Kubernetes クラスタにデプロイされている Grafana 拡張機能を更新します。

  1. grafana-data-values シークレットから現在の Grafana データ値を取得します。
    kubectl get secret grafana-data-values -n tanzu-system-monitoring -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > grafana-data-values.yaml
    
  2. grafana-data-values.yaml 内の Grafana データ値を更新します。Grafana 拡張機能の構成を参照してください。
  3. Grafana データ値のシークレットを更新します。
    kubectl create secret generic grafana-data-values --from-file=values.yaml=grafana-data-values.yaml -n tanzu-system-monitoring -o yaml --dry-run | kubectl replace -f-
    
    Grafana 拡張機能が更新されたデータ値で調整されます。
    注: デフォルトでは、kapp-controller によってアプリケーションが 5 分ごとに同期されます。更新は 5 分以内に有効になります。更新をすぐに有効にするには、 grafana-extension.yaml 内の syncPeriod の値を小さくし、 kubectl apply -f grafana-extension.yaml を使用して Grafana 拡張機能を適用します。
  4. 拡張機能のステータスを確認します。
    kubectl get app grafana -n tanzu-system-monitoring

    Grafana が更新されると、ステータスが Reconcile Succeeded に変更されます。

  5. 詳細なステータスを表示し、必要に応じてトラブルシューティングを行います。
    kubectl get app grafana -n tanzu-system-monitoring -o yaml

Grafana 拡張機能の削除

Tanzu Kubernetes クラスタから Grafana 拡張機能を削除します。
注: 手順を順番に実行します。Grafana アプリケーションが完全に削除される前に、名前空間、サービス アカウント、ロール オブジェクトを削除しないでください。これを行うと、システム エラーが発生する可能性があります。
注: Prometheus および Grafana 拡張機能は、同じ名前空間 ( tanzu-system-monitoring) にデプロイされます。両方の拡張機能を同じクラスタにデプロイしている場合は、名前空間を削除する前に各拡張機能を削除する必要があります。
  1. Grafana 拡張機能のディレクトリに移動します。
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/grafana
  2. Grafana アプリケーションを削除します。
    kubectl delete app grafana -n tanzu-system-monitoring

    予期される結果:app.kappctrl.k14s.io "grafana" deleted

  3. Grafana アプリケーションが削除されていることを確認します。
    kubectl get app grafana -n tanzu-system-monintoring

    予期される結果:apps.kappctrl.k14s.io "grafana" not found

  4. tanzu-system-monitoring 名前空間と、Grafana サービスのアカウントおよびロール オブジェクトを削除します。
    注意: Prometheus がデプロイされている場合は、この手順は実行しません。
    kubectl delete -f namespace-role.yaml
  5. Grafana を再デプロイする場合は、シークレット grafana-data-values を削除します。
    kubectl delete secret grafana-data-values -n tanzu-system-monitoring

    予期される結果:secret "grafana-data-values" deleted

Grafana 拡張機能のアップグレード

既存の Grafana 拡張機能がデプロイされている場合は、最新バージョンを使用するようにアップグレードできます。
  1. Grafana の構成マップをエクスポートし、バックアップとして保存します。
    kubectl get configmap grafana -n tanzu-system-monitoring -o 'go-template={{ index .data "grafana.yaml" }}' > grafana-configmap.yaml
  2. 既存の Grafana 拡張機能を削除します。Grafana 拡張機能の削除を参照してください。
  3. Grafana 拡張機能をデプロイします。可視化と分析のための Grafana 拡張機能のデプロイを参照してください。

Grafana 拡張機能の構成

Grafana の構成は、 /tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/grafana/grafana-data-values.yaml で設定されます。
表 1. Grafana 構成パラメータ
パラメータ 説明 タイプ デフォルト
monitoring.namespace Prometheus がデプロイされる名前空間 文字列 tanzu-system-monitoring
monitoring.create_namespace フラグは、monitoring.namespace で指定された名前空間を作成するかどうかを示します boolean false
monitoring.grafana.cluster_role.apiGroups grafana clusterrole に対して定義された api グループ リスト [""]
monitoring.grafana.cluster_role.resources grafana clusterrole に対して定義されたリソース リスト ["configmaps", "secrets"]
monitoring.grafana.cluster_role.verbs clusterrole に対して定義されたアクセス権限 リスト ["get", "watch", "list"]
monitoring.grafana.config.grafana_ini Grafana 構成ファイルの詳細 構成ファイル grafana.ini

このファイルでは、grafana_net URL を使用して Grafana と統合し、たとえばダッシュボードを Grafana.com から直接インポートします。

monitoring.grafana.config.datasource.type Grafana データソース タイプ 文字列 prometheus
monitoring.grafana.config.datasource.access アクセス モード。proxy または direct(ユーザー インターフェイスのサーバまたはブラウザ) 文字列 proxy
monitoring.grafana.config.datasource.isDefault デフォルトの Grafana データソースとしてマーク boolean true
monitoring.grafana.config.provider_yaml grafana ダッシュボード プロバイダを定義する構成ファイル yaml ファイル provider.yaml
monitoring.grafana.service.type Grafana を公開するサービスのタイプ。サポートされている値:ClusterIP、NodePort、LoadBalancer 文字列 vSphere: NodePort、aws/azure: LoadBalancer
monitoring.grafana.pvc.storage_class パーシステント ボリューム要求に対しアクセス モードを定義します。サポートされている値:ReadWriteOnce、ReadOnlyMany、ReadWriteMany 文字列 ReadWriteOnce
monitoring.grafana.pvc.storage パーシステント ボリューム要求に対しストレージ サイズを定義します 文字列 2Gi
monitoring.grafana.deployment.replicas grafana レプリカの数 整数型 1
monitoring.grafana.image.repository Grafana イメージを含むリポジトリの場所。デフォルトは、パブリック VMware レジストリです。プライベート リポジトリを使用している場合は(エアギャップ環境など)、この値を変更します。 文字列 projects.registry.vmware.com/tkg/grafana
monitoring.grafana.image.name Grafana イメージの名前 文字列 grafana
monitoring.grafana.image.tag Grafana イメージ タグ。バージョンをアップグレードしている場合は、この値の更新が必要になることがあります。 文字列 v7.3.5_vmware.1
monitoring.grafana.image.pullPolicy Grafana イメージ プル ポリシー 文字列 IfNotPresent
monitoring.grafana.secret.type Grafana ダッシュボードに定義されたシークレット タイプ 文字列 不透明
monitoring.grafana.secret.admin_user Grafana ダッシュボードにアクセスするユーザー名 文字列 YWRtaW4=

値は base64 でエンコードされています。デコードには以下を実行します:echo "xxxxxx" | base64 --decode

monitoring.grafana.secret.admin_password Grafana ダッシュボードにアクセスするパスワード 文字列 null
monitoring.grafana.secret.ldap_toml ldap 認証を使用している場合、ldap 構成ファイルのパス 文字列 ""
monitoring.grafana_init_container.image.repository grafana init コンテナ イメージを含むリポジトリ。デフォルトは、パブリック VMware レジストリです。プライベート リポジトリを使用している場合は(エアギャップ環境など)、この値を変更します。 文字列 projects.registry.vmware.com/tkg/grafana
monitoring.grafana_init_container.image.name grafana init コンテナ イメージの名前 文字列 k8s-sidecar
monitoring.grafana_init_container.image.tag grafana init コンテナ イメージ タグ。バージョンをアップグレードしている場合は、この値の更新が必要になることがあります。 文字列 0.1.99
monitoring.grafana_init_container.image.pullPolicy grafana init コンテナ イメージ プル ポリシー 文字列 IfNotPresent
monitoring.grafana_sc_dashboard.image.repository Grafana ダッシュボード イメージを含むリポジトリ。デフォルトは、パブリック VMware レジストリです。プライベート リポジトリを使用している場合は(エアギャップ環境など)、この値を変更します。 文字列 projects.registry.vmware.com/tkg/grafana
monitoring.grafana_sc_dashboard.image.name grafana ダッシュボード イメージの名前 文字列 k8s-sidecar
monitoring.grafana_sc_dashboard.image.tag grafana ダッシュボード イメージ タグ。バージョンをアップグレードしている場合は、この値の更新が必要になることがあります。 文字列 0.1.99
monitoring.grafana_sc_dashboard.image.pullPolicy grafana ダッシュボード イメージ プル ポリシー 文字列 IfNotPresent
monitoring.grafana.ingress.enabled Grafana に対し ingress を有効または無効にします boolean true
monitoring.grafana.ingress.virtual_host_fqdn grafana にアクセスするホスト名 文字列 grafana.system.tanzu
monitoring.grafana.ingress.prefix grafana のパス プリフィックス 文字列 /
monitoring.grafana.ingress.tlsCertificate.tls.crt 独自の TLS 証明書を使用する場合は、ingress のオプション証明書。自己署名証明書はデフォルトで生成されます 文字列 Generated cert
monitoring.grafana.ingress.tlsCertificate.tls.key 独自の TLS 証明書を使用する場合は、ingress のオプション証明書プライベート キー。 文字列 Generated cert key