本主题介绍了如何将 Grafana 部署到工作负载集群中。以下过程适用于 vSphere、Amazon Web Services (AWS) 和 Azure 部署。
Grafana 是开源软件,可用于直观显示和分析 Prometheus 在集群上收集的衡量指标数据。Tanzu Kubernetes Grid 包含可在工作负载集群上部署的 Grafana 软件包。
kubectl
,如安装 Tanzu CLI 和 Kubernetes CLI 以与 vSphere with Tanzu 主管配合使用或安装 Tanzu CLI 和 Kubernetes CLI 以与独立管理集群配合使用中所述。重要Tanzu Kubernetes Grid 中对 IPv6 地址的支持有限;请参见在 IPv6 上部署集群(仅限 vSphere)。如果未部署到仅 IPv6 网络环境,则必须在以下步骤中提供 IPv4 地址。
要准备集群,请执行以下操作:
获取要将 Grafana 部署到的工作负载集群的管理员凭据。例如:
tanzu cluster kubeconfig get my-cluster --admin
将 kubectl 的上下文设置为集群。例如:
kubectl config use-context my-cluster-admin@my-cluster
为 Grafana 启用 Ingress。默认情况下,Grafana 已启用 Ingress。这需要您安装以下软件包:
要部署 Grafana,请运行以下命令:
如果集群没有安装 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) 列表。确认 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 9.5.1+vmware.2-tkg.3 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
中设置 设置 grafana.pvc.storageClassName
的非 null 值:
grafana:
pvc:
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 软件包的命名空间。例如,my-packages
或 tanzu-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 软件包。例如:
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
命令时指定的命名空间中。
确认已成功协调 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 软件包的配置参数:
要检索软件包结构定义,请执行以下操作:
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 的服务类型。支持的值:ClusterIP 、NodePort 、LoadBalancer 。(对于 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 | 定义持久卷声明的访问模式。支持的值:ReadWriteOnce 、ReadOnlyMany 、ReadWriteMany 。 |
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-data-values.yaml
文件中的 Grafana 配置。
更新安装的软件包:
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 软件包,请运行:
tanzu package installed delete grafana --namespace my-packages
有关删除的信息,请参见删除软件包。
部署 Grafana 后,grafana 软件包将创建完全限定域名 (FQDN) 为 grafana.system.tanzu
的 Contour HTTPProxy 对象。
要使用此 FQDN 访问 Grafana 仪表板,请执行以下操作:
在本地 /etc/hosts
文件中创建一个条目,以将 IP 地址指向此 FQDN:
tanzu-system-ingress
命名空间中的 Envoy 服务使用 LoadBalancer 的 IP 地址。导航到 https://grafana.system.tanzu
由于站点使用自签名证书,您可能需要浏览浏览器特定的安全警告,然后才能访问仪表板。