在工作负载集群上部署 Grafana

本主题介绍了如何将 Grafana 部署到工作负载集群中。以下过程适用于 vSphere、Amazon Web Services (AWS) 和 Azure 部署。

Grafana

Grafana 是开源软件,可用于直观显示和分析 Prometheus 在集群上收集的衡量指标数据。Tanzu Kubernetes Grid 包含可在工作负载集群上部署的 Grafana 软件包。

必备条件

重要

Tanzu Kubernetes Grid 中对 IPv6 地址的支持有限;请参见在 IPv6 上部署集群(仅限 vSphere)。如果未部署到仅 IPv6 网络环境,则必须在以下步骤中提供 IPv4 地址。

为 Grafana 部署准备工作负载集群

要准备集群,请执行以下操作:

  1. 获取要将 Grafana 部署到的工作负载集群的管理员凭据。例如:

    tanzu cluster kubeconfig get my-cluster --admin
    
  2. 将 kubectl 的上下文设置为集群。例如:

    kubectl config use-context my-cluster-admin@my-cluster
    
  3. 为 Grafana 启用 Ingress。默认情况下,Grafana 已启用 Ingress。这需要您安装以下软件包:

继续在工作负载集群上部署 Grafana

将 Grafana 部署到工作负载集群

要部署 Grafana,请运行以下命令:

  1. 如果集群没有安装 Grafana 软件包的软件包存储库,例如 tanzu-standard 存储库,请安装一个:

    tanzu package repository add PACKAGE-REPO-NAME --url PACKAGE-REPO-ENDPOINT --namespace tkg-system
    

    其中:

    • PACKAGE-REPO-NAME 是软件包存储库的名称,如 tanzu-standard 或使用 ADDITIONAL_IMAGE_REGISTRY 变量配置的专用映像注册表的名称。
    • PACKAGE-REPO-ENDPOINT 是软件包存储库的 URL。

      • 对于此版本,tanzu-standard URL 为 projects.registry.vmware.com/tkg/packages/standard/repo:v2023.10.16。要从 Tanzu CLI 获取此值,请参见列出软件包存储库,或在 Tanzu Mission Control 中查看集群 (Cluster) 窗格中的附加模块 (Addons) > 存储库 (Repositories) 列表。
  2. 确认 Grafana 软件包在您的工作负载集群中可用:

    tanzu package available list -A
    
  3. 检索可用软件包的版本:

    tanzu package available list grafana.tanzu.vmware.com -A
    | Retrieving package versions for grafana.tanzu.vmware.com...
     NAME                           VERSION                          RELEASED-AT           NAMESPACE
     grafana.tanzu.vmware.com       9.5.1+vmware.2-tkg.3             2021-05-19T18:00:00Z  tanzu-package-repo-global
    
  4. 为 Grafana 配置创建配置文件:

    tanzu package available get grafana.tanzu.vmware.com/PACKAGE-VERSION --default-values-file-output FILE-PATH
    
    

    其中,PACKAGE-VERSION 是要安装的 Grafana 软件包的版本,FILE-PATH 是要将配置文件保存到的位置,例如,grafana-data-values.yaml

    有关要在 grafana-data-values.yaml 中使用的配置参数的信息,请参见下面的 Grafana 软件包配置参数

  5. 编辑 grafana-data-values.yaml 并将 secret.admin_password 替换为 Base64 编码的密码。要生成 Base64 编码的密码,请运行:

    echo -n 'mypassword' | base64
    

    您还可以使用 Base64 编码工具(网址为 https://www.base64encode.org/)对密码进行编码。例如,使用任一方法,mypassword 豆浆将生成编码的密码 bXlwYXNzd29yZA==

  6. vSphere with Tanzu:如果要将 Grafana 部署到使用 vSphere with Tanzu 主管创建的工作负载集群,请在文件 grafana-data-values.yaml 中设置 设置 grafana.pvc.storageClassName 的非 null 值:

    grafana:
    pvc:
      storageClassName: STORAGE-CLASS
    

    其中,STORAGE-CLASS 是集群存储类的名称,如 kubectl get storageclass 返回的名称。

  7. (可选)在 grafana-data-values.yaml 中修改 Grafana 数据源配置。Grafana 配置了 Prometheus 作为默认数据源。如果已自定义 Prometheus 部署命名空间,但该命名空间未部署在默认命名空间(tanzu-system-monitoring),则需要在 grafana-data-values.yaml 中更改 Grafana 数据源配置。要更改数据源配置,请将下面的部分复制到显示的位置,并根据需要修改 url

    #! The namespace in which to deploy grafana.
    namespace: tanzu-system-dashboards
    
    grafana:
      #! The grafana configuration.
      config:
        #! Refer to https://grafana.com/docs/grafana/latest/administration/provisioning/#example-data-source-config-file
        datasource_yaml: |-
          apiVersion: 1
          datasources:
            - name: Prometheus
              type: prometheus
              url: prometheus-server.<change-to-prometheus-namespace>.svc.cluster.local
              access: proxy
              isDefault: true
    

    有关要在 grafana-data-values.yaml 中使用的配置参数的信息,请参见下面的 Grafana 软件包配置参数

  8. grafana-data-values.yaml 文件进行任何所需的更改后,移除其中的所有注释:

    yq -i eval '... comments=""' grafana-data-values.yaml
    
  9. 部署软件包:

    tanzu package install grafana \
    --package grafana.tanzu.vmware.com \
    --version AVAILABLE-PACKAGE-VERSION \
    --values-file grafana-data-values.yaml \
    --namespace TARGET-NAMESPACE
    

    其中:

    • TARGET-NAMESPACE 是要在其中安装 Grafana 软件包的命名空间。例如,my-packagestanzu-user-managed-packages 命名空间。

      • 如果未指定 --namespace 标记,Tanzu CLI 将使用 default 命名空间。Grafana Pod 以及与 Grafana 组件关联的任何其他资源是在您于 grafana-data-values.yaml 中设置的命名空间中创建的;请勿将 Grafana 软件包安装到此命名空间中。
      • 指定的命名空间必须已存在,例如,通过运行 kubectl create namespace my-packages
    • AVAILABLE-PACKAGE-VERSION 是上面检索到的版本。

    例如:

    tanzu package install grafana --package grafana.tanzu.vmware.com --version 9.5.1+vmware.2-tkg.3 --values-file grafana-data-values.yaml --namespace my-packages
    
    - Installing package 'grafana.tanzu.vmware.com'
    | Getting namespace 'my-packages'
    | Getting package metadata for 'grafana.tanzu.vmware.com'
    | Creating service account 'grafana-my-packages-sa'
    | Creating cluster admin role 'grafana-my-packages-cluster-role'
    | Creating cluster role binding 'grafana-my-packages-cluster-rolebinding'
    | Creating secret 'grafana-my-packages-values'
    - Creating package resource
    \ Package install status: Reconciling
    
     Added installed package 'grafana' in namespace 'my-packages'
    
    注意

    如果安装失败并显示 error: Secret in version "v1" cannot be handled as a Secret: illegal base64 data at input byte 4 (reason: BadRequest),请参见工作负载集群问题故障排除中的从默认 YAML 文件安装 Grafana 时未创建密钥

验证 Grafana 部署

部署 Grafana 后,可以验证部署是否成功:

  1. 确认已安装 Grafana 软件包。例如:

    tanzu package installed list -A
    / Retrieving installed packages...
    NAME            PACKAGE-NAME                     PACKAGE-VERSION          STATUS               NAMESPACE
    cert-manager    cert-manager.tanzu.vmware.com    1.11.1+vmware.1-tkg.1     Reconcile succeeded  my-packages
    contour         contour.tanzu.vmware.com         1.24.4+vmware.1-tkg.1    Reconcile succeeded  my-packages
    grafana         grafana.tanzu.vmware.com         9.5.1+vmware.2-tkg.3     Reconcile succeeded  tkg-system
    prometheus      prometheus.tanzu.vmware.com      2.43.0+vmware.1-tkg.1    Reconcile succeeded  tkg-system
    antrea          antrea.tanzu.vmware.com                                   Reconcile succeeded  tkg-system
    [...]
    

    grafana 软件包和 grafana 应用安装在运行 tanzu package install 命令时指定的命名空间中。

  2. 确认已成功协调 grafana 应用:

    kubectl get apps -A
    

    例如:

    NAMESPACE     NAME                           DESCRIPTION           SINCE-DEPLOY   AGE
    my-packages   cert-manager                   Reconcile succeeded   37s            21h
    my-packages   contour                        Reconcile succeeded   33s            129m
    my-packages   grafana                        Reconcile succeeded   19s            6m56s
    my-packages   prometheus                     Reconcile succeeded   46s            21h
    tkg-system    antrea                         Reconcile succeeded   3m50s          24h
    [...]
    

    如果状态不是 Reconcile succeeded,请查看 grafana 应用的完整状态详细信息。查看完整状态可帮助您解决问题:

    kubectl get app grafana --namespace PACKAGE-NAMESPACE -o yaml
    

    其中,PACKAGE-NAMESPACE 是安装软件包的命名空间。

  3. 通过列出集群中正在运行的所有 Pod,确认新服务正在运行。

    kubectl get pods -A
    

    tanzu-system-dashboards 命名空间中,您应该会看到在 Pod 中运行的 grafana 服务:

    NAMESPACE               NAME                                    READY   STATUS    RESTARTS   AGE
    [...]
    tanzu-system-dashboards   grafana-6865dbb4f5-pk2qg              2/2     Running   0          7m7s
    [...]
    

Grafana Pod 以及与 Grafana 组件关联的任何其他资源是在您于 grafana-data-values.yaml 中提供的命名空间中创建。如果使用的是默认命名空间,则会在 tanzu-system-dashboards 命名空间中创建这些 Pod 和资源。

Grafana 软件包配置参数

可以通过两种方法查看 Grafana 软件包的配置参数:

查看软件包结构定义

要检索软件包结构定义,请执行以下操作:

tanzu package available get grafana.tanzu.vmware.com/9.5.1+vmware.2-tkg.3 -n AVAILABLE-PACKAGE-NAMESPACE --values-schema

此命令会列出 Grafana 软件包的配置参数及其默认值。您可以使用输出更新在上面的准备 Grafana 软件包配置文件中创建的 grafana-data-values.yml 文件。

审核配置参数

下表列出了 Grafana 软件包的配置参数,并介绍了其默认值。

您可以在上面的在工作负载集群上部署 Grafana 中创建的 grafana-data-values.yml 文件中设置以下配置值。

参数 描述 类型 默认
namespace 将在其中部署 Grafana 的命名空间。 String tanzu-system-dashboards
grafana.deployment.replicas Grafana 副本数。 Integer 1
grafana.deployment.containers.resources Grafana 容器资源请求和限制。 映射 {}
grafana.deployment.k8sSidecar.containers.resources k8s-sidecar 容器资源请求和限制。 映射 {}
grafana.deployment.podAnnotations Grafana 部署 Pod 注释。 映射 {}
grafana.deployment.podLabels Grafana 部署 Pod 标签。 映射 {}
grafana.service.type 用于公开 Grafana 的服务类型。支持的值:ClusterIPNodePortLoadBalancer。(对于 vSphere,请将其设置为 NodePort String LoadBalancer
grafana.service.port Grafana 服务端口。 Integer 80
grafana.service.targetPort Grafana 服务目标端口。 Integer 9093
grafana.service.labels Grafana 服务标签。 映射 {}
grafana.service.annotations Grafana 服务注释。 映射 {}
grafana.config.grafana_ini 有关 Grafana 配置的信息,请参见 GitHub 中的 Grafana 配置默认值 配置文件 grafana.ini
grafana.config.datasource_yaml 有关数据源配置的信息,请参见 Grafana 文档 String prometheus
grafana.config.dashboardProvider_yaml 有关仪表板提供程序配置的信息,请参见 Grafana 文档 YAML 文件 provider.yaml
grafana.pvc.annotations 用于持久卷声明的存储类。默认情况下,此值为 null,并使用默认置备程序。 String null
grafana.pvc.storageClassName 用于持久卷声明的存储类。默认情况下,此值为 null,并使用默认置备程序。 String null
grafana.pvc.accessMode 定义持久卷声明的访问模式。支持的值:ReadWriteOnceReadOnlyManyReadWriteMany String ReadWriteOnce
grafana.pvc.storage 定义持久卷声明的存储大小。 String 2Gi
grafana.secret.type 为 Grafana 仪表板定义的密钥类型。 String Opaque
grafana.secret.admin_user 用于访问 Grafana 仪表板的 Base64 编码用户名。默认值为 YWRtaW4=,这相当于纯文本格式的 admin String YWRtaW4=
grafana.secret.admin_password 用于访问 Grafana 仪表板的 Base64 编码密码。默认值为 YWRtaW4=,这相当于纯文本格式的 admin String YWRtaW4=
ingress.enabled 为 grafana 激活/取消激活输入。 布尔 true
ingress.virtual_host_fqdn 用于访问 grafana 的主机名。 String grafana.system.tanzu
ingress.prefix Grafana 的路径前缀。 String /
ingress.servicePort 要将流量代理到的 Grafana 服务端口。 Integer 80
ingress.tlsCertificate.tls.crt 如果要使用自己的 TLS 证书,则输入需要可选的证书。默认情况下会生成一个自签名证书。注意tls.crt 是密钥,未嵌套。 String Generated cert
ingress.tlsCertificate.tls.key 用于输入的可选证书私钥(如果要使用自己的 TLS 证书)。注意tls.key 是密钥,未嵌套。 String Generated cert private key
ingress.tlsCertificate.ca.crt 可选的 CA 证书。注意ca.crt 是密钥,未嵌套。 String CA certificate

更新正在运行的 Grafana 部署

要在部署后更改 Grafana 软件包的配置,请更新已部署的 Grafana 软件包:

  1. 更新 grafana-data-values.yaml 文件中的 Grafana 配置。

  2. 更新安装的软件包:

    tanzu package installed update grafana \
    --version 9.5.1+vmware.2-tkg.3 \
    --values-file grafana-data-values.yaml \
    --namespace my-packages
    

    预期输出:

    | Updating package 'grafana'
    - Getting package install for 'grafana'
    | Updating secret 'grafana-my-packages-values'
    | Updating package install for 'grafana'
    
     Updated package install 'grafana' in namespace 'my-packages'
    

使用新值或者您添加的值协调 Grafana 软件包。kapp-controller 应用更改可能需要长达五分钟的时间。

有关更新的信息,请参见更新软件包

删除 Grafana 部署

要移除集群上的 Grafana 软件包,请运行:

tanzu package installed delete grafana --namespace my-packages

有关删除的信息,请参见删除软件包

访问 Grafana 仪表板

部署 Grafana 后,grafana 软件包将创建完全限定域名 (FQDN) 为 grafana.system.tanzu 的 Contour HTTPProxy 对象。

要使用此 FQDN 访问 Grafana 仪表板,请执行以下操作:

  1. 在本地 /etc/hosts 文件中创建一个条目,以将 IP 地址指向此 FQDN:

    • AWS 或 Azure:tanzu-system-ingress 命名空间中的 Envoy 服务使用 LoadBalancer 的 IP 地址。
    • vSphere:使用工作节点的 IP 地址。
  2. 导航到 https://grafana.system.tanzu

由于站点使用自签名证书,您可能需要浏览浏览器特定的安全警告,然后才能访问仪表板。

check-circle-line exclamation-circle-line close-line
Scroll to top icon