对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

Kubernetes Operator 快速入门

重要

本部分仅适用于单个 Kubernetes 集群部署。 对于多 Kubernetes 集群 MongoDB 部署,请参阅概述。

MongoDB Controllers for Kubernetes Operator 使用Kubernetes API和工具来管理Kubernetes集群中运行的MongoDB集群。 Kubernetes Operator 与Ops Manager协同工作。本教程演示如何在Kubernetes上部署Ops Manager ,然后使用Kubernetes Operator部署并连接到您的第一个MongoDB副本集。您可以使用 Kind 来快速设立集群。要学习;了解更多信息,请参阅种类。

使用本教程评估Kubernetes Operator。由于 Kind 在本地计算机上运行单个节点,因此您在此处创建的部署无法在节点丢失的情况下继续运行,并且大小不适合生产流量。完成后,请参阅“后续步骤”,学习;了解如何迁移到生产部署。

本教程要求:

如果将 Kind 与Docker Desktop 一起使用,请在Docker Desktop资源设置中至少分配 8 GB内存和 4 CPU。 Ops Manager需要至少 5 GB的内存用于应用程序,以及用于应用程序数据库和Kubernetes Operator 的额外资源。

1
helm repo add mongodb https://mongodb.github.io/helm-charts
2

要安装Kubernetes Operator with Helm,请参阅存储库中的说明。

例子

以下命令使用可选的 --create-namespace 选项在 mongodb命名空间中安装MongoDB Controllers for Kubernetes Operator。默认下, Kubernetes Operator 使用 default命名空间。

helm install kubernetes-operator mongodb/mongodb-kubernetes --namespace mongodb --create-namespace
3

如果您尚未执行,请运行以下命令,执行所创建命名空间的所有 kubectl 命令:

kubectl config set-context $(kubectl config current-context) --namespace=mongodb
4

创建一个 秘密,其中包含初始 MongoDB Ops Manager 管理员用户凭证。Kubernetes 操作符在部署 MongoDB Ops Manager 资源时使用此秘密配置第一个管理员用户。

运行以下命令,将占位符值替换为您偏好的凭证:

kubectl create secret generic ops-manager-admin-secret \
--from-literal=Username="<admin-email>" \
--from-literal=Password="<admin-password>" \
--from-literal=FirstName="<first-name>" \
--from-literal=LastName="<last-name>"

注意

安全存储这些凭证。部署后,您需要这些凭证才能登录 Ops Manager 用户界面。

5
  1. 复制以下 YAML文件并将其另存为 ops-manager.yaml:

    apiVersion: mongodb.com/v1
    kind: MongoDBOpsManager
    metadata:
    name: ops-manager
    namespace: mongodb
    spec:
    replicas: 1
    version: "8.0.0"
    adminCredentials: ops-manager-admin-secret
    externalConnectivity:
    type: NodePort
    configuration:
    mms.ignoreInitialUiSetup: "true"
    automation.versions.source: "mongodb"
    mms.fromEmailAddr: admin@example.com
    mms.replyToEmailAddr: admin@example.com
    mms.adminEmailAddr: admin@example.com
    mms.mail.transport: smtp
    mms.mail.hostname: localhost
    mms.mail.port: "25"
    backup:
    enabled: false
    applicationDatabase:
    topology: SingleCluster
    members: 3
    version: "8.0.0"

    要了解更多信息,请参阅 MongoDB Ops Manager 资源规范。

  2. 运行以下命令:

    kubectl apply -f ops-manager.yaml
6

Kubernetes 操作符首先部署应用程序数据库副本集,然后启动 MongoDB Ops Manager 应用程序。此过程可能需要几分钟。

运行以下命令以追踪资源状态:

kubectl get om -o yaml -w

直到输出显示以下阶段:

status:
applicationDatabase:
phase: Running
opsManager:
phase: Running

当两个组件都到达 Running 时,请检索 MongoDB Ops Manager URL:

kubectl get om ops-manager -o jsonpath='{.status.opsManager.url}'

记下此 URL。在后续步骤中,您将在 ConfigMap 中用到它。

7

您可以使用MongoDB Ops Manager用户界面生成ConfigMap和Secret,也可以手动创建它们。

首先,将 Ops Manager 服务端口转发到本地计算机,以便您可以在浏览器中访问用户界面:

kubectl port-forward svc/ops-manager-svc-ext 8080:8080

然后,在浏览器中打开 http://localhost:8080,并使用在管理员秘密中创建的凭证登录。

要使用 MongoDB Ops Manager 用户界面:

  1. 点击 Create New API Keys 或 Use Existing API Keys。

  2. 完成表格。如需了解更多信息,请参阅“创建 Kubernetes Operator 的凭证”。

  3. 单击 Generate Key and YAML(连接)。

或者,您可以按照以下步骤手动创建 ConfigMap 和 Secret。

8

