En este tema se describe cómo implementar y administrar la extensión TKG v1.3.1 para Grafana. Grafana permite consultar, visualizar, alertar y explorar métricas independientemente de dónde se almacenen. Grafana proporciona herramientas para formar gráficos y visualizaciones a partir de los datos de la aplicación. Implemente la extensión de TKG para Grafana para generar y ver métricas para los clústeres de Tanzu Kubernetes.
Requisitos previos de la extensión Grafana
- Aprovisionar un clúster. Consulte Flujo de trabajo para aprovisionar clústeres de Tanzu Kubernetes mediante la API v1alpha2 de TKGS.
Nota: Debe implementar un clúster que utilice el serviceDomain predeterminado (
cluster.local
). - Conéctese al clúster. Consulte Conectarse a un clúster de Tanzu Kubernetes como usuario de vCenter Single Sign-On.
- Descargar el paquete de extensiones TKG v1.3.1 al host cliente en el que se ejecutan los comandos kubectl.
- Instalar los requisitos previos de las extensiones TKG en el clúster de destino.
Requisitos adicionales de la extensión Grafana
La extensión TKG v1.3.1 para supervisión de Grafana tiene requisitos adicionales que se deben tener en cuenta antes y después de la instalación.
- La extensión de supervisión de Grafana requiere una clase de almacenamiento persistente predeterminada. Se puede crear un clúster con una clase de almacenamiento persistente predeterminada o especificar uno en el archivo de configuración de Grafana al implementar la extensión. Consulte Revisar los requisitos previos de almacenamiento persistente para las extensiones de TKG.
- Una vez implementada la extensión Grafana, puede acceder al panel de control de Grafana a través de HTTP/S mediante la dirección IP expuesta por uno de los siguientes tipos de servicio de Kubernetes: ClusterIP (predeterminado), NodePort o LoadBalancer. Para acceder al panel de control de Grafana desde fuera del clúster, implemente la extensión Contour antes de implementar Grafana. Para implementar la extensión Contour, consulte Implementar y administrar la extensión TKG para la supervisión de Grafana.
Grafana admite los siguientes tipos de servicio de Kubernetes:
Tipo de servicio Descripción Accesibilidad ClusterIP
Expone el servicio en una IP interna del clúster. Solo se puede acceder al servicio desde el clúster. NodePort
Expone el servicio en la IP de cada nodo en un puerto estático. Se puede acceder al servicio desde fuera del clúster. LoadBalancer
Expone el servicio de forma externa mediante un equilibrador de carga. Se puede acceder al servicio desde fuera del clúster. ClusterIP
es el predeterminado, pero solo se puede acceder a él desde dentro del clúster. Si utiliza redes de NSX-T para el clúster supervisor, cree un servicio Envoy de Contour de tipo LoadBalancer. Si utiliza redes de vSphere vDS para el clúster supervisor, cree un servicio Envoy de Contour de tipo LoadBalancer o NodePort, en función de sus necesidades.
Implementar la extensión Grafana para la visualización y el análisis
Contenedor | Tipo de recurso | Réplicas | Descripción |
---|---|---|---|
Grafana | Implementación | 2 | Visualización de datos |
- Asegúrese de haber completado cada uno de los requisitos previos de la extensión Grafana. Consulte Requisitos previos de la extensión Grafana.
- Cambie el directorio a la extensión Grafana.
cd /tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/grafana
- Cree el espacio de nombres
tanzu-system-monitoring
y los objetos de función y la cuenta de servicio de Grafana.kubectl apply -f namespace-role.yaml
- Cree un archivo de valores de datos de Grafana.
El archivo de valores de datos de ejemplo proporciona la configuración mínima que se pide.
cp grafana-data-values.yaml.example grafana-data-values.yaml
- Configure la extensión Grafana mediante la actualización de
grafana-data-values.yaml
.Personalice la configuración según sea necesario. Consulte Configurar la extensión Grafana.
La
admin_password
debe estar codificada en base64, aunque la implementación de la extensión no se bloqueará si no es así. En el siguiente ejemplo, la contraseña "admin" está codificada en base64. Codifique su propia contraseña de Grafana aquí: https://www.base64encode.org/.Si el clúster no está aprovisionado con una clase de almacenamiento predeterminada, puede especificarlo en el archivo de valores de datos. Además, asegúrese de que el espacio de nombres tenga suficiente almacenamiento para las notificaciones de volumen persistente.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"
Si implementó Contour con un servicio Envoy de tipo LoadBalancer o NodePort, especifique eso en el archivo de configuración como se muestra. Consulte Configurar la extensión Grafana para obtener más información.monitoring: grafana: service: type: LoadBalancer OR NodePort
De forma predeterminada, la extensión Grafana crea el nombre de dominio completo (Fully Qualified Domain Name, FQDN)
grafana.system.tanzu
para acceder al panel de control de Grafana. Para personalizar este FQDN, especifique el nombre de host que desee en el archivo de configuración enmonitoring.grafana.ingress.virtual_host_fqdn
. Consulte Configurar la extensión Grafana para obtener más información. - Cree el secreto de Grafana con el archivo
grafana-data-values
.kubectl create secret generic grafana-data-values --from-file=values.yaml=grafana-data-values.yaml -n tanzu-system-monitoring
El secreto de
grafana-data-values
se crea en el espacio de nombres detanzu-system-monitoring
. Compruébelo mediantekubectl get secrets -n tanzu-system-monitoring
. - Implemente la extensión Grafana.
kubectl apply -f grafana-extension.yaml
Cuando finalice correctamente, se creará la aplicación Grafana:
app.kappctrl.k14s.io/grafana created
. - Compruebe el estado de la aplicación Grafana.
kubectl get app grafana -n tanzu-system-monitoring
El estado debe cambiar deReconciling
aReconcile succeeded
. Si el estado esReconcile failed
, consulte Solucionar problemas. - Vea el estado detallado de la aplicación Grafana.
kubectl get app grafana -n tanzu-system-monitoring -o yaml
- Compruebe la implementación de Grafana.
kubectl get deployments -n tanzu-system-monitoring
Acceder al panel de control de Grafana mediante un servicio Envoy de Contour de tipo LoadBalancer
- Obtenga la dirección
External-IP
para el servicio Envoy de tipo LoadBalancer.kubectl get service envoy -n tanzu-system-ingress
Debería ver la direcciónExternal-IP
que se devuelve, por ejemplo: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
Si lo prefiere, puede obtener la direcciónExternal-IP
mediante el siguiente comando.kubectl get svc envoy -n tanzu-system-ingress -o jsonpath='{.status.loadBalancer.ingress[0]}'
- Para comprobar la instalación de la extensión Grafana, actualice el archivo
/etc/hosts
local con el FQDN de Grafana asignado a la direcciónExternal-IP
del equilibrador de carga, como por ejemplo:127.0.0.1 localhost 127.0.1.1 ubuntu # TKG Grafana Extension with Envoy Load Balancer 10.195.141.17 grafana.system.tanzu
- Para acceder al panel de control de Grafana, desplácese hasta https://grafana.system.tanzu.
Dado que el sitio utiliza certificados autofirmados, es posible que tenga que pasar por una advertencia de seguridad específica del navegador antes de poder acceder al panel de control.
- Para el acceso de producción, cree dos registros CNAME en un servidor DNS que asignen la dirección
External-IP
del equilibrador de carga del servicio Envoy al panel de control de Grafana.
Acceder al panel de control de Grafana mediante un servicio Contour Envoy de tipo NodePort
- Cambie el contexto a la instancia de espacio de nombres de vSphere en la que se aprovisiona el clúster.
kubectl config use-context VSPHERE-NAMESPACE
- Enumere los nodos del clúster.
kubectl get virtualmachines
Debería ver los nodos del clúster; por ejemplo: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
- Seleccione uno de los nodos de trabajo y describa el nodo mediante el siguiente comando.
kubectl describe virtualmachines tkgs-cluster-X-workers-9twdr-59bc54dc97-kt4cm
- Busque la dirección IP de la máquina virtual; por ejemplo,
Vm Ip: 10.115.22.43
. - Para comprobar la instalación de la extensión Grafana, actualice el archivo
/etc/hosts
local con el FQDN de Grafana asignado a una dirección IP de nodo de trabajo, como por ejemplo:127.0.0.1 localhost 127.0.1.1 ubuntu # TKGS Grafana with Envoy NodePort 10.115.22.43 grafana.system.tanzu
- Para acceder al panel de control de Grafana, desplácese hasta https://grafana.system.tanzu.
Dado que el sitio utiliza certificados autofirmados, es posible que tenga que pasar por una advertencia de seguridad específica del navegador antes de poder acceder al panel de control.
Solucionar problemas originados en la implementación de Grafana
Si se produce un error en la implementación o la reconciliación, ejecute kubectl get pods -A
para ver el estado del pod. El de los pods contour
y envoy
debe ser Running
. Si el estado de un pod es ImagePullBackOff
o ImageCrashLoopBackOff
, no se podrá extraer la imagen del contenedor. Compruebe la URL del registro en los valores de datos y los archivos YAML de extensión, y asegúrese de que sean precisos.
name-XXXX
es el nombre único del pod cuando ejecuta
kubectl get pods -A
:
kubectl logs pod/grafana-XXXX -c grafana -n tanzu-system-monitoring
Actualizar la extensión Grafana
Actualice la extensión Grafana que está implementada en el clúster de Tanzu Kubernetes.
- Obtenga los valores de datos actuales de Grafana del secreto de
grafana-data-values
.kubectl get secret grafana-data-values -n tanzu-system-monitoring -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > grafana-data-values.yaml
- Actualice los valores de datos de Grafana en
grafana-data-values.yaml
. Consulte Configurar la extensión Grafana. - Actualice el secreto de los valores de datos de 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-
La extensión Grafana se concilia con los valores de datos actualizados.Nota: De forma predeterminada, kapp-controller sincronizará las aplicaciones cada 5 minutos. La actualización debería tener efecto en 5 minutos o menos. Si desea que la actualización se aplique inmediatamente, cambie los valores desyncPeriod
engrafana-extension.yaml
a un valor menor y aplique la extensión de Grafana mediantekubectl apply -f grafana-extension.yaml
. - Compruebe el estado de la extensión.
kubectl get app grafana -n tanzu-system-monitoring
El estado debe cambiar a
Reconcile Succeeded
una vez que Grafana se actualice. - Vea el estado detallado y solucione los problemas si es necesario.
kubectl get app grafana -n tanzu-system-monitoring -o yaml
Eliminar la extensión Grafana
tanzu-system-monitoring
. Si implementó ambas extensiones en el mismo clúster, elimine cada extensión antes de eliminar el espacio de nombres.
- Cambie el directorio a la extensión Grafana.
cd /tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/grafana
- Elimine la aplicación Grafana.
kubectl delete app grafana -n tanzu-system-monitoring
Resultado esperado:
app.kappctrl.k14s.io "grafana" deleted
. - Compruebe que la aplicación Grafana se haya eliminado.
kubectl get app grafana -n tanzu-system-monintoring
Resultado esperado:
apps.kappctrl.k14s.io "grafana" not found
. - Elimine el espacio de nombres
tanzu-system-monitoring
, así como los objetos de función y la cuenta de servicio de Grafana.Advertencia: No lleve a cabo este paso si Prometheus está implementado.kubectl delete -f namespace-role.yaml
- Si desea volver a implementar Grafana, elimine el secreto
grafana-data-values
.kubectl delete secret grafana-data-values -n tanzu-system-monitoring
Resultado esperado:
secret "grafana-data-values" deleted
.
Actualizar la extensión Grafana
- Exporte el mapa de configuración de Grafana y guárdelo como copia de seguridad.
kubectl get configmap grafana -n tanzu-system-monitoring -o 'go-template={{ index .data "grafana.yaml" }}' > grafana-configmap.yaml
- Elimine la extensión Grafana existente. Consulte Eliminar la extensión Grafana.
- Implemente la extensión Grafana. Consulte Implementar la extensión Grafana para la visualización y el análisis.
Configurar la extensión Grafana
/tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/grafana/grafana-data-values.yaml
.
Parámetro | Descripción | Tipo | Predeterminado |
---|---|---|---|
monitoring.namespace | Espacio de nombres en el que se implementará Prometheus | string | tanzu-system-monitoring |
monitoring.create_namespace | La marca indica si se debe crear el espacio de nombres especificado por monitoring.namespace | booleano | false |
monitoring.grafana.cluster_role.apiGroups | grupo de API definido para grafana clusterrole | lista | [""] |
monitoring.grafana.cluster_role.resources | recursos definidos para grafana clusterrole | lista | ["configmaps", "secrets"] |
monitoring.grafana.cluster_role.verbs | permiso de acceso definido para clusterrole | lista | ["get", "watch", "list"] |
monitoring.grafana.config.grafana_ini | Detalles del archivo de configuración de Grafana | archivo de configuración | grafana.ini En este archivo, la URL |
monitoring.grafana.config.datasource.type | Tipo de origen de datos de Grafana | string | prometheus |
monitoring.grafana.config.datasource.access | modo de acceso. proxy o directo (servidor o navegador en la interfaz de usuario) | string | proxy |
monitoring.grafana.config.datasource.isDefault | marcar como origen de datos predeterminado de Grafana | booleano | true |
monitoring.grafana.config.provider_yaml | Archivo de configuración para definir el proveedor del panel de control de grafana | archivo yaml | provider.yaml |
monitoring.grafana.service.type | Tipo de servicio para exponer Grafana. Valores admitidos: ClusterIP, NodePort y LoadBalancer | string | vSphere: NodePort, aws/azure: LoadBalancer |
monitoring.grafana.pvc.storage_class | Defina el modo de acceso para la notificación de volumen persistente. Valores compatibles: ReadWriteOnce, ReadOnlyMany, ReadWriteMany | string | ReadWriteOnce |
monitoring.grafana.pvc.storage | Definir tamaño de almacenamiento para notificación de volumen persistente | string | 2Gi |
monitoring.grafana.deployment.replicas | Cantidad de réplicas de Grafana | entero | 1 |
monitoring.grafana.image.repository | Ubicación del repositorio con la imagen de Grafana. El valor predeterminado es el registro de VMware público. Cambie este valor si utiliza un repositorio privado (p. ej., un entorno aislado). | string | projects.registry.vmware.com/tkg/grafana |
monitoring.grafana.image.name | Nombre de la imagen de Grafana | string | grafana |
monitoring.grafana.image.tag | Etiqueta de la imagen de Grafana. Es posible que este valor tenga que actualizarse si va a actualizar la versión. | string | v7.3.5_vmware.1 |
monitoring.grafana.image.pullPolicy | Directiva de extracción de imágenes de Grafana | string | IfNotPresent |
monitoring.grafana.secret.type | Tipo de secreto definido para el panel de control de Grafana | string | Opaco |
monitoring.grafana.secret.admin_user | nombre de usuario para acceder al panel de control de Grafana | string | YWRtaW4= El valor tiene codificación base64; para descodificar: |
monitoring.grafana.secret.admin_password | contraseña para acceder al panel de control de Grafana | string | nulo |
monitoring.grafana.secret.ldap_toml | Si utiliza la autenticación LDAP, la ruta del archivo de configuración LDAP | string | "" |
monitoring.grafana_init_container.image.repository | Repositorio que contiene una imagen de contenedor de init de Grafana. El valor predeterminado es el registro de VMware público. Cambie este valor si utiliza un repositorio privado (p. ej., un entorno aislado). | string | projects.registry.vmware.com/tkg/grafana |
monitoring.grafana_init_container.image.name | Nombre de la imagen de contenedor de init de Grafana | string | k8s-sidecar |
monitoring.grafana_init_container.image.tag | Etiqueta de la imagen de contenedor de init de Grafana. Es posible que este valor tenga que actualizarse si va a actualizar la versión. | string | 0.1.99 |
monitoring.grafana_init_container.image.pullPolicy | directiva de extracción de imágenes de contenedor de init de Grafana | string | IfNotPresent |
monitoring.grafana_sc_dashboard.image.repository | Repositorio que contiene la imagen del panel de control de Grafana. El valor predeterminado es el registro de VMware público. Cambie este valor si utiliza un repositorio privado (p. ej., un entorno aislado). | string | projects.registry.vmware.com/tkg/grafana |
monitoring.grafana_sc_dashboard.image.name | Nombre de la imagen del panel de control de Grafana | string | k8s-sidecar |
monitoring.grafana_sc_dashboard.image.tag | Etiqueta de la imagen del panel de control de Grafana. Es posible que este valor tenga que actualizarse si va a actualizar la versión. | string | 0.1.99 |
monitoring.grafana_sc_dashboard.image.pullPolicy | directiva de extracción de imagen del panel de control de Grafana | string | IfNotPresent |
monitoring.grafana.ingress.enabled | Habilita/inhabilita la entrada para Grafana | booleano | true |
monitoring.grafana.ingress.virtual_host_fqdn | Nombre de host para acceder a Grafana | string | grafana.system.tanzu |
monitoring.grafana.ingress.prefix | Prefijo de la ruta de acceso para Grafana | string | / |
monitoring.grafana.ingress.tlsCertificate.tls.crt | Certificado opcional para la entrada si desea utilizar su propio certificado TLS. De forma predeterminada, se genera un certificado autofirmado | string | Certificado generado |
monitoring.grafana.ingress.tlsCertificate.tls.key | Clave privada de certificado opcional para la entrada si desea utilizar su propio certificado TLS. | string | Clave de certificado generada |