从Kubernetes Operator 1.15 开始,独立运行运行部署已被弃用,并在下一个主要版本中失去支持。将独立运行的部署迁移到单成员副本集。单节点副本集提供与独立运行实例相同的单节点拓扑结构,并支持稍后添加节点,而无需再次迁移。
关于此任务
此迁移不是就地升级。您可以部署一个新的单成员副本集,使用 mongodump 和 mongorestore 复制数据,然后将应用程序定向到副本集。
mongodump和mongorestore不会复制数据库用户。恢复后,将用户重新创建为MongoDBUser资源。独立运行部署会保持不变,直到您将其删除。如果迁移失败,您可以将应用程序定向回独立运行部署。
开始之前
部署Kubernetes Operator 管理的独立运行资源。要学习;了解更多信息,请参阅部署独立MongoDB实例。
配置
kubectl以访问权限托管独立运行部署的Kubernetes集群。记下独立运行资源中
spec.version的值。单节点副本集必须运行相同的MongoDB版本。
步骤
为新项目创建 ConfigMap。
一个Ops Manager项目包含一个部署,因此您无法重复使用独立运行部署使用的项目。复制独立运行部署引用的 ConfigMap,保留 baseUrl 和 orgId 值,并设立新的唯一 projectName。将 ConfigMap 应用到与独立运行部署相同的Kubernetes命名空间。
要学习;了解更多信息,请参阅使用 ConfigMap 为每个MongoDB部署创建一个项目。
部署单成员副本集。
创建 MongoDB资源,将 spec.type设立为 ReplicaSet,并将 spec.members设立为 1。将 spec.version 设置为独立运行部署运行的MongoDB版本,并引用您在上一步中创建的 ConfigMap。您可以重复使用独立运行部署使用的凭证密钥。从独立运行资源中复制任何其他spec 设置。
apiVersion: mongodb.com/v1kind: MongoDBmetadata: name: <my-replica-set> namespace: <my-namespace>spec: members: 1 # Must match the MongoDB version of the standalone deployment version: "<mongodb-version>" opsManager: configMapRef: # Must match metadata.name in the new project ConfigMap file name: <configMap.metadata.name> # Can match the credentials Secret that the standalone deployment uses credentials: <mycredentials> type: ReplicaSet persistent: true应用资源:
kubectl apply -f <replica-set-yaml> --namespace <my-namespace>要检查 MongoDB 资源的状态,请使用以下命令:
kubectl get mdb <resource-name> -o yaml -w设置 -w (观看) 标志后,当配置更改时,输出将立即刷新,直到状态阶段达到 Running 状态。要了解有关资源部署状态的详情,请参阅 Kubernetes Operator 故障排除。
部署工具 Pod。
运行数据库Pod 的容器映像不包含MongoDB Database Tools。要运行mongodump 和 mongorestore,部署基于 mongodb-enterprise-server 映像的专用工具 Pod。将映像标签设置为与独立运行部署运行相同的MongoDB版本。
apiVersion: v1kind: Podmetadata: name: mongodb-tools namespace: <my-namespace>spec: containers: - name: mongodb-tools # Use the standalone's MongoDB version without the -ent # suffix, for example 8.0.4 image: quay.io/mongodb/mongodb-enterprise-server:<mongodb-version>-ubi9 command: ["sleep", "infinity"]应用 Pod:
kubectl apply -f <tools-pod-yaml> --namespace <my-namespace>转储独立运行的数据。
从工具 Pod 针对独立运行部署的服务运行 mongodump:
kubectl exec mongodb-tools --namespace <my-namespace> -- \ mongodump \ --host "<my-standalone>-svc.<my-namespace>.svc.cluster.local:27017" \ --out /tmp/dump如果独立运行部署需要身份验证,请以具有 backup 和 readAnyDatabase 角色的用户身份进行连接。如果部署需要 TLS,请添加相应的 mongodump 连接选项。要学习;了解更多信息,请参阅 mongodump。
将数据恢复到副本集。
从工具 Pod 中针对副本集的服务运行 mongorestore:
kubectl exec mongodb-tools --namespace <my-namespace> -- \ mongorestore \ --host "<my-replica-set>-svc.<my-namespace>.svc.cluster.local:27017" \ --nsExclude="admin.*" \ --nsExclude="config.*" \ /tmp/dump--nsExclude 选项会将 admin 和 config 数据库排除在恢复之外。完整的 mongodump 输出包括 admin.system.users 和 admin.system.version。恢复它们会将数据库用户和身份验证模式写入自动化配置之外的副本集,因此Ops Manager中项目的用户列表将不再与数据库匹配。
如果副本集需要身份验证,则副本集还没有用户,因为您将在后续步骤中重新创建数据库用户。在具有 restore、readWriteAnyDatabase 和dbAdminAnyDatabase 角色的新项目中创建临时MongoDBUser资源,并以该用户身份进行连接。要学习;了解有关创建用户的更多信息,请参阅管理数据库用户。
如果副本集需要 TLS,请添加相应的 mongorestore 连接选项。要学习;了解更多信息,请参阅 mongorestore。
删除独立运行部署。
验证迁移后,删除独立运行的MongoDB资源。 Kubernetes Operator 不会删除独立运行部署使用的持久卷声明,因此请手动删除该声明。要学习;了解更多信息,请参阅删除 MongoDB资源。
Rollback
独立运行部署会保持不变,直到您将其删除。要回滚迁移,请将应用程序定向回独立运行部署。独立运行部署不包含副本集在切换后收到的写入。