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

Cumpla con los siguientes requisitos previos para implementar la extensión.

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

La extensión TKG para Grafana implementa un único contenedor. Para obtener más información, consulte https://grafana.com/.
Contenedor Tipo de recurso Réplicas Descripción
Grafana Implementación 2 Visualización de datos
La extensión está configurada para extraer los contenedores del registro público de VMware en https://projects.registry.vmware.com/. Si utiliza un registro privado, cambie la URL del endpoint en los valores de datos y las configuraciones de extensión para que coincidan. Consulte Configurar la extensión Grafana.
  1. Asegúrese de haber completado cada uno de los requisitos previos de la extensión Grafana. Consulte Requisitos previos de la extensión Grafana.
  2. Cambie el directorio a la extensión Grafana.
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/grafana
  3. 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
  4. 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
  5. 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 en monitoring.grafana.ingress.virtual_host_fqdn. Consulte Configurar la extensión Grafana para obtener más información.

  6. 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 de tanzu-system-monitoring. Compruébelo mediante kubectl get secrets -n tanzu-system-monitoring.

  7. 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.

  8. Compruebe el estado de la aplicación Grafana.
    kubectl get app grafana -n tanzu-system-monitoring
    El estado debe cambiar de Reconciling a Reconcile succeeded. Si el estado es Reconcile failed, consulte Solucionar problemas.
  9. Vea el estado detallado de la aplicación Grafana.
    kubectl get app grafana -n tanzu-system-monitoring -o yaml
  10. 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

Si se implementa el servicio Contour Envoy de tipo LoadBalancer como requisito previo y lo especificó en el archivo de configuración de Grafana, obtenga la dirección IP externa del equilibrador de carga y cree registros de DNS para el FQDN de Grafana.
  1. 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ón External-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ón External-IP mediante el siguiente comando.
    kubectl get svc envoy -n tanzu-system-ingress -o jsonpath='{.status.loadBalancer.ingress[0]}'
  2. 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ón External-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
    
  3. 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.

  4. 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

Si se implementa el servicio Contour Envoy de tipo NodePort como requisito previo y lo especificó en el archivo de configuración de Grafana, obtenga la dirección IP de la máquina virtual de un nodo de trabajo y cree registros de DNS para el FQDN de Grafana.
  1. 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
  2. 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
  3. 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
  4. Busque la dirección IP de la máquina virtual; por ejemplo, Vm Ip: 10.115.22.43.
  5. 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
    
  6. 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.

Compruebe los registros del contenedor, en los que 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.

  1. 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
    
  2. Actualice los valores de datos de Grafana en grafana-data-values.yaml. Consulte Configurar la extensión Grafana.
  3. 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 de syncPeriod en grafana-extension.yaml a un valor menor y aplique la extensión de Grafana mediante kubectl apply -f grafana-extension.yaml.
  4. 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.

  5. 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

Elimine la extensión Grafana de un clúster de Tanzu Kubernetes.
Nota: Complete los pasos en orden. No elimine el espacio de nombres, la cuenta de servicio ni los objetos de función antes de eliminar totalmente la aplicación de Grafana. De lo contrario, podría provocar errores en el sistema.
Nota: Las extensiones Prometheus y Grafana se implementan en el mismo espacio de nombres: tanzu-system-monitoring. Si implementó ambas extensiones en el mismo clúster, elimine cada extensión antes de eliminar el espacio de nombres.
  1. Cambie el directorio a la extensión Grafana.
    cd /tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/grafana
  2. Elimine la aplicación Grafana.
    kubectl delete app grafana -n tanzu-system-monitoring

    Resultado esperado: app.kappctrl.k14s.io "grafana" deleted.

  3. 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.

  4. 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
  5. 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

Si tiene una extensión de Grafana existente implementada, puede actualizarla a la versión más reciente.
  1. 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
  2. Elimine la extensión Grafana existente. Consulte Eliminar la extensión Grafana.
  3. Implemente la extensión Grafana. Consulte Implementar la extensión Grafana para la visualización y el análisis.

Configurar la extensión Grafana

La configuración de Grafana se establece en /tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/grafana/grafana-data-values.yaml.
Tabla 1. Parámetros de configuración de Grafana
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 grafana_net se utiliza para integrar con Grafana. Por ejemplo, para importar el panel de control directamente desde Grafana.com.

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: echo "xxxxxx" | base64 --decode

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