En este tema se describe cómo implementar la extensión TKG v1.3.1 para Prometheus. Prometheus es un sistema de supervisión de sistemas y servicios. Recopila métricas de destinos configurados a intervalos determinados, evalúa las expresiones de las reglas, muestra los resultados y puede activar alertas si se observa alguna condición como verdadera. Alertmanager controla las alertas generadas por Prometheus y las enruta a sus endpoints receptores. Implemente la extensión de TKG para Prometheus para generar y ver métricas para los clústeres de Tanzu Kubernetes.
Requisitos previos de la extensión
- Aprovisionar un clúster. Consulte Flujo de trabajo para aprovisionar clústeres de Tanzu Kubernetes mediante la API v1alpha2 de TKGS.
Nota: Para instalar la extensión Prometheus, 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 ejecuta kubectl.
- Instalar los requisitos previos de las extensiones TKG en el clúster de Tanzu Kubernetes de destino.
Implementar la extensión Prometheus
Contenedor | Tipo de recurso | Réplicas | Descripción |
---|---|---|---|
prometheus-alertmanager |
Implementación | 1 | Controla las alertas enviadas por las aplicaciones cliente, como el servidor Prometheus. |
prometheus-cadvisor |
DaemonSet | 5 | Analiza y expone datos de rendimiento y uso de recursos de los contenedores que se están ejecutando. |
prometheus-kube-state-metrics |
Implementación | 1 | Supervisa el estado y la capacidad del nodo, la conformidad del conjunto de réplicas, el pod, el estado del trabajo y el trabajo cron, las solicitudes de recursos y los límites. |
prometheus-node-exporter |
DaemonSet | 5 | Exportador de métricas de hardware y SO expuestas por los kernels. |
prometheus-pushgateway |
Implementación | 1 | Servicio que le permite insertar métricas de los trabajos que no se pueden extraer. |
prometheus-server |
Implementación | 1 | Proporciona funcionalidades básicas, como la extracción, el procesamiento de reglas y las alertas. |
- Asegúrese de haber completado cada uno de los requisitos previos de la extensión. Consulte Requisitos previos de la extensión.
- Cambie el directorio a la extensión Prometheus.
cd /tkg-extensions-v1.3.1+vmware.1/extensions/monitoring/prometheus
- Cree el espacio de nombres
tanzu-system-monitoring
, así como los objetos de función y la cuenta de servicio Prometheus.kubectl apply -f namespace-role.yaml
- Cree un archivo de valores de datos de Prometheus.
El archivo de valores de datos de ejemplo proporciona la configuración mínima.
cp prometheus-data-values.yaml.example prometheus-data-values.yaml
- Configure la extensión Prometheus mediante la actualización de
prometheus-data-values.yaml
. Consulte Configurar la extensión Prometheus para ver una descripción de los campos y las opciones.Si el clúster no se aprovisiona con una clase de almacenamiento persistente predeterminada, puede especificarla 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: prometheus_server: image: repository: projects.registry.vmware.com/tkg/prometheus pvc: storage_class: vwt-storage-policy storage: "8Gi" alertmanager: image: repository: projects.registry.vmware.com/tkg/prometheus pvc: storage_class: vwt-storage-policy storage: "8Gi" ...
- Cree el secreto de Prometheus con el archivo
prometheus-data-values
.kubectl create secret generic prometheus-data-values --from-file=values.yaml=prometheus-data-values.yaml -n tanzu-system-monitoring
El secreto de
prometheus-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 Prometheus.
kubectl apply -f prometheus-extension.yaml
Cuando finalice correctamente, se creará la aplicación Prometheus:
app.kappctrl.k14s.io/prometheus created
. - Compruebe el estado de la aplicación Prometheus.
kubectl get app prometheus -n tanzu-system-monitoring
El estado debe cambiar deReconciling
aReconcile succeeded
. Si el estado esReconcile failed
, consulte Solucionar problemas. - Vea información detallada sobre la aplicación Prometheus.
kubectl get app prometheus -n tanzu-system-monitoring -o yaml
- Compruebe los DaemonSets de Prometheus.
kubectl get daemonsets -n tanzu-system-monitoring
- Compruebe las implementaciones de Prometheus.
kubectl get deployments -n tanzu-system-monitoring
Solucionar problemas de implementación de Prometheus
Si se produce un error en la implementación o la reconciliación, ejecute kubectl get pods -A
para ver el estado de los pods. En condiciones normales, debería ver los pods con el estado Running
. Si el estado es ImagePullBackOff
o ImageCrashLoopBackOff
, quiere decir que la imagen del contenedor no se pudo extraer del registro . Compruebe la URL 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/prometheus-alertmanager-XXXXX -c prometheus-alertmanager -n tanzu-system-monitoring
kubectl logs pod/prometheus-server-XXXXX -c prometheus-server -n tanzu-system-monitoring
Actualizar la extensión Prometheus
Actualice la configuración de una extensión de Prometheus que esté implementada en un clúster de Tanzu Kubernetes.
- Obtenga los valores de datos de Prometheus del secreto.
kubectl get secret prometheus-data-values -n tanzu-system-monitoring -o 'go-template={{ index .data "values.yaml" }}' | base64 -d > prometheus-data-values.yaml
- Actualice el secreto de los valores de datos de Prometheus.
kubectl create secret generic prometheus-data-values --from-file=values.yaml=prometheus-data-values.yaml -n tanzu-system-monitoring -o yaml --dry-run | kubectl replace -f-
La extensión Prometheus se conciliará 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
enprometheus-extension.yaml
a un valor menor y aplique la extensión de Fluent Bit mediantekubectl apply -f prometheus-extension.yaml
. - Compruebe el estado de la extensión.
kubectl get app prometheus -n tanzu-system-monitoring
El estado debe cambiar a
Reconcile Succeeded
una vez que Prometheus se actualice. - Vea el estado detallado y solucione los problemas.
kubectl get app prometheus -n tanzu-system-monitoring -o yaml
Eliminar la extensión Prometheus
- Cambie el directorio a la extensión Prometheus.
cd /extensions/monitoring/prometheus/
- Elimine la aplicación Prometheus.
kubectl delete app prometheus -n tanzu-system-monitoring
Resultado esperado:
app.kappctrl.k14s.io "prometheus" deleted
. - Compruebe que el aplicación Prometheus se haya eliminado.
kubectl get app prometheus -n tanzu-system-monitoring
Resultado esperado:
apps.kappctrl.k14s.io "prometheus" not found
. - Elimine el espacio de nombres
tanzu-system-monitoring
, así como los objetos de función y la cuenta de servicio de Prometheus.Advertencia: No lleve a cabo este paso si Grafana está implementado.kubectl delete -f namespace-role.yaml
- Si desea volver a implementar Prometheus, elimine el secreto
prometheus-data-values
.kubectl delete secret prometheus-data-values -n tanzu-system-monitoring
Resultado esperado:
secret "prometheus-data-values" deleted
.
Actualizar la extensión Prometheus
- Exporte el mapa de configuración de Prometheus y guárdelo como copia de seguridad.
kubectl get configmap prometheus -n tanzu-system-monitoring -o 'go-template={{ index .data "prometheus.yaml" }}' > prometheus-configmap.yaml
- Elimine la implementación de Prometheus existente. Consulte Eliminar la extensión Prometheus.
- Implemente la extensión Prometheus. Consulte Implementar la extensión Prometheus.
Configurar la extensión Prometheus
/extensions/monitoring/prometheus/prometheus-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.prometheus_server.config.prometheus_yaml | Detalles de configuración del clúster de Kubernetes que se pasarán a Prometheus | archivo yaml | prometheus.yaml |
monitoring.prometheus_server.config.alerting_rules_yaml | Reglas de alerta detalladas definidas en Prometheus | archivo yaml | alerting_rules.yaml |
monitoring.prometheus_server.config.recording_rules_yaml | Reglas de registro detalladas definidas en Prometheus | archivo yaml | recording_rules.yaml |
monitoring.prometheus_server.service.type | Tipo de servicio para exponer Prometheus. Valores admitidos: ClusterIP | string | ClusterIP |
monitoring.prometheus_server.enable_alerts.kubernetes_api | Habilitar alertas de SLO para la API de Kubernetes en Prometheus | booleano | true |
monitoring.prometheus_server.sc.aws_type | Tipo de AWS definido para storageclass en AWS | string | gp2 |
monitoring.prometheus_server.sc.aws_fsType | Tipo de sistema de archivos de AWS definido para storageclass en AWS | string | ext4 |
monitoring.prometheus_server.sc.allowVolumeExpansion | Definir si se permite la expansión de volumen para storageclass en AWS | booleano | true |
monitoring.prometheus_server.pvc.annotations | Anotaciones de clase de almacenamiento | mapa | {} |
monitoring.prometheus_server.pvc.storage_class | Clase de almacenamiento que se utilizará para la notificación de volumen persistente. De forma predeterminada, es nulo y se utiliza el aprovisionador predeterminado. | string | nulo |
monitoring.prometheus_server.pvc.accessMode | Defina el modo de acceso para la notificación de volumen persistente. Valores compatibles: ReadWriteOnce, ReadOnlyMany, ReadWriteMany | string | ReadWriteOnce |
monitoring.prometheus_server.pvc.storage | Definir tamaño de almacenamiento para notificación de volumen persistente | string | 8Gi |
monitoring.prometheus_server.deployment.replicas | Cantidad de réplicas de Prometheus | entero | 1 |
monitoring.prometheus_server.image.repository | Ubicación del repositorio con la imagen de Prometheus. 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/prometheus |
monitoring.prometheus_server.image.name | Nombre de la imagen de Prometheus | string | prometheus |
monitoring.prometheus_server.image.tag | Etiqueta de la imagen de Prometheus. Es posible que este valor tenga que actualizarse si va a actualizar la versión. | string | v2.17.1_vmware.1 |
monitoring.prometheus_server.image.pullPolicy | Directiva de extracción de imágenes de Prometheus | string | IfNotPresent |
monitoring.alertmanager.config.slack_demo | Configuración de notificaciones de Slack para Alertmanager | string | slack_demo: name: slack_demo slack_configs: - api_url: https://hooks.slack.com channel: '#alertmanager-test' |
monitoring.alertmanager.config.email_receiver | Configuración de notificaciones de correo electrónico para Alertmanager | string | email_receiver: name: email-receiver email_configs: - to: [email protected] send_resolved: false from: [email protected] smarthost: smtp.eample.com:25 require_tls: false |
monitoring.alertmanager.service.type | Tipo de servicio para exponer Alertmanager. Valores admitidos: ClusterIP | string | ClusterIP |
monitoring.alertmanager.image.repository | Ubicación del repositorio con la imagen de Alertmanager. 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/prometheus |
monitoring.alertmanager.image.name | Nombre de la imagen de Alertmanager | string | alertmanager |
monitoring.alertmanager.image.tag | Etiqueta de la imagen de Alertmanager. Es posible que este valor tenga que actualizarse si va a actualizar la versión. | string | v0.20.0_vmware.1 |
monitoring.alertmanager.image.pullPolicy | Directiva de extracción de imágenes de Alertmanager | string | IfNotPresent |
monitoring.alertmanager.pvc.annotations | Anotaciones de clase de almacenamiento | mapa | {} |
monitoring.alertmanager.pvc.storage_class | Clase de almacenamiento que se utilizará para la notificación de volumen persistente. De forma predeterminada, es nulo y se utiliza el aprovisionador predeterminado. | string | nulo |
monitoring.alertmanager.pvc.accessMode | Defina el modo de acceso para la notificación de volumen persistente. Valores compatibles: ReadWriteOnce, ReadOnlyMany, ReadWriteMany | string | ReadWriteOnce |
monitoring.alertmanager.pvc.storage | Definir tamaño de almacenamiento para notificación de volumen persistente | string | 2Gi |
monitoring.alertmanager.deployment.replicas | Cantidad de réplicas de Alertmanager | entero | 1 |
monitoring.kube_state_metrics.image.repository | Repositorio que contiene la imagen de kube-state-metircs. 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/prometheus |
monitoring.kube_state_metrics.image.name | Nombre contiene la imagen kube-state-metircs | string | kube-state-metrics |
monitoring.kube_state_metrics.image.tag | Etiqueta de la imagen de kube-state-metircs. Es posible que este valor tenga que actualizarse si va a actualizar la versión. | string | v1.9.5_vmware.1 |
monitoring.kube_state_metrics.image.pullPolicy | directiva de extracción de imágenes de kube-state-metircs | string | IfNotPresent |
monitoring.kube_state_metrics.deployment.replicas | Cantidad de réplicas de kube-state-metrics | entero | 1 |
monitoring.node_exporter.image.repository | Repositorio que contiene la imagen de node-exporter. 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/prometheus |
monitoring.node_exporter.image.name | Nombre de la imagen de node-exporter | string | node-exporter |
monitoring.node_exporter.image.tag | Etiqueta de la imagen de node-exporter. Es posible que este valor tenga que actualizarse si va a actualizar la versión. | string | v0.18.1_vmware.1 |
monitoring.node_exporter.image.pullPolicy | directiva de extracción de imágenes de nodo-exporter | string | IfNotPresent |
monitoring.node_exporter.hostNetwork | Si se establece en hostNetwork: true , el pod puede utilizar el espacio de nombres de red y los recursos de red del nodo. |
booleano | false |
monitoring.node_exporter.deployment.replicas | Cantidad de réplicas de node-exporter | entero | 1 |
monitoring.pushgateway.image.repository | Repositorio que contiene la imagen de pushgateway. 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/prometheus |
monitoring.pushgateway.image.name | Nombre de la imagen de pushgateway | string | pushgateway |
monitoring.pushgateway.image.tag | Etiqueta de la imagen de pushgateway. Es posible que este valor tenga que actualizarse si va a actualizar la versión. | string | v1.2.0_vmware.1 |
monitoring.pushgateway.image.pullPolicy | Directiva de extracción de imágenes de pushgateway | string | IfNotPresent |
monitoring.pushgateway.deployment.replicas | Cantidad de réplicas de pushgateway | entero | 1 |
monitoring.cadvisor.image.repository | Repositorio que contiene la imagen de cadvisor. 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/prometheus |
monitoring.cadvisor.image.name | Nombre de la imagen de cadvisor | string | cadvisor |
monitoring.cadvisor.image.tag | Etiqueta de la imagen de cadvisor. Es posible que este valor tenga que actualizarse si va a actualizar la versión. | string | v0.36.0_vmware.1 |
monitoring.cadvisor.image.pullPolicy | Directiva de extracción de imágenes de cadvisor | string | IfNotPresent |
monitoring.cadvisor.deployment.replicas | Cantidad de réplicas de cadvisor | entero | 1 |
monitoring.ingress.enabled | Habilita/deshabilita la entrada para Prometheus y Alertmanager | booleano | false Para utilizar la entrada, establezca este campo en |
monitoring.ingress.virtual_host_fqdn | Nombre de host para acceder a Prometheus y Alertmanager | string | prometheus.system.tanzu |
monitoring.ingress.prometheus_prefix | Prefijo de ruta de acceso para Prometheus | string | / |
monitoring.ingress.alertmanager_prefix | Prefijo de ruta de acceso para Alertmanager | string | /alertmanager/ |
monitoring.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.ingress.tlsCertificate.tls.key | Clave privada de certificado opcional para la entrada si desea utilizar su propio certificado TLS. | string | Clave de certificado generada |
Parámetro | Descripción | Tipo | Predeterminado |
---|---|---|---|
evaluation_interval | Frecuencia para evaluar reglas | duration | 1m |
scrape_interval | Frecuencia de extracción de destinos | duration | 1m |
scrape_timeout | Tiempo agotado para una solicitud de extracción | duration | 10s |
rule_files | Los archivos de reglas especifican una lista de globs. Las reglas y las alertas se leen desde todos los archivos que coincidan | archivo yaml | |
scrape_configs | Una lista de configuraciones de extracción. | lista | |
job_name | El nombre del trabajo asignado a métricas recopiladas de forma predeterminada | string | |
kubernetes_sd_configs | Lista de configuraciones de detección de servicios de Kubernetes. | lista | |
relabel_configs | Lista de configuraciones de reetiqueta de destino. | lista | |
action | Acción que se realizará en función de la coincidencia de expresión regular. | string | |
regex | Expresión regular con la que coincide el valor extraído. | string | |
source_labels | Las etiquetas de origen seleccionan valores de las etiquetas existentes. | string | |
scheme | Configura el esquema de protocolo utilizado para las solicitudes. | string | |
tls_config | Configura las opciones de TLS de la solicitud de chat. | string | |
ca_file | Certificado de CA con el que se validará el certificado del servidor de API. | filename | |
insecure_skip_verify | Deshabilite la validación del certificado del servidor. | booleano | |
bearer_token_file | Información opcional de autenticación del archivo de token de portador. | filename | |
replacement | Valor de reemplazo contra el que se realiza un reemplazo de expresión regular si la expresión regular coincide. | string | |
target_label | Etiqueta en la que el valor resultante se escribe en una acción de reemplazo. | string |
Parámetro | Descripción | Tipo | Predeterminado |
---|---|---|---|
resolve_timeout | ResolveTimeout es el valor predeterminado que utiliza Alertmanager si la alerta no incluye EndsAt | duration | 5m |
smtp_smarthost | El host SMTP a través del cual se envían los correos electrónicos. | duration | 1m |
slack_api_url | URL de webhook de Slack. | string | global.slack_api_url |
pagerduty_url | La URL de pagerduty a la que se enviarán solicitudes de API. | string | global.pagerduty_url |
plantillas | Archivos desde los que se leen las definiciones de plantillas de notificación personalizadas | ruta del archivo | |
group_by | agrupar las alertas por etiqueta | string | |
group_interval | Establezca el tiempo de espera antes de enviar una notificación sobre nuevas alertas que se agregan a un grupo | duration | 5m |
group_wait | Tiempo que se debe esperar inicialmente para enviar una notificación para un grupo de alertas | duration | 30s |
repeat_interval | Tiempo de espera antes de volver a enviar una notificación si ya se ha enviado correctamente para una alerta | duration | 4h |
receivers | Una lista de receptores de notificaciones. | lista | |
severity | Gravedad del incidente. | string | |
channel | El canal o el usuario al que se enviarán notificaciones. | string | |
html | El cuerpo HTML de la notificación por correo electrónico. | string | |
text | El cuerpo de texto de la notificación por correo electrónico. | string | |
send_resolved | Indica si se informa sobre las alertas resueltas. | filename | |
email_configs | Configuraciones para la integración del correo electrónico | booleano |
Anotación del pod | Descripción |
---|---|
prometheus.io/scrape |
La configuración predeterminada extraerá en todos los pods y, si se establece en false, esta anotación excluirá el pod del proceso de extracción. |
prometheus.io/path |
Si la ruta de las métricas no es /metrics, defínala con esta anotación. |
prometheus.io/port |
Realice la extracción del pod en el puerto indicado en lugar de en los puertos declarados del pod (el valor predeterminado es un destino sin puertos si no se declara ninguno). |
apiVersion: apps/v1beta2 # for versions before 1.8.0 use extensions/v1beta1 kind: DaemonSet metadata: name: fluentd-elasticsearch namespace: weave labels: app: fluentd-logging spec: selector: matchLabels: name: fluentd-elasticsearch template: metadata: labels: name: fluentd-elasticsearch annotations: prometheus.io/scrape: 'true' prometheus.io/port: '9102' spec: containers: - name: fluentd-elasticsearch image: gcr.io/google-containers/fluentd-elasticsearch:1.20