本主题介绍如何部署和管理适用于 Grafana 的 TKG 扩展 v1.3.1。通过 Grafana,您可以查询、可视化、警示和浏览指标,而无论指标的存储位置如何。Grafana 提供了一些工具,可从应用程序数据中形成图形和可视化内容。部署用于 Grafana 的 TKG 扩展,以生成和查看 Tanzu Kubernetes 集群的衡量指标。

Grafana 扩展必备条件

请在满足以下必备条件后再部署扩展。

Grafana 扩展的其他要求

用于 Grafana 监控的 TKG 扩展 v1.3.1 在安装前和安装后具有其他要求。

  • Grafana 监控扩展需要默认的持久存储类。可以创建一个具有默认持久存储类的集群,也可以在部署扩展时在 Grafana 配置文件中指定一个这样的集群。请参见查看 TKG 扩展的持久存储要求
  • 部署 Grafana 扩展后,需要使用以下 Kuberetes 服务类型之一公开的 IP 地址通过 HTTP/S 访问 Grafana 仪表板:ClusterIP(默认)、NodePort 或 LoadBalancer。要从集群外部访问 Grafana 仪表板,请先部署 Contour 扩展,然后再部署 Grafana。要部署 Contour 扩展,请参见部署和管理用于 Grafana 监控 的 TKG 扩展

    Grafana 支持以下 Kuberentes 服务类型:

    服务类型 描述 可访问性
    ClusterIP 在集群内部 IP 上公开服务。 只能从集群内访问服务。
    NodePort 在静态端口的每个节点 IP 上公开服务。 可以从集群外部访问服务。
    LoadBalancer 使用负载均衡器在外部公开服务。 可以从集群外部访问服务。
    ClusterIP 是默认设置,但只能从集群内进行访问。如果对主管集群使用的是 NSX-T 网络连接,请创建 LoadBalancer 类型的 Contour Envoy 服务。如果对主管集群使用的是 vSphere vDS 网络连接,请创建 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 编码,但如果不是,也不会阻止部署该扩展。在下面的示例中,密码“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。可以通过在配置文件中的 monitoring.grafana.ingress.virtual_host_fqdn 指定所需的主机名来自定义此 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

    tanzu-system-monitoring 命名空间中创建了 grafana-data-values 密钥。使用 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 服务器上创建两条 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. 选择其中一个工作节点,然后使用以下命令对其进行描述。
    kubectl describe virtualmachines tkgs-cluster-X-workers-9twdr-59bc54dc97-kt4cm
  4. 找到虚拟机的 IP 地址,例如 Vm Ip: 10.115.22.43
  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 以查看 pod 状态。contourenvoy pod 应为 Running。如果 pod 状态为 ImagePullBackOffImageCrashLoopBackOff,则无法提取容器映像。检查数据值和扩展 YAML 文件中的注册表 URL,并确保它们准确无误。

查看容器日志,其中 name-XXXX 是运行 kubectl get pods -A 时的唯一 pod 名称:
kubectl logs pod/grafana-XXXX -c grafana -n tanzu-system-monitoring

更新Grafana扩展

更新部署到 Tanzu Kubernetes 集群的 Contour 扩展。

  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 configmap 并将其另存为备份。
    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 的命名空间 string tanzu-system-monitoring
monitoring.create_namespace 标记指示是否创建 monitoring.namespace 指定的命名空间 布尔 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 数据源类型 string prometheus
monitoring.grafana.config.datasource.access 访问模式。代理或直接(UI 中的服务器或浏览器) string 代理
monitoring.grafana.config.datasource.isDefault 标记为默认 Grafana 数据源 布尔 true
monitoring.grafana.config.provider_yaml 用于定义 grafana 仪表板提供程序的配置文件 Yaml 文件 provider.yaml
monitoring.grafana.service.type 用于公开 Grafana 的服务类型。支持的值:ClusterIP、NodePort、LoadBalancer string vSphere: NodePort、aws/azure: LoadBalancer
monitoring.grafana.pvc.storage_class 为持久卷声明定义访问模式。支持的值: ReadWriteOnce、ReadOnlyMany、ReadWriteMany string ReadWriteOnce
monitoring.grafana.pvc.storage 为持久卷声明定义存储大小 string 2Gi
monitoring.grafana.deployment.replicas Grafana 副本数 integer 1
monitoring.grafana.image.repository 包含 Grafana 映像的存储库的位置。默认为公共 VMware 注册表。如果使用的是专用存储库(例如气隙环境),请更改此值。 string projects.registry.vmware.com/tkg/grafana
monitoring.grafana.image.name Grafana 映像的名称 string grafana
monitoring.grafana.image.tag Grafana 映像标记。如果升级版本,可能需要更新此值。 string v7.3.5_vmware.1
monitoring.grafana.image.pullPolicy Grafana 映像提取策略 string IfNotPresent
monitoring.grafana.secret.type 为 Grafana 仪表板定义的密钥类型 string 不透明
monitoring.grafana.secret.admin_user 用于访问 Grafana 仪表板的用户名 string YWRtaW4=

值为 base64 编码;用于解码:echo "xxxxxx" | base64 --decode

monitoring.grafana.secret.admin_password 用于访问 Grafana 仪表板的密码 string
monitoring.grafana.secret.ldap_toml 如果使用 ldap 身份验证,则 ldap 配置文件路径 string ""
monitoring.grafana_init_container.image.repository 包含 grafana init 容器映像的存储库。默认为公共 VMware 注册表。如果使用的是专用存储库(例如气隙环境),请更改此值。 string projects.registry.vmware.com/tkg/grafana
monitoring.grafana_init_container.image.name grafana init 容器映像的名称 string k8s-sidecar
monitoring.grafana_init_container.image.tag Grafana init 容器映像标记。如果升级版本,可能需要更新此值。 string 0.1.99
monitoring.grafana_init_container.image.pullPolicy grafana init 容器映像拉取策略 string IfNotPresent
monitoring.grafana_sc_dashboard.image.repository 包含 Grafana 仪表板映像的存储库。默认为公共 VMware 注册表。如果使用的是专用存储库(例如气隙环境),请更改此值。 string projects.registry.vmware.com/tkg/grafana
monitoring.grafana_sc_dashboard.image.name grafana 仪表板映像的名称 string k8s-sidecar
monitoring.grafana_sc_dashboard.image.tag Grafana 仪表板映像标记。如果升级版本,可能需要更新此值。 string 0.1.99
monitoring.grafana_sc_dashboard.image.pullPolicy grafana 仪表板映像提取策略 string IfNotPresent
monitoring.grafana.ingress.enabled 为 grafana 启用/禁用输入 布尔 true
monitoring.grafana.ingress.virtual_host_fqdn 用于访问 grafana 的主机名 string grafana.system.tanzu
monitoring.grafana.ingress.prefix grafana 的路径前缀 string /
monitoring.grafana.ingress.tlsCertificate.tls.crt 如果要使用自己的 TLS 证书,则为用于输入的可选证书。默认情况下生成自签名证书 string 生成的证书
monitoring.grafana.ingress.tlsCertificate.tls.key 如果要使用自己的 TLS 证书,则为用于输入的可选证书私钥。 string 生成的证书密钥