MongoDB(五)驾驭MongoDB:mongodb-kubernetes-operator指南
- 8/6/2023
本文介绍了如何在 Kubernetes 环境中使用 mongodb-kubernetes-operator 来管理 MongoDB 数据库。我们将详细讲解如何安装和配置 mongodb-kubernetes-operator,并演示如何创建和管理 MongoDB 副本集和分片集群。通过本文,您将掌握使用 mongodb-kubernetes-operator 轻松管理 MongoDB 数据库的技巧和最佳实践。
以下是主要步骤:
- 安装
mongodb-kubernetes-operator: 可以通过 Helm Chart 或 kubectl 命令安装mongodb-kubernetes-operator。 - 创建持久卷: 在创建副本集之前,需要创建用于存储 MongoDB 数据和日志的持久卷。这里以 NFS 为例,首先在 NFS 服务器中配置共享文件夹,然后创建用于数据和日志的持久卷 PV。
- 创建 MongoDB 副本集: 创建
MongoDBCommunity自定义资源对象来定义 MongoDB 集群的配置。这里配置了一个包含 3 个成员的副本集,使用 SCRAM 认证,并设置了密码和权限。还使用了附加的 MongoDB 配置,包括启用 Journal 压缩。 - 确认服务状态: 安装完成后,可以使用
kubectl get mongodbcommunity -n lomtom和kubectl get pod -n lomtom命令来确认服务状态。 - 验证副本集状态: 使用
kubectl exec -n lomtom -it mongodb-0 bash进入任意一个节点,并执行mongo命令进入 MongoDB 服务。通过验证root用户和执行rs.status()命令,确认副本集状态是否正常。
什么是 mongodb-kubernetes-operator?
mongodb-kubernetes-operator 🔗是一个在 Kubernetes 上部署和管理 MongoDB 集群的运算符。它是一个自定义的 Kubernetes 控制器,可以根据用户定义的规范来创建和管理 MongoDB 集群。使用 mongodb-kubernetes-operator,您可以轻松地在 Kubernetes 上部署 MongoDB,并实现自动化的备份、水平扩展和故障恢复。
安装 mongodb-kubernetes-operator
在开始之前,您需要在 Kubernetes 集群中安装 mongodb-kubernetes-operator。您可以通过 Helm Chart 或 kubectl 命令来安装。
Helm
安装 MongoDB Kubernetes Operator 是在 Kubernetes 集群上管理和运行 MongoDB 的一种方式。您可以通过以下步骤来安装 MongoDB Kubernetes Operator:
-
创建命名空间(Namespace):
首先,创建一个用于部署 MongoDB Kubernetes Operator 的命名空间(Namespace)。您可以使用以下命令创建一个名为
lomtom的命名空间:kubectl create namespace lomtom -
添加 Helm 仓库:
MongoDB Kubernetes Operator 可以通过 Helm 来安装。首先,您需要添加 MongoDB 的 Helm 仓库。使用以下命令添加 Helm 仓库:
helm repo add mongodb https://mongodb.github.io/helm-charts -
安装 MongoDB Kubernetes Operator:
使用 Helm 安装 MongoDB Kubernetes Operator。运行以下命令来安装 Operator:
helm install mongodb-operator mongodb/mongodb-kubernetes-operator --namespace lomtom-
这将在
mongodb命名空间中安装 MongoDB Kubernetes Operator。 -
如果你需要将 Operator 配置为监视另一个命名空间中的资源,请在安装命令中加入参数
--set operator.watchNamespace="default",实现监听另一个命名空间default下的资源,将default替换成*将监听所有命名空间下资源。
-
-
验证安装:
安装完成后,您可以使用以下命令验证 MongoDB Kubernetes Operator 是否成功部署:
kubectl get pods -n lomtom NAME READY STATUS RESTARTS AGE mongodb-kubernetes-operator-77df8c7cf-dn2dh 1/1 Running 0 74s如果所有相关的 Pod 都在运行状态,则表示 MongoDB Kubernetes Operator 安装成功。
安装完成后,您就可以使用 MongoDB Kubernetes Operator 来创建和管理 MongoDB 实例了。您可以通过 Kubernetes 的自定义资源(Custom Resources)来定义 MongoDB 实例的配置,然后 Operator 将负责根据您的定义来创建和管理 MongoDB 实例。
请注意,安装 MongoDB Kubernetes Operator 需要在 Kubernetes 集群上具有相应的权限,因此请确保您有足够的权限来进行安装和操作。
Kubectl
使用 kubectl 安装稍微比较复杂,详细自行翻看官方文档 🔗
创建 MongoDB 副本集
安装 mongodb-kubernetes-operator 后,您可以使用自定义资源定义(CRD)来创建 MongoDB 集群。通过 CRD,您可以指定 MongoDB 的版本、副本数、持久化存储等配置。
创建持久卷
在创建副本集前需要创建副本集所需的持久卷,默认副本集需要 3 个副本,每个副本需要一个 10G 的数据存储以及一个 2G 的日志存储。
所以一共需要 6 个持久卷,这里以 nfs 作为存储为例。
- 首先在 nfs 服务中配置共享文件夹
rm -rf /data/lomtom/mongo
mkdir -p /data/lomtom/mongo/logs/pv1
mkdir -p /data/lomtom/mongo/logs/pv2
mkdir -p /data/lomtom/mongo/logs/pv3
mkdir -p /data/lomtom/mongo/data/pv1
mkdir -p /data/lomtom/mongo/data/pv2
mkdir -p /data/lomtom/mongo/data/pv3
chmod 777 -R /data/lomtom/mongo/data
chmod 777 -R /data/lomtom/mongo/logs
echo "/data/lomtom/mongo/logs/pv1 *(rw,sync,no_root_squash)" >> /etc/exports
echo "/data/lomtom/mongo/logs/pv2 *(rw,sync,no_root_squash)" >> /etc/exports
echo "/data/lomtom/mongo/logs/pv3 *(rw,sync,no_root_squash)" >> /etc/exports
echo "/data/lomtom/mongo/data/pv1 *(rw,sync,no_root_squash)" >> /etc/exports
echo "/data/lomtom/mongo/data/pv2 *(rw,sync,no_root_squash)" >> /etc/exports
echo "/data/lomtom/mongo/data/pv3 *(rw,sync,no_root_squash)" >> /etc/exports
systemctl restart nfs
执行以上命令创建共享文件夹,并且向 nfs 服务注册信息。执行 exportfs -v 命令可以显示出所有的共享目录:
[root ~]# exportfs -v
/data/lomtom/mongo/logs/pv1
<world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
/data/lomtom/mongo/logs/pv2
<world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
/data/lomtom/mongo/logs/pv3
<world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
/data/lomtom/mongo/data/pv1
<world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
/data/lomtom/mongo/data/pv2
<world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
/data/lomtom/mongo/data/pv3
<world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
- 创建数据持久卷
首先创建pv-data.yaml文件,随后使用`kubectl apply -f pv-data.yaml 创建出相对应 PV。
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongo-data-pv1
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
nfs:
path: /data/lomtom/mongo/data/pv1
server: 10.168.12.196
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongo-data-pv2
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
nfs:
path: /data/lomtom/mongo/data/pv2
server: 10.168.12.196
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongo-data-pv3
spec:
capacity:
storage: 10Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
nfs:
path: /data/lomtom/mongo/data/pv3
server: 10.168.12.196
注意:配置里的 IP 地址改成实际 NFS 主机地址。
描述了三个 PersistentVolume(持久化存储卷),分别命名为 mongo-data-pv1、mongo-data-pv2 和 mongo-data-pv3。它们使用 NFS 协议挂载到服务器 10.168.12.196 上的不同路径 /data/lomtom/mongo/data/pv1、/data/lomtom/mongo/data/pv2 和 /data/lomtom/mongo/data/pv3。
每个 PersistentVolume 配置的参数如下:
capacity: 设置存储容量为 10GB。volumeMode: 设置存储卷的模式为 Filesystem(文件系统)。accessModes: 设置访问模式为 ReadWriteOnce(可读写一次)。这表示 PersistentVolume 可以被一个 Pod 以读写模式挂载。persistentVolumeReclaimPolicy: 设置持久化卷回收策略为 Retain(保留)。当 PersistentVolume 被释放时,其数据将被保留,而不会被删除。nfs: 设置 NFS 协议相关的参数,包括 NFS 服务器地址和挂载路径。
- 创建日志持久卷
首先创建pv-logs.yaml文件,随后使用`kubectl apply -f pv-logs.yaml 创建出相对应 PV。
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongo-logs-pv1
spec:
capacity:
storage: 2Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
nfs:
path: /data/lomtom/mongo/logs/pv1
server: 10.168.12.196
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongo-logs-pv2
spec:
capacity:
storage: 2Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
nfs:
path: /data/lomtom/mongo/logs/pv2
server: 10.168.12.196
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongo-logs-pv3
spec:
capacity:
storage: 2Gi
volumeMode: Filesystem
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
nfs:
path: /data/lomtom/mongo/logs/pv3
server: 10.168.12.196
注意:配置里的 IP 地址改成实际 NFS 主机地址。
- 确认 pv 成功创建
kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
mongo-data-pv1 10Gi RWO Retain Available 3s
mongo-data-pv2 10Gi RWO Retain Available 3s
mongo-data-pv3 10Gi RWO Retain Available 3s
mongo-logs-pv1 2Gi RWO Retain Available 7s
mongo-logs-pv2 2Gi RWO Retain Available 7s
mongo-logs-pv3 2Gi RWO Retain Available 7s
创建 MongoDB 副本集
- 创建
mongoDBCommunity.yaml文件,随后使用kubectl apply -f mongoDBCommunity.yaml -n lomtom创建出相对应 MongoDBCommunity。
---
apiVersion: mongodbcommunity.mongodb.com/v1
kind: MongoDBCommunity
metadata:
name: mongodb
spec:
members: 3
type: ReplicaSet
version: "4.2.7"
security:
authentication:
modes: ["SCRAM"]
users:
- name: root
db: admin
passwordSecretRef:
name: mongo-user-password
roles:
- name: clusterAdmin
db: admin
- name: userAdminAnyDatabase
db: admin
scramCredentialsSecretName: my-scram
additionalMongodConfig:
storage.wiredTiger.engineConfig.journalCompressor: zlib
---
apiVersion: v1
kind: Secret
metadata:
name: mongo-user-password
type: Opaque
stringData:
password: "123456"
MongoDB 副本集的配置文件。它包含两个资源对象:一个 MongoDBCommunity 自定义资源对象和一个 Secret 对象。
MongoDBCommunity 自定义资源对象描述了 MongoDB 集群的配置信息,包括以下参数:
metadata.name: 设置 MongoDBCommunity 对象的名称为mongodb,后续的副本集名称默认使用该名称。spec.members: 设置 MongoDB 集群中的成员数量为 3,表示该集群有 3 个节点。spec.type: 设置 MongoDB 集群的类型为 ReplicaSet,表示创建一个副本集。spec.version: 设置 MongoDB 的版本为 “4.2.7”。spec.security.authentication.modes: 设置 MongoDB 的认证模式为 “SCRAM”,表示使用 SCRAM 认证。spec.users: 设置 MongoDB 的用户配置,其中包含一个名为 “root” 的用户,具有 clusterAdmin 和 userAdminAnyDatabase 权限,这个用户将被用于管理数据库。spec.additionalMongodConfig: 设置 MongoDB 的附加配置,包括配置存储引擎的压缩算法为 “zlib”。
Secret 对象描述了 MongoDB 用户密码的密钥信息,其中包含一个名为 “mongo-user-password” 的 Secret,其中的密码是 “123456”。
- 确认服务状态
kubectl get mongodbcommunity -n lomtom
NAME PHASE VERSION
mongodb Running 4.2.7
kubectl get pod -n lomtom
NAME READY STATUS RESTARTS AGE
mongodb-0 2/2 Running 0 47m
mongodb-1 2/2 Running 0 46m
mongodb-2 2/2 Running 0 46m
mongodb-kubernetes-operator-77df8c7cf-dn2dh 1/1 Running 0 113m
确认副本集
- 可查看
mongodb-kubernetes-operator日志,如果出现副本集配置成功的日志,即副本集配置成功。
2023-08-06T05:32:48.678Z INFO controllers/replica_set_controller.go:342 Creating/Updating StatefulSet for Arbiters {"ReplicaSet": "lomtom/mongodb"}
2023-08-06T05:32:48.683Z DEBUG controllers/replica_set_controller.go:352 Ensuring StatefulSet is ready, with type: RollingUpdate {"ReplicaSet": "lomtom/mongodb"}
2023-08-06T05:32:48.683Z DEBUG controllers/replica_set_controller.go:218 Resetting StatefulSet UpdateStrategy to RollingUpdate {"ReplicaSet": "lomtom/mongodb"}
2023-08-06T05:32:48.698Z INFO controllers/replica_set_controller.go:272 Successfully finished reconciliation, MongoDB.Spec: {Members:3 Type:ReplicaSet Version:4.2.7 Arbiters:0 FeatureCompatibilityVersion: ReplicaSetHorizons:[] Security:{Authentication:{Modes:[SCRAM] IgnoreUnknownUsers:0xc0007fdabc} TLS:{Enabled:false Optional:false CertificateKeySecret:{Name:} CaCertificateSecret:nil CaConfigMap:nil} Roles:[]} Users:[{Name:root DB:admin PasswordSecretRef:{Name:mongo-user-password Key:} Roles:[{DB:admin Name:clusterAdmin} {DB:admin Name:userAdminAnyDatabase}] ScramCredentialsSecretName:my-scram ConnectionStringSecretName: AdditionalConnectionStringConfig:{Object:map[]}}] StatefulSetConfiguration:{SpecWrapper:{Spec:{Replicas:<nil> Selector:nil Template:{ObjectMeta:{Name: GenerateName: Namespace: SelfLink: UID: ResourceVersion: Generation:0 CreationTimestamp:0001-01-01 00:00:00 +0000 UTC DeletionTimestamp:<nil> DeletionGracePeriodSeconds:<nil> Labels:map[] Annotations:map[] OwnerReferences:[] Finalizers:[] ZZZ_DeprecatedClusterName: ManagedFields:[]} Spec:{Volumes:[] InitContainers:[] Containers:[] EphemeralContainers:[] RestartPolicy: TerminationGracePeriodSeconds:<nil> ActiveDeadlineSeconds:<nil> DNSPolicy: NodeSelector:map[] ServiceAccountName: DeprecatedServiceAccount: AutomountServiceAccountToken:<nil> NodeName: HostNetwork:false HostPID:false HostIPC:false ShareProcessNamespace:<nil> SecurityContext:nil ImagePullSecrets:[] Hostname: Subdomain: Affinity:nil SchedulerName: Tolerations:[] HostAliases:[] PriorityClassName: Priority:<nil> DNSConfig:nil ReadinessGates:[] RuntimeClassName:<nil> EnableServiceLinks:<nil> PreemptionPolicy:<nil> Overhead:map[] TopologySpreadConstraints:[] SetHostnameAsFQDN:<nil> OS:nil}} VolumeClaimTemplates:[] ServiceName: PodManagementPolicy: UpdateStrategy:{Type: RollingUpdate:nil} RevisionHistoryLimit:<nil> MinReadySeconds:0 PersistentVolumeClaimRetentionPolicy:nil}} MetadataWrapper:{Labels:map[] Annotations:map[]}} AgentConfiguration:{LogLevel: MaxLogFileDurationHours:0} AdditionalMongodConfig:{MapWrapper:{Object:map[storage:map[wiredTiger:map[engineConfig:map[journalCompressor:zlib]]]]}} AutomationConfigOverride:<nil> Prometheus:<nil> AdditionalConnectionStringConfig:{Object:map[]}}, MongoDB.Status: {MongoURI:mongodb://mongodb-0.mongodb-svc.lomtom.svc.cluster.local:27017,mongodb-1.mongodb-svc.lomtom.svc.cluster.local:27017,mongodb-2.mongodb-svc.lomtom.svc.cluster.local:27017/?replicaSet=mongodb Phase:Running Version:4.2.7 CurrentStatefulSetReplicas:3 CurrentMongoDBMembers:3 CurrentStatefulSetArbitersReplicas:0 CurrentMongoDBArbiters:0 Message:} {"ReplicaSet": "lomtom/mongodb"}
- 进入副本集验证副本集状态
使用kubectl exec -n lomtom -it mongodb-0 bash进入任意一个节点,执行mongo命令进入 mongo 服务。
-
验证
root用户,出现 1 代表验证成功mongodb:PRIMARY> use admin switched to db admin mongodb:PRIMARY> db.auth("root","123456"); 1可使用
kubectl get secret mongodb-admin-root -n lomtom -o json | jq -r '.data | with_entries(.value |= @bas e64d)'查看用用户名、密码以及连接信息。 -
验证副本集状态,执行
rs.status(),正常显示副本集信息即为成功mongodb:PRIMARY> rs.status() { "set" : "mongodb", "date" : ISODate("2023-08-06T05:58:58.141Z"), "myState" : 1, "term" : NumberLong(1), "syncingTo" : "", "syncSourceHost" : "", "syncSourceId" : -1, "heartbeatIntervalMillis" : NumberLong(2000), "majorityVoteCount" : 2, "writeMajorityCount" : 2, "optimes" : { "lastCommittedOpTime" : { "ts" : Timestamp(1691301535, 1), "t" : NumberLong(1) }, "lastCommittedWallTime" : ISODate("2023-08-06T05:58:55.408Z"), "readConcernMajorityOpTime" : { "ts" : Timestamp(1691301535, 1), "t" : NumberLong(1) }, "readConcernMajorityWallTime" : ISODate("2023-08-06T05:58:55.408Z"), "appliedOpTime" : { "ts" : Timestamp(1691301535, 1), "t" : NumberLong(1) }, "durableOpTime" : { "ts" : Timestamp(1691301535, 1), "t" : NumberLong(1) }, "lastAppliedWallTime" : ISODate("2023-08-06T05:58:55.408Z"), "lastDurableWallTime" : ISODate("2023-08-06T05:58:55.408Z") }, "lastStableRecoveryTimestamp" : Timestamp(1691301525, 1), "lastStableCheckpointTimestamp" : Timestamp(1691301525, 1), "electionCandidateMetrics" : { "lastElectionReason" : "electionTimeout", "lastElectionDate" : ISODate("2023-08-06T05:32:45.244Z"), "electionTerm" : NumberLong(1), "lastCommittedOpTimeAtElection" : { "ts" : Timestamp(0, 0), "t" : NumberLong(-1) }, "lastSeenOpTimeAtElection" : { "ts" : Timestamp(1691299953, 1), "t" : NumberLong(-1) }, "numVotesNeeded" : 2, "priorityAtElection" : 1, "electionTimeoutMillis" : NumberLong(10000), "numCatchUpOps" : NumberLong(0), "newTermStartDate" : ISODate("2023-08-06T05:32:45.292Z"), "wMajorityWriteAvailabilityDate" : ISODate("2023-08-06T05:32:46.807Z") }, "members" : [ { "_id" : 0, "name" : "mongodb-0.mongodb-svc.lomtom.svc.cluster.local:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "uptime" : 1657, "optime" : { "ts" : Timestamp(1691301535, 1), "t" : NumberLong(1) }, "optimeDate" : ISODate("2023-08-06T05:58:55Z"), "syncingTo" : "", "syncSourceHost" : "", "syncSourceId" : -1, "infoMessage" : "", "electionTime" : Timestamp(1691299965, 1), "electionDate" : ISODate("2023-08-06T05:32:45Z"), "configVersion" : 1, "self" : true, "lastHeartbeatMessage" : "" }, { "_id" : 1, "name" : "mongodb-1.mongodb-svc.lomtom.svc.cluster.local:27017", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 1584, "optime" : { "ts" : Timestamp(1691301535, 1), "t" : NumberLong(1) }, "optimeDurable" : { "ts" : Timestamp(1691301535, 1), "t" : NumberLong(1) }, "optimeDate" : ISODate("2023-08-06T05:58:55Z"), "optimeDurableDate" : ISODate("2023-08-06T05:58:55Z"), "lastHeartbeat" : ISODate("2023-08-06T05:58:56.162Z"), "lastHeartbeatRecv" : ISODate("2023-08-06T05:58:57.650Z"), "pingMs" : NumberLong(1), "lastHeartbeatMessage" : "", "syncingTo" : "mongodb-0.mongodb-svc.lomtom.svc.cluster.local:27017", "syncSourceHost" : "mongodb-0.mongodb-svc.lomtom.svc.cluster.local:27017", "syncSourceId" : 0, "infoMessage" : "", "configVersion" : 1 }, { "_id" : 2, "name" : "mongodb-2.mongodb-svc.lomtom.svc.cluster.local:27017", "health" : 1, "state" : 2, "stateStr" : "SECONDARY", "uptime" : 1584, "optime" : { "ts" : Timestamp(1691301535, 1), "t" : NumberLong(1) }, "optimeDurable" : { "ts" : Timestamp(1691301535, 1), "t" : NumberLong(1) }, "optimeDate" : ISODate("2023-08-06T05:58:55Z"), "optimeDurableDate" : ISODate("2023-08-06T05:58:55Z"), "lastHeartbeat" : ISODate("2023-08-06T05:58:56.188Z"), "lastHeartbeatRecv" : ISODate("2023-08-06T05:58:57.674Z"), "pingMs" : NumberLong(1), "lastHeartbeatMessage" : "", "syncingTo" : "mongodb-0.mongodb-svc.lomtom.svc.cluster.local:27017", "syncSourceHost" : "mongodb-0.mongodb-svc.lomtom.svc.cluster.local:27017", "syncSourceId" : 0, "infoMessage" : "", "configVersion" : 1 } ], "ok" : 1, "$clusterTime" : { "clusterTime" : Timestamp(1691301535, 1), "signature" : { "hash" : BinData(0,"G2wNvKrWx2v4X4Gq4aOY2DU/5ps="), "keyId" : NumberLong("7264078037400944643") } }, "operationTime" : Timestamp(1691301535, 1) }
总结
mongodb-kubernetes-operator 是一个非常有用的工具,可以帮助您在 Kubernetes 上轻松部署和管理 MongoDB 集群。它为 MongoDB 的部署和管理提供了自动化和简化的解决方案,让您可以更专注于应用开发和业务逻辑。
在使用 mongodb-kubernetes-operator 时,请遵循最佳实践,确保您的 MongoDB 集群在 Kubernetes 上稳定和高效运行。
祝您在 MongoDB 和 Kubernetes 的旅程中取得成功!
上篇文章 MongoDB(四)安装 Mongo 副本集介绍了怎么手动安装并配置副本集,使用 mongodb-kubernetes-operator 和手动安装 MongoDB 之间有几个主要区别。
- 自动化管理:mongodb-kubernetes-operator 是一个 Kubernetes 控制器,可以自动化地在 Kubernetes 集群中部署和管理 MongoDB。它简化了 MongoDB 的部署和维护过程,可以根据用户定义的规范自动创建和管理 MongoDB 集群,包括副本集和分片集群。而手动安装 MongoDB 需要用户自己配置和管理各个 MongoDB 实例,包括集群的搭建和节点的扩展等,相对来说更繁琐。
- 管理简化:mongodb-kubernetes-operator 提供了一组自定义资源对象(CRD),通过这些对象可以定义 MongoDB 实例的配置,例如版本、副本数、持久化存储等。使用这些 CRD,用户可以轻松地管理 MongoDB 集群的配置和扩展。而手动安装 MongoDB 需要用户了解 MongoDB 的各项配置参数,并进行手动设置。值得注意的是,一旦你删除了 mongodb-kubernetes-operator,那么副本集也将本删除
- 灵活性:手动安装 MongoDB 可以在任何环境中进行,而 mongodb-kubernetes-operator 是针对 Kubernetes 集群的。如果您的应用已经运行在 Kubernetes 上,那么使用 mongodb-kubernetes-operator 是非常方便的选择,因为它与 Kubernetes 的生态系统紧密集成。然而,如果您的应用不在 Kubernetes 上,或者您有其他特定的需求,手动安装可能会更适合。
- 高可用性:mongodb-kubernetes-operator 可以确保 MongoDB 集群的高可用性,它可以自动监测节点的状态,并在节点故障时进行自动故障转移。手动安装 MongoDB 也可以实现高可用性,但需要用户自己设置和管理复制集。
总的来说,如果您的应用已经在 Kubernetes 上运行,并且希望简化 MongoDB 的部署和管理过程,mongodb-kubernetes-operator 是一个很好的选择。它提供了自动化、简化和高可用性的特性。而如果您对 MongoDB 的配置和管理非常熟悉,并且有特定的需求,手动安装 MongoDB 也是可行的。选择使用哪种方式取决于您的具体情况和需求。
本文为原创内容,欢迎分享与引用,请保留作者与原文链接。
MongoDB(五)驾驭MongoDB:mongodb-kubernetes-operator指南
lomtom
原创发布