Puedes utilizar el mongodb-prometheus-sample.yaml archivo para implementar un recurso de MongoDB en tu clúster de Kubernetes, con un ServiceMonitor para indicarle a Prometheus cómo consumir los datos de métricas del mismo.
El ejemplo especifica un recurso MongoDB simple con un usuario y el spec.prometheus atributo con autenticación HTTP básica y sin TLS. La muestra te permite probar las métricas que MongoDB envía a Prometheus.
Nota
No puedes usar Prometheus con una implementación multi-Kubernetes-clúster.
Inicio rápido
Probamos esta configuración con la versión 0.54 del Operador Prometheus.
Requisitos previos
Kubernetes 1.16+
Timón 3+
Instala el Prometheus Operator
Puedes instalar el Prometheus operador usando Helm. Para obtener más información, consulta las instrucciones de instalación.
Para instalar el Operador Prometheus usando Helm, ejecuta 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
Ejecuta el siguiente comando para instalar el Operador Kubernetes y crear un namespace que contenga al Operador Kubernetes y a 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
Especifica la ruta completa al archivo mongodb-prometheus-sample.yaml. Asegúrese de especificar spec.credentials y spec.cloudManager.configMapRef.name.
kubectl apply -f <mongodb-prometheus-sample.yaml>
Este comando crea dos secrets que contienen la autenticación de un nuevo usuario de MongoDB y la autenticación básica de HTTP para el endpoint de Prometheus. El comando crea ambos secrets en el espacio de nombres mongodb.
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 namespace prometheus-system.
Opcional: Habilita TLS en el punto final de Prometheus
Instale Cert-Manager
Para instalar cert-manager utilizando Helm, consulta la documentación de instalación de cert-manager.
Para crear un
Issuercert-manager, consulte la documentación de configuración de cert-managerPara crear un certificado, consulta la documentación de uso de cert-manager.
Habilitar TLS en el MongoDB CRD
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 posee 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 endpoint HTTPS (definido en /spec/endpoints/0/scheme). También configuraste spec/endpoints/0/tlsConfig/insecureSkipVerify en true, para que Prometheus no verifique los certificados TLS en el extremo de MongoDB.
Prometheus ahora debería poder raspar el objetivo de MongoDB mediante HTTPS.
mongodb-prometheus-sample.yaml
Cree el siguiente archivo mongodb-prometheus-sample.yaml para implementar un recurso de MongoDB en su clúster de Kubernetes, con un ServiceMonitor que indica a Prometheus cómo obtener datos de métricas de ella.
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 tu recurso MongoDB.
Recurso de 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 ...
ServiceMonitor
--- 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 del endpoint
--- apiVersion: v1 kind: Secret metadata: name: metrics-endpoint-creds namespace: mongodb type: Opaque stringData: password: 'Not-So-Secure!' username: prometheus-username ...