MongoDB(五)驾驭MongoDB:mongodb-kubernetes-operator指南

MongoDB(五)驾驭MongoDB:mongodb-kubernetes-operator指南

本文介绍了如何在Kubernetes环境中使用mongodb-kubernetes-operator来管理MongoDB数据库。我们将详细讲解如何安装和配置mongodb-kubernetes-operator,并演示如何创建和管理MongoDB副本集和分片集群。通过本文,您将掌握使用mongodb-kubernetes-operator轻松管理MongoDB数据库的技巧和最佳实践。

以下是主要步骤:

  1. 安装 mongodb-kubernetes-operator 可以通过 Helm Chart 或 kubectl 命令安装 mongodb-kubernetes-operator
  2. 创建持久卷: 在创建副本集之前,需要创建用于存储 MongoDB 数据和日志的持久卷。这里以 NFS 为例,首先在 NFS 服务器中配置共享文件夹,然后创建用于数据和日志的持久卷 PV。
  3. 创建 MongoDB 副本集: 创建 MongoDBCommunity 自定义资源对象来定义 MongoDB 集群的配置。这里配置了一个包含 3 个成员的副本集,使用 SCRAM 认证,并设置了密码和权限。还使用了附加的 MongoDB 配置,包括启用 Journal 压缩。
  4. 确认服务状态: 安装完成后,可以使用 kubectl get mongodbcommunity -n lomtomkubectl get pod -n lomtom 命令来确认服务状态。
  5. 验证副本集状态: 使用 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:

  1. 创建命名空间(Namespace):

    首先,创建一个用于部署 MongoDB Kubernetes Operator 的命名空间(Namespace)。您可以使用以下命令创建一个名为 lomtom 的命名空间:

    kubectl create namespace lomtom
    
  2. 添加 Helm 仓库:

    MongoDB Kubernetes Operator 可以通过 Helm 来安装。首先,您需要添加 MongoDB 的 Helm 仓库。使用以下命令添加 Helm 仓库:

    helm repo add mongodb https://mongodb.github.io/helm-charts
    
  3. 安装 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替换成*将监听所有命名空间下资源。

  4. 验证安装:

    安装完成后,您可以使用以下命令验证 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作为存储为例。

  1. 首先在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)
  1. 创建数据持久卷

首先创建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-pv1mongo-data-pv2mongo-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 服务器地址和挂载路径。
  1. 创建日志持久卷

首先创建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 主机地址。

  1. 确认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副本集

  1. 创建 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”。

  1. 确认服务状态
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

确认副本集

  1. 可查看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"}
  1. 进入副本集验证副本集状态

使用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之间有几个主要区别。

  1. 自动化管理:mongodb-kubernetes-operator是一个Kubernetes控制器,可以自动化地在Kubernetes集群中部署和管理MongoDB。它简化了MongoDB的部署和维护过程,可以根据用户定义的规范自动创建和管理MongoDB集群,包括副本集和分片集群。而手动安装MongoDB需要用户自己配置和管理各个MongoDB实例,包括集群的搭建和节点的扩展等,相对来说更繁琐。
  2. 管理简化:mongodb-kubernetes-operator提供了一组自定义资源对象(CRD),通过这些对象可以定义MongoDB实例的配置,例如版本、副本数、持久化存储等。使用这些CRD,用户可以轻松地管理MongoDB集群的配置和扩展。而手动安装MongoDB需要用户了解MongoDB的各项配置参数,并进行手动设置。值得注意的是,一旦你删除了mongodb-kubernetes-operator,那么副本集也将本删除
  3. 灵活性:手动安装MongoDB可以在任何环境中进行,而mongodb-kubernetes-operator是针对Kubernetes集群的。如果您的应用已经运行在Kubernetes上,那么使用mongodb-kubernetes-operator是非常方便的选择,因为它与Kubernetes的生态系统紧密集成。然而,如果您的应用不在Kubernetes上,或者您有其他特定的需求,手动安装可能会更适合。
  4. 高可用性:mongodb-kubernetes-operator可以确保MongoDB集群的高可用性,它可以自动监测节点的状态,并在节点故障时进行自动故障转移。手动安装MongoDB也可以实现高可用性,但需要用户自己设置和管理复制集。

总的来说,如果您的应用已经在Kubernetes上运行,并且希望简化MongoDB的部署和管理过程,mongodb-kubernetes-operator是一个很好的选择。它提供了自动化、简化和高可用性的特性。而如果您对MongoDB的配置和管理非常熟悉,并且有特定的需求,手动安装MongoDB也是可行的。选择使用哪种方式取决于您的具体情况和需求。

lomtom

标题:MongoDB(五)驾驭MongoDB:mongodb-kubernetes-operator指南

作者:lomtom

链接:https://lomtom.cn/dkrfybijtikrj