部署用于 Prometheus 的资源
您可以使用 mongodb-prometheus-sample.yaml文件在Kubernetes集群中部署MongoDB资源,并使用 ServiceMonitor 指示 Prometheus 如何使用其中的指标数据。
该示例指定具有一个用户的简单MongoDB资源,以及具有基本HTTP身份验证且无spec.prometheus
TLS 的 属性。该示例可让您测试MongoDB发送到 Prometheus 的指标。
注意
您不能将 Prometheus 与多 Kubernetes 集群部署一起使用。
快速入门
我们使用0.54 版本的 Prometheus Operator 测试了此设置。
先决条件
Kubernetes 1.16 +
Helm 3+
安装 Prometheus Operator
您可以使用 Helm 安装 Prometheus Operator。 要了解更多信息,请参阅 安装说明。
要使用 Helm 安装 Prometheus Operator,请运行以下命令:
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
安装 MongoDB Enterprise Kubernetes Operator
运行以下命令以安装 Kubernetes Operator,并创建一个命名空间以包含 Kubernetes Operator 和资源:
helm install enterprise-operator mongodb/enterprise-operator \ --namespace <mongodb> --create-namespace
要了解更多信息,请参阅安装 MongoDB Enterprise Kubernetes Operator。
创建 MongoDB 资源
可以使用 mongodb-prometheus-sample.yaml 文件在 Kubernetes 集群中部署 MongoDB 资源,并使用 ServiceMonitor 指示 Prometheus 如何使用其中的指标数据。
您可以使用以下命令直接应用该样本:
注意
kubectl apply -f <mongodb-prometheus-sample.yaml>
此命令创建两个 密钥 包含新 MongoDB 用户的身份验证和 Prometheus 端点的基本 HTTP 身份验证。该命令会创建两个 密钥 在mongodb
命名空间中。
此命令还会创建一个 ServiceMonitor 将 Prometheus 配置为使用此资源的指标。此命令会在prometheus-system
命名空间中创建ServiceMonitor
。
可选:在 Prometheus 端点上启用 TLS
安装 Cert-Manager
要使用 Helm 安装 cert-manager,请参阅cert-manager 安装文档 。
要创建证书管理器
Issuer
,请参阅 证书管理器配置文档要创建证书,请参阅 cert-manager 使用文档。
在 MongoDB CRD 上启用 TLS
重要
不要在生产环境中使用该配置!安全专家应向您建议如何配置 TLS。
要启用 TLS,您必须在 MongoDB 自定义资源的 spec.prometheus
部分中添加一个新条目。运行以下 patch 操作以添加所需的条目。
注意
tlsSecretKeyRef.name
指向一个 密钥 类型为kubernetes.io/tls
,持有MongoDB Server 证书 。
kubectl patch mdbc mongodb --type='json' \ -p='[{"op": "add", "path": "/spec/prometheus/tlsSecretKeyRef", "value":{"name": "prometheus-target-cert"}}]' \ --namespace mongodb
将显示以下响应:
mongodbenterprise.mongodbenterprise.mongodb.com/mongodb patched
在几分钟后,MongoDB 资源应恢复为“正在运行”阶段。现在,您必须配置 Prometheus ServiceMonitor 以指向 HTTPS 端点。
更新 ServiceMonitor
要更新 ServiceMonitor,请运行以下命令以再次修补资源:
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
将显示以下响应:
servicemonitor.monitoring.coreos.com/mongodb-sm patched
通过这些更改,新的 ServiceMonitor 指向 HTTPS 端点(在/spec/endpoints/0/scheme
中定义)。您还将spec/endpoints/0/tlsConfig/insecureSkipVerify
设置为true
,以便 Prometheus 不会验证 MongoDB 端的TLS证书。
现在,Prometheus 应该能够使用 HTTPS 抓取 MongoDB 目标。
mongodb-prometheus-sample.yaml
创建以下 mongodb-prometheus-sample.yaml
文件以在 Kubernetes 集群中部署 MongoDB 资源,并使用 ServiceMonitor 向 Prometheus 指示如何使用其中的指标数据。
这份样本文件指定具有一个用户的简单 MongoDB 资源以及具有基本 HTTP 身份验证且无 TLS 的 spec.prometheus
属性。该样本可让您测试 MongoDB 发送到 Prometheus 的指标。
要了解更多信息,请参阅 Prometheus 设置。
--- apiVersion: mongodb.com/v1 kind: MongoDB metadata: name: my-replica-set spec: members: 3 version: 6.0.6-ent 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 ...
示例
以下示例显示使用 Prometheus 监控 MongoDB 资源所需的资源定义。
用于 Prometheus 的 MongoDB 资源
要了解更多信息,请参阅 Prometheus 设置。
--- apiVersion: mongodb.com/v1 kind: MongoDB metadata: name: my-replica-set spec: members: 3 version: 6.0.6-ent 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 ...
端点凭证
--- apiVersion: v1 kind: Secret metadata: name: metrics-endpoint-creds namespace: mongodb type: Opaque stringData: password: 'Not-So-Secure!' username: prometheus-username ...