如果您从 MongoDB Ops Manager 用户界面生成了 ConfigMap,请复制并保存生成的 config-map.yaml 文件。否则,创建并保存以下文件。将 data.baseUrl 设置为 status.opsManager.url 中的 MongoDB Ops Manager 实例的 URL。

示例:

apiVersion: v1
kind: ConfigMap
metadata:
name: my-project
namespace: mongodb
data:
baseUrl: http://ops-manager-svc.mongodb.svc.cluster.local:8080
projectName: my-project
orgId: <your-org-id>

将 <your-org-id> 替换为您的 MongoDB Ops Manager 组织 ID。您可以在 MongoDB Ops Manager 用户界面 URL 中找到此值:http://<ops-manager-url>/v2#/org/<orgId>/projects。

要了解更多信息,请参阅参数说明。

9

如果从Ops Manager用户界面生成密钥,请复制并保存生成的 secret.yaml文件。否则,请创建一个包含Ops Manager组织的API密钥的密钥。

示例:

apiVersion: v1
kind: Secret
metadata:
name: organization-secret
namespace: mongodb
stringData:
publicKey: <public_key>
privateKey: <private_key>

要创建编程API密钥,请参阅为Kubernetes Operator 创建档案。

10

运行以下命令:

kubectl apply -f secret.yaml -f config-map.yaml
11
  1. 复制并保存以下 YAML 文件:

    apiVersion: mongodb.com/v1
    kind: MongoDB
    metadata:
    name: demo-mongodb-cluster-1
    namespace: mongodb
    spec:
    members: 3
    version: 8.0.0
    type: ReplicaSet
    security:
    authentication:
    enabled: true
    modes: ["SCRAM"]
    opsManager:
    configMapRef:
    name: my-project
    credentials: organization-secret
    persistent: true
    podSpec:
    podTemplate:
    spec:
    containers:
    - name: mongodb-enterprise-database
    resources:
    limits:
    cpu: 2
    memory: 1.5G
    requests:
    cpu: 1
    memory: 1G
    persistence:
    single:
    storage: 10Gi
  2. 运行以下命令:

    kubectl apply -f <replica-set-conf>.yaml
12

为MongoDB 数据库用户选择一个密码并将其存储在密钥中。此密码可以是您选择的任何值。在下一步创建数据库用户时,将引用此密钥。

您可以将密码存储为明文(使用 stringData)或为 Base64 编码值(使用 data)。

对于明文密码,请创建并保存以下 YAML 文件:

apiVersion: v1
kind: Secret
metadata:
name: mms-user-1-password
# corresponds to user.spec.passwordSecretKeyRef.name
type: Opaque
stringData:
password: <my-plain-text-password>
# corresponds to user.spec.passwordSecretKeyRef.key

对于 Base64 编码密码,创建并保存以下 YAML 文件:

apiVersion: v1
kind: Secret
metadata:
name: mms-user-1-password
# corresponds to user.spec.passwordSecretKeyRef.name
type: Opaque
data:
password: <base-64-encoded-password>
# corresponds to user.spec.passwordSecretKeyRef.key

将占位符替换为您选择的密码。要了解更多信息,请参阅使用 SCRAM 身份验证管理数据库用户。

13
  1. 复制并保存以下 MongoDB 用户资源规范 文件:

    apiVersion: mongodb.com/v1
    kind: MongoDBUser
    metadata:
    name: mms-scram-user-1
    spec:
    passwordSecretKeyRef:
    name: mms-user-1-password
    # Match to metadata.name of the User Secret
    key: password
    username: "mms-scram-user-1"
    db: "admin" #
    mongodbResourceRef:
    name: "demo-mongodb-cluster-1"
    # Match to MongoDB resource using authentication
    roles:
    - db: "admin"
    name: "clusterAdmin"
    - db: "admin"
    name: "userAdminAnyDatabase"
    - db: "admin"
    name: "readWrite"
  2. 运行以下命令:

    kubectl apply -f <database-user-conf>.yaml
14

您可以在 Cloud Manager 或 Ops Manager 中查看新创建的用户:

  1. 从项目的 Deployment 视图中,点击 Security 选项卡。

  2. 单击 MongoDB Users 嵌套标签页。

15

在 Ops Manager 应用程序中执行以下步骤:

  1. 单击左侧导航栏中的 Deployment。

  2. 单击要连接到的部署的 。

  3. 单击 Connect to this instance(连接)。

  4. 在终端中运行连接命令,以连接到部署。

您创建的部署在单个 Kind节点上运行,并使用默认资源设置。要从此评估部署迁移到生产部署,请执行以下操作:

  1. 规划生产部署以选择架构、确认版本兼容性并设置 Kubernetes 操作符部署范围。

  2. 安装 Kubernetes 操作符 在生产 Kubernetes 集群上,该集群具有多个节点和支持卷扩展的 storageClass。

  3. 应用存储、持久性、可用区和资源限制的 生产最佳实践。

  4. 通过 TLS、身份验证和静态加密来保护部署。

  5. 如果必须在整个 Kubernetes 集群中存活,请在 多个 Kubernetes 集群上部署。