在工作负载集群上部署 Grafana

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

Grafana

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

  • 安装了以下内容的引导计算机:
  • Tanzu CLI、Tanzu CLI 插件和 kubectl ,如 安装 Tanzu CLI 和其他工具以与 vSphere with Tanzu 主管配合使用 安装 Tanzu CLI 和其他工具以与独立管理集群配合使用 中所述。
  • Carvel 工具,如 安装 Carvel 工具 中所述。
  • yq v4.5 或更高版本。
  • 管理集群,即在 vSphere、AWS 或 Azure 上运行且安装了 Tanzu Standard 软件包存储库的 vSphere with Tanzu 主管或独立管理集群。
  • 由上述管理集群创建的并安装了以下软件包的工作负载集群:
  • Prometheus,请参见 部署 Prometheus on 工作负载集群
  • Contour;请参见 安装 Contour 以进行 Ingress 控制
  • cert-manager;请参见 安装证书管理器以进行证书管理
  • Tanzu Kubernetes Grid 中对 IPv6 地址的支持有限;请参见 在 IPv6 上部署集群(仅限 vSphere) 。如果未部署到仅 IPv6 网络环境,则必须在以下步骤中提供 IPv4 地址。

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

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

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

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

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

  • 证书管理器:有关信息,请参见安装证书管理器以进行证书管理
  • Contour:有关信息,请参见安装 Contour 以进行 Ingress 控制
  • 继续在工作负载集群上部署 Grafana

    将 Grafana 部署到工作负载集群

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

  • 如果集群尚未安装 standard 软件包,请进行安装:

    如果要将基于计划的集群(旧版)作为目标,请跳过此步骤。对于基于计划的集群,在 tanzu-package-repo-global 命名空间中的每个集群能够自动启用 tanzu-standard 软件包存储库。

    tanzu package repository add tanzu-standard --url PACKAGE-REPOSITORY-ENDPOINT --namespace tkg-system
    

    其中,PACKAGE-REPOSITORY-ENDPOINTstandard 软件包存储库的 URL。对于此版本,URL 为 projects.registry.vmware.com/tkg/packages/standard/repo:v2.1.1

    要从 Tanzu CLI 获取此值,请参见列出软件包存储库,或在 Tanzu Mission Control 中查看进群 (Cluster) 窗格中的附加模块 (Addons) > 存储库 (Repositories) 列表。

  • 确认 Grafana 软件包在您的工作负载集群中可用:

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

    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       7.5.7+vmware.1-tkg.1             2021-05-19T18:00:00Z  tanzu-package-repo-global
     
  • 为 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 软件包配置参数

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

    echo -n 'mypassword' | base64
    

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

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

    ingress:
    virtual_host_fqdn: "grafana.system.tanzu"
      storageClassName: STORAGE-CLASS
    

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

  • (可选)在 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 软件包配置参数

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

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

    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 软件包、Grafana 软件包应用以及描述该软件包的任何其他 Kubernetes 资源的命名空间。例如,my-packagestanzu-user-managed-packages 命名空间。如果未指定 --namespace 标记,Tanzu CLI 将使用 default 命名空间。Grafana Pod 以及与 Grafana 组件关联的任何其他资源是在您于 grafana-data-values.yaml 中设置的命名空间中创建的;请勿将 Grafana 软件包安装到此命名空间中。
  • AVAILABLE-PACKAGE-VERSION 是上面检索到的版本。
  • 例如:

    tanzu package install grafana --package grafana.tanzu.vmware.com --version 7.5.7+vmware.1-tkg.1 --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'
     
  • vSphere with Tanzu:在启用了 vSphere with Tanzu 的 vSphere 7.0 U2 上,tanzu package install grafana 命令可能会返回以下错误:
    service init failed: failed to connect to database: failed to create SQLite database file "/var/lib/grafana/grafana.db": open /var/lib/grafana/grafana.db: permission denied

    要修复此错误,请从与 Grafana 具有相同 persistentVolumeClaim 的临时 pod 授予 Grafana 数据库访问权限:

  • 创建包含以下内容的 pod 规范文件 grafana-pvc-pod.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-graf-pod
      namespace: tanzu-package-repo-global
    spec:
      containers:
      - name: busybox
        image: "registry.k8s.io/busybox"
        volumeMounts:
        - name: my-vol
          mountPath: "/var/lib/grafana"
        command: [ "sleep", "1000000" ]
      volumes:
        - name: my-vol
          persistentVolumeClaim:
            claimName: grafana-pvc
       
  • 创建 Pod:

    kubectl apply -f grafana-pvc-pod.yaml
       
  • 在 Pod 中,授予对 Grafana 数据库目录的访问权限:

    kubectl exec -it my-graf-pod -n my-packages sh
    / $ ls -l /var/lib/grafana
    total 16
    drwx------    2 root     root         16384 Dec 10 16:57 lost+found
    / $ chmod -R 777 /var/lib/grafana
    / $ ls -l /var/lib/grafana
    total 16
    drwxrwxrwx    2 root     root         16384 Dec 10 16:57 lost+found
    / $ exit
       
  • 删除 Grafana 部署以将其重新启动:

    kubectl delete deploy grafana -n tanzu-package-repo-global
       
  • 删除 Pod:

    kubectl delete -f grafana-pvc-pod.yaml
    

    验证 Grafana 部署

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

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

    tanzu package installed list -A
    / Retrieving installed packages...
    NAME            PACKAGE-NAME                     PACKAGE-VERSION          STATUS               NAMESPACE
    cert-manager    cert-manager.tanzu.vmware.com    1.1.0+vmware.1-tkg.2     Reconcile succeeded  my-packages
    contour         contour.tanzu.vmware.com         1.17.1+vmware.1-tkg.1    Reconcile succeeded  my-packages
    grafana         grafana.tanzu.vmware.com         7.5.7+vmware.1-tkg.1     Reconcile succeeded  tkg-system
    prometheus      prometheus.tanzu.vmware.com      2.27.0+vmware.1-tkg.1    Reconcile succeeded  tkg-system
    antrea          antrea.tanzu.vmware.com                                   Reconcile succeeded  tkg-system
    [...]
    

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

  • 确认已成功协调 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 是安装软件包的命名空间。

  • 通过列出集群中正在运行的所有 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/7.5.7+vmware.1-tkg.1 -n AVAILABLE-PACKAGE-NAMESPACE --values-schema
    

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

    审核配置参数

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

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

    grafana.service.type 用于公开 Grafana 的服务类型。支持的值:ClusterIPNodePortLoadBalancer。(对于 vSphere,请将其设置为 NodePort) String LoadBalancer grafana.service.port Grafana 服务端口。 Integer grafana.service.targetPort Grafana 服务目标端口。 Integer 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 grafana.pvc.storageClassName 用于持久卷声明的存储类。默认情况下,此值为 null,并使用默认置备程序。 String grafana.pvc.accessMode 定义持久卷声明的访问模式。支持的值:ReadWriteOnceReadOnlyManyReadWriteMany。 String ReadWriteOnce grafana.pvc.storage 定义持久卷声明的存储大小。 String grafana.secret.type 为 Grafana 仪表板定义的密钥类型。 String Opaque grafana.secret.admin_user 用于访问 Grafana 仪表板的用户名。 String YWRtaW4= grafana.secret.admin_password 用于访问 Grafana 仪表板的密码。 String admin ingress.enabled 为 grafana 激活/取消激活输入。 ingress.virtual_host_fqdn 用于访问 grafana 的主机名。 String grafana.system.tanzu ingress.prefix Grafana 的路径前缀。 String ingress.servicePort 要将流量代理到的 Grafana 服务端口。 Integer 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 软件包:

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

  • 更新安装的软件包:

    tanzu package installed update grafana \
    --version 7.5.7+vmware.1-tkg.1 \
    --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 仪表板,请执行以下操作:

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

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

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

  •