Puedes utilizar el Archivomongodb-prometheus-sample.yaml para implementar un recurso MongoDB en su clúster Kubernetes, con un ServiceMonitor para indicar a Prometheus cómo consumir datos de métricas de este.
El ejemplo especifica un recurso MongoDB simple con un usuario y el spec.prometheus atributo con autenticación HTTP básica y sin TLS. El ejemplo permite probar las métricas que MongoDB envía a Prometheus.
Nota
No se puede utilizar Prometheus con una implementación de varios clústeres de Kubernetes.
Inicio rápido
Probamos esta configuración con 0.54 la versión del operador Prometheus.
Requisitos previos
Kubernetes 1.16+
Timón 3+
Instalar el operador Prometheus
Puedes instalar Prometheus Operator con Helm. Para obtener más información, consulta las instrucciones de instalación.
Para instalar el operador Prometheus usando Helm, ejecute los siguientes comandos:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack \ --namespace <prometheus-system> \ --create-namespace
Instala el operador de los controladores de MongoDB para Kubernetes
Ejecute el siguiente comando para instalar el operador de Kubernetes y crear un espacio de nombres que contenga el operador de Kubernetes y los recursos:
helm install mongodb-kubernetes-operator mongodb/mongodb-kubernetes \ --namespace <mongodb> --create-namespace
Para obtener más información,consulte Instalar los controladores MongoDB para el operador de Kubernetes.
Crear un recurso de MongoDB
Puede usar el archivo mongodb-prometheus-sample.yaml para implementar un recurso de MongoDB en su clúster de Kubernetes, con un ServiceMonitor para indicar a Prometheus cómo consumir datos de métricas de ese recurso.
Puede aplicar la muestra directamente con el siguiente comando:
Nota
Especifique la ruta completa al archivo mongodb-prometheus-sample.yaml. Asegúrese de especificar spec.credentials spec.cloudManager.configMapRef.namey.
kubectl apply -f <mongodb-prometheus-sample.yaml>
Este comando crea dos secretos que contienen la autenticación para un nuevo usuario de MongoDB y la autenticación HTTP básica para el punto final de Prometheus. El comando crea ambos secretos en el mongodb espacio de nombres.
Este comando también crea un ServiceMonitor que configura Prometheus para consumir las métricas de este recurso. Este comando crea el ServiceMonitor en el prometheus-system espacio de nombres.
Opcional: Habilite TLS en el punto final de Prometheus
Instalar Cert-Manager
Para instalar cert-manager usando Helm, consulte la documentación de instalación de cert-manager.
Para crear un administrador de
Issuercertificados, consulte la documentación de configuración del administrador de certificadosPara crear un certificado, consulte la documentación de uso de cert-manager.
Habilitar TLS en el CRD de MongoDB
Importante
¡NO use esta configuración en entornos de producción! Un experto en seguridad le aconsejará sobre cómo configurar TLS.
Para habilitar TLS, debe agregar una nueva entrada a la sección del recurso personalizado spec.prometheus de MongoDB. Ejecute la siguiente operación de parche para agregar la entrada necesaria.
Nota
tlsSecretKeyRef.name apunta a un secreto de tipo kubernetes.io/tls que contiene un certificado de servidor.
kubectl patch mdbc mongodb --type='json' \ -p='[{"op": "add", "path": "/spec/prometheus/tlsSecretKeyRef", "value":{"name": "prometheus-target-cert"}}]' \ --namespace mongodb
La siguiente respuesta aparece:
mongodbenterprise.mongodbenterprise.mongodb.com/mongodb patched
Después de unos minutos, el recurso MongoDB debería volver a la fase de ejecución. Ahora debe configurar Prometheus ServiceMonitor para que apunte al punto final HTTPS.
Actualizar ServiceMonitor
Para actualizar ServiceMonitor, ejecute el siguiente comando para parchear el recurso nuevamente:
kubectl patch servicemonitors mongodb-sm --type='json' \ -p=' [ {"op": "replace", "path": "/spec/endpoints/0/scheme", "value": "https"}, {"op": "add", "path": "/spec/endpoints/0/tlsConfig", "value": {"insecureSkipVerify": true}} ] ' \ --namespace mongodb
Aparece la siguiente respuesta:
servicemonitor.monitoring.coreos.com/mongodb-sm patched
Con estos cambios, el nuevo ServiceMonitor apunta al punto final HTTPS (definido /spec/endpoints/0/scheme en). También se spec/endpoints/0/tlsConfig/insecureSkipVerify configura true como para que Prometheus no verifique los certificados TLS en MongoDB.
Prometheus ahora debería poder rastrear el objetivo MongoDB usando HTTPS.
mongodb-prometheus-sample.yaml
Cree el siguiente mongodb-prometheus-sample.yaml archivo para implementar un recurso MongoDB en su clúster de Kubernetes, con un ServiceMonitor para indicar a Prometheus cómo consumir datos de métricas de este.
Este archivo de ejemplo especifica un recurso MongoDB simple con un usuario y el atributo con autenticación spec.prometheus HTTP básica y sin TLS. El ejemplo permite probar las métricas que MongoDB envía a Prometheus.
Para obtener más información, consulte Configuración de Prometheus.
--- apiVersion: mongodb.com/v1 kind: MongoDB metadata: name: my-replica-set spec: members: 3 version: 8.0.0 cloudManager: configMapRef: name: <project-configmap> credentials: <credentials-secret> type: ReplicaSet persistent: true prometheus: passwordSecretRef: # SecretRef to a Secret with a 'password' entry on it. name: metrics-endpoint-password # change this value to your Prometheus username username: prometheus-username # Enables HTTPS on the prometheus scrapping endpoint # This should be a reference to a Secret type kuberentes.io/tls # tlsSecretKeyRef: # name: <prometheus-tls-cert-secret> # Port for Prometheus, default is 9216 # port: 9216 # # Metrics path for Prometheus, default is /metrics # metricsPath: '/metrics' --- apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: This needs to match `spec.ServiceMonitorSelector.matchLabels` from your `prometheuses.monitoring.coreos.com` resouce. labels: release: prometheus name: mongodb-sm Make sure this namespace is the same as in `spec.namespaceSelector`. namespace: mongodb spec: endpoints: Configuring a Prometheus Endpoint with basic Auth. `prom-secret` is a Secret containing a `username` and `password` entries. - basicAuth: password: key: password name: metrics-endpoint-creds username: key: username name: metrics-endpoint-creds # This port matches what we created in our MongoDB Service. port: prometheus # If using HTTPS enabled endpoint, change scheme to https scheme: http # Configure different TLS related settings. For more information, see: # https://github.com/prometheus-operator/prometheus-operator/blob/main/pkg/apis/monitoring/v1/types.go#L909 # tlsConfig: # insecureSkipVerify: true What namespace to watch namespaceSelector: matchNames: # Change this to the namespace the MongoDB resource was deployed. - mongodb Service labels to match selector: matchLabels: app: my-replica-set-svc --- apiVersion: v1 kind: Secret metadata: name: metrics-endpoint-creds namespace: mongodb type: Opaque stringData: password: 'Not-So-Secure!' username: prometheus-username ...
Ejemplos
Los siguientes ejemplos muestran las definiciones de recursos necesarias para utilizar Prometheus con su recurso MongoDB.
Recurso MongoDB con Prometheus
Para obtener más información, consulte Configuración de Prometheus.
--- apiVersion: mongodb.com/v1 kind: MongoDB metadata: name: my-replica-set spec: members: 3 version: 8.0.0 cloudManager: configMapRef: name: <project-configmap> credentials: <credentials-secret> type: ReplicaSet persistent: true prometheus: passwordSecretRef: name: metrics-endpoint-password username: prometheus-username ...
Monitor de servicio
--- apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: labels: release: prometheus name: mongodb-sm namespace: mongodb spec: endpoints: - basicAuth: password: key: password name: metrics-endpoint-creds username: key: username name: metrics-endpoint-creds port: prometheus scheme: http namespaceSelector: matchNames: - mongodb selector: matchLabels: app: my-replica-set-svc ...
Credenciales de punto final
--- apiVersion: v1 kind: Secret metadata: name: metrics-endpoint-creds namespace: mongodb type: Opaque stringData: password: 'Not-So-Secure!' username: prometheus-username ...