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

Kubernetes Operator 快速入门

重要

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

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

本教程要求:

如果将 Kind 与 Docker Desktop 一起使用,请在 Docker Desktop 资源设置中分配至少 8 GB 内存4 个 CPU。Ops Manager 需要至少 5 GB 内存才能运行应用程序,并为应用程序数据库和 Kubernetes 操作符分配额外资源。

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

创建包含初始 Ops Manager 管理员用户凭证的 秘密。Kubernetes Operator 使用此秘密在部署 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 KeysUse 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,请复制并保存生成的 secret.yaml 文件。否则,创建一个包含 MongoDB Ops Manager 组织的 API 密钥的 secret 。

示例:

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

要创建程序化 API 密钥,请参阅为 Kubernetes 操作符创建凭证。

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. 在终端中运行连接命令,以连接到部署。