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

Kubernetes Operator 快速入门

重要

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

The MongoDB Controllers for Kubernetes Operator uses the Kubernetes API and tools to manage MongoDB clusters running within your Kubernetes cluster. Kubernetes Operator works together with Ops Manager. This tutorial demonstrates how to deploy Ops Manager on Kubernetes and then deploy and connect to your first MongoDB replica set with Kubernetes Operator. You can use Kind to quickly set up a cluster. To learn more, see Kind.

Use this tutorial to evaluate Kubernetes Operator. Because Kind runs a single node on your local machine, the deployment that you create here can't survive node loss and isn't sized for production traffic. After you finish, see Next Steps to learn how to move to a production deployment.

本教程要求:

如果您将 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 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

If you generated the Secret from the Ops Manager UI, copy and save the generated secret.yaml file. Otherwise, create a secret that contains the API keys for your Ops Manager Organization.

示例:

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

您创建的部署在单个 Kind 节点上运行,并使用默认资源设置。要从该评估部署转移到生产部署:

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

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

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

  4. 保护部署使用 TLS、身份验证和静态加密。

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