Docs 菜单
Docs 主页
/
MongoDB Enterprise Kubernetes Operator
/ /

部署用于 Prometheus 的资源

在此页面上

  • 快速入门
  • 创建 MongoDB 资源
  • 可选:在 Prometheus 端点上启用 TLS
  • mongodb-prometheus-sample.yaml
  • 示例

您可以使用 mongodb-prometheus-sample.yaml文件在Kubernetes集群中部署MongoDB资源,并使用 ServiceMonitor 指示 Prometheus 如何使用其中的指标数据。

该示例指定具有一个用户的简单MongoDB资源,以及具有基本HTTP身份验证且无spec.prometheus TLS 的 属性。该示例可让您测试MongoDB发送到 Prometheus 的指标。

注意

我们使用0.54 版本的 Prometheus Operator 测试了此设置。

  • Kubernetes 1.16 +

  • Helm 3+

您可以使用 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

运行以下命令以安装 Kubernetes Operator,并创建一个命名空间以包含 Kubernetes Operator 和资源:

helm install enterprise-operator mongodb/enterprise-operator \
--namespace <mongodb> --create-namespace

要了解更多信息,请参阅安装 MongoDB Enterprise Kubernetes Operator

可以使用 mongodb-prometheus-sample.yaml 文件在 Kubernetes 集群中部署 MongoDB 资源,并使用 ServiceMonitor 指示 Prometheus 如何使用其中的指标数据。

您可以使用以下命令直接应用该样本:

kubectl apply -f <mongodb-prometheus-sample.yaml>

此命令创建两个 密钥 包含新 MongoDB 用户的身份验证和 Prometheus 端点的基本 HTTP 身份验证。该命令会创建两个 密钥mongodb 命名空间中。

此命令还会创建一个 ServiceMonitor 将 Prometheus 配置为使用此资源的指标。此命令会在prometheus-system命名空间中创建ServiceMonitor

  1. 要使用 Helm 安装 cert-manager,请参阅cert-manager 安装文档

  2. 要创建证书管理器Issuer ,请参阅 证书管理器配置文档

  3. 要创建证书,请参阅 cert-manager 使用文档

重要

不要在生产环境中使用该配置!安全专家应向您建议如何配置 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,请运行以下命令以再次修补资源:

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 文件以在 Kubernetes 集群中部署 MongoDB 资源,并使用 ServiceMonitor 向 Prometheus 指示如何使用其中的指标数据。

这份样本文件指定具有一个用户的简单 MongoDB 资源以及具有基本 HTTP 身份验证且无 TLSspec.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 设置

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

后退

分片集群