重要
本部分仅适用于单个 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 操作符的额外资源。
步骤
将MongoDB Helm Charts for Kubernetes存储库添加到 Helm。
helm repo add mongodb https://mongodb.github.io/helm-charts
为Kubernetes Operator 安装MongoDB控制器
要安装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
创建 MongoDB Ops Manager 管理员凭证秘密。
创建包含初始 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 用户界面。
部署 MongoDB Ops Manager 资源。
复制并保存以下 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 资源规范。
运行以下命令:
kubectl apply -f ops-manager.yaml
等待 MongoDB Ops Manager 资源达到运行状态。
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 中用到它。
配置 Ops Manager 的 Kubernetes 操作符。
您可以使用MongoDB Ops Manager用户界面生成ConfigMap和Secret,也可以手动创建它们。
首先,将 Ops Manager 服务端口转发到本地计算机,以便您可以在浏览器中访问用户界面:
kubectl port-forward svc/ops-manager-svc-ext 8080:8080
然后,在浏览器中打开 http://localhost:8080,并使用在管理员秘密中创建的凭证登录。
要使用 MongoDB Ops Manager 用户界面:
点击 Create New API Keys 或 Use Existing API Keys。
完成表格。如需了解更多信息,请参阅“创建 Kubernetes Operator 的凭证”。
单击 Generate Key and YAML(连接)。
或者,您可以按照以下步骤手动创建 ConfigMap 和 Secret。
创建并保存 ConfigMap。
如果您从 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。
要了解更多信息,请参阅参数说明。
创建并保存密钥。
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 操作符创建凭证”。
Deploy the MongoDB replica set resource.
复制并保存以下 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 运行以下命令:
kubectl apply -f <replica-set-conf>.yaml
使用数据库用户密码创建密钥。
为 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 身份验证管理数据库用户。
创建数据库用户。
复制并保存以下 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" 运行以下命令:
kubectl apply -f <database-user-conf>.yaml
连接到MongoDB副本集。
在 Ops Manager 应用程序中执行以下步骤:
单击左侧导航栏中的 Deployment。
单击要连接到的部署的 。
单击 Connect to this instance(连接)。
在终端中运行连接命令,以连接到部署。
后续步骤
您创建的部署在单个 Kind 节点上运行,并使用默认资源设置。要从该评估部署转移到生产部署:
规划生产部署以选择架构、确认版本兼容性并设置 Kubernetes 操作符部署范围。
安装 Kubernetes 操作符 在生产 Kubernetes 集群上,该集群具有多个节点和支持卷扩展的
storageClass。应用存储、持久性、可用区和资源限制的 生产最佳实践。
保护部署使用 TLS、身份验证和静态加密。
如果必须在整个 Kubernetes 集群中存活,请在 多个 Kubernetes 集群上部署。