本主题介绍如何部署和管理适用于 Grafana 的 TKG 扩展 v1.3.1。通过 Grafana,您可以查询、可视化、警示和浏览指标,而无论指标的存储位置如何。Grafana 提供了一些工具,可从应用程序数据中形成图形和可视化内容。部署用于 Grafana 的 TKG 扩展,以生成和查看 Tanzu Kubernetes 集群的衡量指标。
Grafana 扩展必备条件
- 置备集群。请参见使用 TKGS v1alpha2 API 置备 Tanzu Kubernetes 集群的工作流。
注: 必须部署使用默认 serviceDomain 的集群 (
cluster.local
)。 - 连接到集群。请参见以 vCenter Single Sign-On 用户身份连接到 Tanzu Kubernetes 集群。
- 下载 TKG 扩展 v1.3.1 包到运行 kubectl 命令的客户端主机。
- 在目标集群上安装 TKG 扩展必备条件。
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 | 部署 | 2 | 数据可视化 |
- 确认您已完成每个 Grafana 扩展必备条件。请参见Grafana 扩展必备条件。
- 将目录更改为 Grafana 扩展。
cd /tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/grafana
- 创建
tanzu-system-monitoring
命名空间以及 Grafana 服务帐户和角色对象。kubectl apply -f namespace-role.yaml
- 创建 Grafana 数据值文件。
示例数据值文件提供了所需的最低配置。
cp grafana-data-values.yaml.example grafana-data-values.yaml
- 通过更新
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 扩展。 - 使用
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
进行验证。 - 部署 Grafana 扩展。
kubectl apply -f grafana-extension.yaml
成功后,将创建 Grafana 应用:
app.kappctrl.k14s.io/grafana created
。 - 检查 Grafana 应用的状态。
kubectl get app grafana -n tanzu-system-monitoring
状态应从Reconciling
更改为Reconcile succeeded
。如果状态为Reconcile failed
,请参见“故障排除”。 - 查看 Grafana 应用的详细状态。
kubectl get app grafana -n tanzu-system-monitoring -o yaml
- 验证 Grafana 部署。
kubectl get deployments -n tanzu-system-monitoring
使用 LoadBalancer 类型的 Contour Envoy 服务访问 Grafana 仪表板
- 获取 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]}'
- 要验证 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
- 导航到 https://grafana.system.tanzu,访问 Grafana 仪表板。
由于站点使用自签名证书,您可能需要浏览特定于浏览器的安全警告,然后才能访问仪表板。
- 要进行生产访问,请在 DNS 服务器上创建两条 CNAME 记录,以将 Envoy 服务负载均衡器
External-IP
地址映射到 Grafana 仪表板。
使用 NodePort 类型的 Contour Envoy 服务访问 Grafana 仪表板
- 将上下文切换到置备了集群的 vSphere 命名空间。
kubectl config use-context VSPHERE-NAMESPACE
- 列出集群中的节点。
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
- 选择其中一个工作节点,然后使用以下命令对其进行描述。
kubectl describe virtualmachines tkgs-cluster-X-workers-9twdr-59bc54dc97-kt4cm
- 找到虚拟机的 IP 地址,例如
Vm Ip: 10.115.22.43
。 - 要验证 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
- 导航到 https://grafana.system.tanzu,访问 Grafana 仪表板。
由于站点使用自签名证书,您可能需要浏览特定于浏览器的安全警告,然后才能访问仪表板。
对 Grafana 部署进行故障排除
如果部署或协调失败,请运行 kubectl get pods -A
以查看 pod 状态。contour
和 envoy
pod 应为 Running
。如果 pod 状态为 ImagePullBackOff
或 ImageCrashLoopBackOff
,则无法提取容器映像。检查数据值和扩展 YAML 文件中的注册表 URL,并确保它们准确无误。
name-XXXX
是运行
kubectl get pods -A
时的唯一 pod 名称:
kubectl logs pod/grafana-XXXX -c grafana -n tanzu-system-monitoring
更新Grafana扩展
更新部署到 Tanzu Kubernetes 集群的 Contour 扩展。
- 从
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
- 更新
grafana-data-values.yaml
中的 Grafana 数据值。请参见配置 Grafana 扩展。 - 更新 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 扩展。 - 检查扩展的状态。
kubectl get app grafana -n tanzu-system-monitoring
更新 Grafana 后,状态应更改为
Reconcile Succeeded
。 - 查看详细状态并在必要时进行故障排除。
kubectl get app grafana -n tanzu-system-monitoring -o yaml
删除 Grafana 扩展
tanzu-system-monitoring
。如果两个扩展部署到同一个集群,请先删除每个扩展,然后再删除命名空间。
- 将目录更改为 Grafana 扩展。
cd /tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/grafana
- 删除 Grafana 应用程序。
kubectl delete app grafana -n tanzu-system-monitoring
预期结果:
app.kappctrl.k14s.io "grafana" deleted
。 - 验证是否已删除 Grafana 应用。
kubectl get app grafana -n tanzu-system-monintoring
预期结果:
apps.kappctrl.k14s.io "grafana" not found
。 - 删除
tanzu-system-monitoring
命名空间以及 Grafana 服务帐户和角色对象。警告: 如果部署了 Prometheus,请勿执行此步骤。kubectl delete -f namespace-role.yaml
- 如果要重新部署 Grafana,请移除密钥
grafana-data-values
。kubectl delete secret grafana-data-values -n tanzu-system-monitoring
预期结果:
secret "grafana-data-values" deleted
。
升级 Grafana 扩展
- 导出 Grafana configmap 并将其另存为备份。
kubectl get configmap grafana -n tanzu-system-monitoring -o 'go-template={{ index .data "grafana.yaml" }}' > grafana-configmap.yaml
- 删除现有的 Grafana 扩展。请参见删除 Grafana 扩展。
- 部署 Grafana 扩展。请参见部署 Grafana 扩展以实现可视化和分析。
配置 Grafana 扩展
/tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/grafana/grafana-data-values.yaml
中设置。
参数 | 描述 | 类型 | 默认 |
---|---|---|---|
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 在此文件中, |
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 编码;用于解码: |
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 | 生成的证书密钥 |