重要
本部分仅适用于单个 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 的额外资源。
步骤
将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 管理员凭证秘密。
创建一个 秘密,其中包含初始 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 用户界面。
部署 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。
要了解更多信息,请参阅参数说明。
部署MongoDB副本集资源。
复制并保存以下 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。应用存储、持久性、可用区和资源限制的 生产最佳实践。
如果必须在整个 Kubernetes 集群中存活,请在 多个 Kubernetes 集群上部署。