重要
不建议将MongoDB Ops Manager配置为在Kubernetes中使用本地模式。 考虑将 配置为MongoDB Ops Manager以使用远程模式。
在默认配置中, MongoDB Agent MongoDB , MongoDB
如果Kubernetes集群中的节点无法访问权限互联网,您可以将MongoDB Ops Manager配置为使用Kubernetes Operator 在本地模式下运行。备份守护程序和托管MongoDB资源仅从您为MongoDB Ops Manager StatefulSet 创建的 持久卷下载安装存档。
此过程涵盖将安装存档上传到 Ops Manager。
如果MongoDB Ops Manager无法访问权限互联网,请参阅配置部署以限制互联网访问。
关于兼容性,请参阅MongoDB控制器与Kubernetes操作符的兼容性。要查看每个映像的所有可用版本,请参阅容器映像。
先决条件
部署MongoDB Ops Manager资源。以下过程向您展示如何更新MongoDB Ops Manager Kubernetes 对象 以启用本地模式。
为了避免在启用本地模式时出现停机,请确保在 Ops Manager 资源定义中将
spec.replicas设置为大于1的值。如果您更新了 Ops Manager 资源定义以使 Ops Manager 高度可用,请在开始本教程之前应用更改:
kubectl apply -f <opsmgr-resource>.yaml -n <metadata.namespace>
步骤
将 kubectl 配置为默认命名空间。
如果您尚未执行,请运行以下命令,执行所创建命名空间的所有 kubectl 命令。
注意
MongoDB Ops Manager如果要在多 Kubernetes 集群 部署中部署MongoDB 资源:
将
context设置为操作符集群的名称,例如:kubectl config set context "$MDB_CENTRAL_CLUSTER_FULL_NAME"。将
--namespace设置为您用于多 Kubernetes 集群 MongoDB 部署的相同范围,例如:kubectl config --namespace "mongodb"。
kubectl config set-context $(kubectl config current-context) --namespace=<metadata.namespace>
删除管理Ops Manager Pod 的StatefulSet。
在本教程中,您将更新用于管理 Kubernetes 集群中 Ops Manager Pod 的 StatefulSet。
您必须先删除 Ops Manager StatefulSet,这样 Kubernetes 才能应用本地模式所需的更新。
找到 Ops Manager StatefulSet 的名称:
kubectl get statefulsets 响应中与
metadata.name匹配的条目您的 Ops Manager StatefulSet 是响应中与您的 Ops Manager 资源定义中的
metadata.name匹配的条目。kubectl get statefulsets -n mongodb NAME READY AGE ops-manager-localmode 2/2 2m31s ops-manager-localmode-db 3/3 4m46s 删除 Ops Manager StatefulSet:
警告
删除 Ops Manager StatefulSet 时,确保包含
--cascade=false标志。 如果不包含此标志,Kubernetes 还会删除 Ops Manager Pod。kubectl delete statefulset --cascade=false <ops-manager-statefulset>
复制此 Ops Manager 资源的字段。
将此示例的第 9-31 行复制到:
使用 中的 配置设置MongoDB Ops Manager
automation.versions.source: localspec.configuration来启用本地模式。为MongoDB Ops Manager StatefulSet 定义持久卷以存储MongoDB安装存档。在使用Kubernetes Operator 创建的MongoDB 数据库资源容器中运行的MongoDB助手会从MongoDB Ops Manager而不是从 Internet下载安装存档。
1 apiVersion: mongodb.com/v1 2 kind: MongoDBOpsManager 3 metadata: 4 name: ops-manager-localmode 5 spec: 6 replicas: 2 7 version: "8.0.0" 8 adminCredentials: ops-manager-admin-secret 9 configuration: 10 # this enables local mode in Ops Manager 11 automation.versions.source: local 12 statefulSet: 13 spec: 14 # the Persistent Volume Claim will be created for each Ops Manager Pod 15 volumeClaimTemplates: 16 - metadata: 17 name: mongodb-versions 18 spec: 19 accessModes: [ "ReadWriteOnce" ] 20 resources: 21 requests: 22 storage: "20Gi" 23 template: 24 spec: 25 containers: 26 - name: mongodb-ops-manager 27 volumeMounts: 28 - name: mongodb-versions 29 # this is the directory in each Pod where all MongoDB 30 # archives must be put 31 mountPath: /mongodb-ops-manager/mongodb-releases 32 backup: 33 enabled: false 34 applicationDatabase: 35 members: 3
将复制的示例部分粘贴到现有的 Ops Manager 资源中。
打开首选文本编辑器,将对象规范粘贴到资源文件中的相应位置。
将更改应用于 Ops Manager 部署。
对 Ops Manager 资源定义的文件名调用以下
kubectl命令:kubectl apply -f <opsmgr-resource>.yaml 当您将更改应用于 Ops Manager 资源定义时,Kubernetes 会创建一个新的 Ops Manager StatefulSet。在继续下一步之前,请运行以下命令以确保 Ops Manager StatefulSet 存在:
kubectl get statefulsets 新的 Ops Manager StatefulSet 应显示 0 个节点已就绪:
kubectl get statefulsets -n mongodb NAME READY AGE ops-manager-localmode 0/2 2m31s ops-manager-localmode-db 3/3 4m46s
以滚动方式删除旧的 Ops Manager Pod。
列出 Kubernetes 集群中的 Ops Manager Pods:
kubectl get pods 删除一个 Ops Manager Pod:
kubectl delete pod <om-pod-0> Kubernetes 重新创建您删除的 Ops Manager Pod。继续获取新 Pod 的状态,直到其准备就绪:
kubectl get pods 当新 Pod 初始化时,输出类似于以下示例:
NAME READY STATUS RESTARTS AGE mongodb-kubernetes-operator-5648d4c86-k5brh 1/1 Running 0 5m24s ops-manager-localmode-0 0/1 Running 0 0m55s ops-manager-localmode-1 1/1 Running 0 5m45s ops-manager-localmode-db-0 1/1 Running 0 5m19s ops-manager-localmode-db-1 1/1 Running 0 4m54s ops-manager-localmode-db-2 1/1 Running 0 4m12s 当新 Pod 准备就绪时,输出类似于以下示例:
NAME READY STATUS RESTARTS AGE mongodb-kubernetes-operator-5648d4c86-k5brh 1/1 Running 0 5m24s ops-manager-localmode-0 1/1 Running 0 3m55s ops-manager-localmode-1 1/1 Running 0 5m45s ops-manager-localmode-db-0 1/1 Running 0 5m19s ops-manager-localmode-db-1 1/1 Running 0 4m54s ops-manager-localmode-db-2 1/1 Running 0 4m12s 重复步骤b和c ,直到删除所有 Ops Manager Pod 并确认所有新 Pod 均已准备就绪。
追踪你的 Ops Manager 实例的状态。
要检查 Ops Manager 资源的状态,请调用以下命令:
kubectl get om -o yaml -w
有关资源部署状态的信息,请参阅排除 Kubernetes 操作符故障。
Ops Manager 资源完成Pending阶段后,该命令将返回类似于以下内容的输出:
1 status: 2 applicationDatabase: 3 lastTransition: "2020-05-15T16:20:22Z" 4 members: 3 5 phase: Running 6 type: ReplicaSet 7 version: "8.0.0-ubi8" 8 backup: 9 phase: "" 10 opsManager: 11 lastTransition: "2020-05-15T16:20:26Z" 12 phase: Running 13 replicas: 1 14 url: http://ops-manager-localmode-svc.mongodb.svc.cluster.local:8080 15 version: "8.0.0"
复制 status.opsManager.url字段的值,该字段说明资源的连接 URL 。稍后在此过程中创建ConfigMap时,将使用此值。
将 MongoDB 安装存档下载到本地计算机。
下载的安装程序取决于部署 Operator 的环境:
注意
以下示例包含一个链接,允许您下载指定版本的 MongoDB Community Edition。 要下载任何其他版本的 MongoDB Community Edition,请访问MongoDB Community Edition下载中心。 要下载MongoDB Enterprise ,请访问MongoDB Enterprise下载中心。
下载您希望 Kubernetes Operator 部署的 MongoDB Server 版本的 RHEL 安装 tarball。 例如,要下载8.0.0版本:
curl -OL https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-8.0.0.tgz
将 MongoDB 存档复制到 Ops Manager 持久卷。
将您打算部署的每个 MongoDB 版本的 MongoDB 存档复制到 Ops Manager 持久卷。
您使用的命令取决于部署 Kubernetes 操作符的环境:
注意
如果部署了多个 Ops Managerreplica ,请仅将 MongoDBtarball 安装包复制到Replica 1 及更高版本。
要将 MongoDB 安装存档复制到 Ops Manager PersistentVolume,请执行以下操作:
将 MongoDB Server 安装 tarball 复制到 Ops Manager PersistentVolume。例如,要复制8.0.0版本:
kubectl cp mongodb-linux-x86_64-rhel80-8.0.0.tgz \ "ops-manager-localmode-0:/mongodb-ops-manager/mongodb-releases/mongodb-linux-x86_64-rhel80-8.0.0.tgz"
kubectl cp mongodb-linux-x86_64-rhel80-8.0.0.tgz \ "ops-manager-localmode-1:/mongodb-ops-manager/mongodb-releases/mongodb-linux-x86_64-rhel80-8.0.0.tgz"
要将MongoDB安装存档复制到MongoDB Ops Manager PersistentVolume,请将MongoDB Server安装 tarball 复制到MongoDB Ops Manager PersistentVolume。 示例,要复制8.0.0发布:
oc rsync "ops-manager-localmode-0:/mongodb-ops-manager/mongodb-releases/mongodb-linux-x86_64-rhel80-8.0.0.tgz" \ mongodb-linux-x86_64-rhel80-8.0.0.tgz
oc rsync "ops-manager-localmode-1:/mongodb-ops-manager/mongodb-releases/mongodb-linux-x86_64-rhel80-8.0.0.tgz" \ mongodb-linux-x86_64-rhel80-8.0.0.tgz
部署MongoDB database资源。
如果尚未完成,请完成以下先决条件:
在部署 Ops Manager 的同一命名空间中部署MongoDB 数据库资源。 确保您:
将资源的
spec.opsManager.configMapRef.name与 ConfigMap 的metadata.name进行匹配。将资源的
spec.credentials与您创建的包含 Ops Manager 编程 API 密钥对的密钥名称进行匹配。
助手在您使用 OperatorMongoDB Agent MongoDB创建的 数据库资源容器中运行。Kubernetes从MongoDB Ops Manager下载安装存档,而不是从 Internet 下载。