简介

先看下生命周期图



kubedb支持的mongodb版本

[root@qd01-stop-k8s-master001 mysql]# kubectl get mongodbversions
NAME VERSION DB_IMAGE DEPRECATED AGE
3.4.17-v1 3.4.17 kubedb/mongo:3.4.17-v1 46h
3.4.22-v1 3.4.22 kubedb/mongo:3.4.22-v1 46h
3.6.13-v1 3.6.13 kubedb/mongo:3.6.13-v1 46h
3.6.18-percona 3.6.18 percona/percona-server-mongodb:3.6.18 46h
3.6.8-v1 3.6.8 kubedb/mongo:3.6.8-v1 46h
4.0.10-percona 4.0.10 percona/percona-server-mongodb:4.0.10 46h
4.0.11-v1 4.0.11 kubedb/mongo:4.0.11-v1 46h
4.0.3-v1 4.0.3 kubedb/mongo:4.0.3-v1 46h
4.0.5-v3 4.0.5 kubedb/mongo:4.0.5-v3 46h
4.1.13-v1 4.1.13 kubedb/mongo:4.1.13-v1 46h
4.1.4-v1 4.1.4 kubedb/mongo:4.1.4-v1 46h
4.1.7-v3 4.1.7 kubedb/mongo:4.1.7-v3 46h
4.2.3 4.2.3 kubedb/mongo:4.2.3 46h
4.2.7-percona 4.2.7 percona/percona-server-mongodb:4.2.7-7 46h

MongoDB ReplicaSet

mongodb复制集模式架构如下图

1、定义配置文件,创建secret

cat mongod.conf
net:
maxIncomingConnections: 10000 [root@qd01-stop-k8s-master001 Replication]# kubectl create secret generic -n op mg-configuration --from-file=./mongod.conf
secret/mg-configuration created [root@qd01-stop-k8s-master001 Replication]# kubectl get secret -n op
NAME TYPE DATA AGE
mg-configuration Opaque 1 20s

2、定义mongod-replicaset.yaml文件

apiVersion: kubedb.com/v1alpha2
kind: MongoDB
metadata:
name: mongodb-replicaset
namespace: op
spec:
version: "4.2.3"
replicas: 3
replicaSet:
name: rs0
configSecret:
name: mg-configuration
storage:
storageClassName: "rbd"
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi

3、执行安装并查看部署结果

[root@qd01-stop-k8s-master001 Replication]# kubectl apply -f mongod-replicaset.yaml
mongodb.kubedb.com/mongodb-replicaset created [root@qd01-stop-k8s-master001 Replication]# kubectl get po -n op
NAME READY STATUS RESTARTS AGE
mongodb-replicaset-0 2/2 Running 0 24m
mongodb-replicaset-1 2/2 Running 0 22m
mongodb-replicaset-2 2/2 Running 0 20m

4、验证集群

# 获取用户名和密码
[root@qd01-stop-k8s-master001 Replication]# kubectl get secrets -n demo mgo-replicaset-auth -o jsonpath='{.data.\username}' | base64 -d
root
[root@qd01-stop-k8s-master001 Replication]# kubectl get secrets -n demo mgo-replicaset-auth -o jsonpath='{.data.\password}' | base64 -d
123456 # 登录mongodb-replicaset-0查看集群状态,并测试读写
[root@qd01-stop-k8s-master001 Replication]# kubectl -n op exec -ti mongodb-replicaset-0 -- /bin/bash
root@mongodb-replicaset-0:/# mongo admin -uroot -p123456
MongoDB shell version v4.2.3
connecting to: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("cc1b6a09-f407-44d8-be3b-8b32db4a10b0") }
MongoDB server version: 4.2.3
Welcome to the MongoDB shell.
......
rs0:PRIMARY> # 查看当前PRIMARY节点
rs0:PRIMARY> rs.isMaster().primary
mongodb-replicaset-0.mongodb-replicaset-pods.op.svc.cluster.local:27017 # 读写数据
rs0:PRIMARY> use testdb
switched to db testdb
rs0:PRIMARY> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
rs0:PRIMARY> db.movie.insert({"name":"scofield"});
WriteResult({ "nInserted" : 1 })
rs0:PRIMARY> db.movie.find().pretty()
{ "_id" : ObjectId("604b17469d22a18817a5927e"), "name" : "scofield" }

MongoDB Sharding

mongodb分片模式架构如下图

shard :每个分片包含分片数据的子集。 从MongoDB 3.6开始,分片必须作为副本集部署。
mongos:mongos充当查询路由器,在客户端应用程序和分片群集之间提供接口。
config servers:配置服务器存储群集的元数据和配置设置。 从MongoDB 3.4开始,配置服务器必须部署为副本集(CSRS)。

1、编写mongodb-sharding.yaml

apiVersion: kubedb.com/v1alpha2
kind: MongoDB
metadata:
name: mongo-sharding
namespace: op
spec:
version: 4.2.3
shardTopology:
configServer:
replicas: 3
storage:
resources:
requests:
storage: 1Gi
storageClassName: rbd
mongos:
replicas: 2
shard:
replicas: 3
shards: 2
storage:
resources:
requests:
storage: 1Gi
storageClassName: rbd

2、执行部署,并查看部署状态

[root@qd01-stop-k8s-master001 Sharded]# kubectl apply -f mongodb-sharding.yaml
mongodb.kubedb.com/mongo-sharding created [root@qd01-stop-k8s-master001 Sharded]# kubectl get po -n op
NAME READY STATUS RESTARTS AGE
mongo-sharding-configsvr-0 1/1 Running 0 27m
mongo-sharding-configsvr-1 1/1 Running 0 12m
mongo-sharding-configsvr-2 1/1 Running 0 9m54s
mongo-sharding-mongos-0 1/1 Running 0 7m27s
mongo-sharding-mongos-1 1/1 Running 0 4m23s
mongo-sharding-shard0-0 1/1 Running 0 27m
mongo-sharding-shard0-1 1/1 Running 0 25m
mongo-sharding-shard0-2 1/1 Running 0 24m
mongo-sharding-shard1-0 1/1 Running 0 27m
mongo-sharding-shard1-1 1/1 Running 0 25m
mongo-sharding-shard1-2 1/1 Running 0 22m

和复制集相比,分片集需要更多的资源。以保证整个集群的健壮性,而且能后提供更大容量的存储空间。

3、验证集群状态及读写

# 获取账号密码
kubectl get secrets -n demo mongo-sh-auth -o jsonpath='{.data.\username}' | base64 -d
root
kubectl get secrets -n demo mongo-sh-auth -o jsonpath='{.data.\password}' | base64 -d
123456 # 连接mongo
root@mongo-sharding-mongos-0:/# mongo admin -u root -p
MongoDB shell version v4.2.3
Enter password:
connecting to: mongodb://127.0.0.1:27017/admin?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("948eadef-87b6-4ab2-ba5a-c8f4e23689a7") }
MongoDB server version: 4.2.3
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
http://docs.mongodb.org/
Questions? Try the support group
http://groups.google.com/group/mongodb-user
Server has startup warnings:
2021-03-12T08:10:48.173+0000 I CONTROL [main] ** WARNING: You are running this process as the root user, which is not recommended.
2021-03-12T08:10:48.173+0000 I CONTROL [main]
mongos> # 查看分片集群状态
mongos> sh.status()
--- Sharding Status ---
sharding version: {
"_id" : 1,
"minCompatibleVersion" : 5,
"currentVersion" : 6,
"clusterId" : ObjectId("604b201f7fb058e04bb03ef0")
}
shards:
{ "_id" : "shard0", "host" : "shard0/mongo-sharding-shard0-0.mongo-sharding-shard0-pods.op.svc.cluster.local:27017,mongo-sharding-shard0-1.mongo-sharding-shard0-pods.op.svc.cluster.local:27017,mongo-sharding-shard0-2.mongo-sharding-shard0-pods.op.svc.cluster.local:27017", "state" : 1 }
{ "_id" : "shard1", "host" : "shard1/mongo-sharding-shard1-0.mongo-sharding-shard1-pods.op.svc.cluster.local:27017,mongo-sharding-shard1-1.mongo-sharding-shard1-pods.op.svc.cluster.local:27017,mongo-sharding-shard1-2.mongo-sharding-shard1-pods.op.svc.cluster.local:27017", "state" : 1 }
active mongoses:
"4.2.3" : 2
autosplit:
Currently enabled: yes
balancer:
Currently enabled: yes
Currently running: no
Failed balancer rounds in last 5 attempts: 0
Migration Results for the last 24 hours:
No recent migrations
databases:
{ "_id" : "config", "primary" : "config", "partitioned" : true }
config.system.sessions
shard key: { "_id" : 1 }
unique: false
balancing: true
chunks:
shard0 1
{ "_id" : { "$minKey" : 1 } } -->> { "_id" : { "$maxKey" : 1 } } on : shard0 Timestamp(1, 0) #创建分片
mongos> sh.enableSharding("test");
{
"ok" : 1,
"operationTime" : Timestamp(1615538870, 3),
"$clusterTime" : {
"clusterTime" : Timestamp(1615538870, 3),
"signature" : {
"hash" : BinData(0,"CTnuwtgOIn+ke0qqarLQIi+VXz8="),
"keyId" : NumberLong("6938674968410456068")
}
}
}
# 创建集合
mongos> sh.shardCollection("test.testcoll", {"myfield": 1});
{
"collectionsharded" : "test.testcoll",
"collectionUUID" : UUID("313cacbe-014c-4e0a-9112-427de2351bdd"),
"ok" : 1,
"operationTime" : Timestamp(1615539067, 9),
"$clusterTime" : {
"clusterTime" : Timestamp(1615539067, 9),
"signature" : {
"hash" : BinData(0,"1RQN94R6yHvUa0SqBHkiV2hUXNM="),
"keyId" : NumberLong("6938674968410456068")
}
}
}
# 写入数据
mongos> db.testcoll.insert({"myfield": "scofield", "agefield": "18"});
WriteResult({ "nInserted" : 1 })
mongos> db.testcoll.insert({"myfield": "amos", "otherfield": "d", "kube" : "db" });
WriteResult({ "nInserted" : 1 }) # 获取数据
mongos> db.testcoll.find();
{ "_id" : ObjectId("604b2d099446ca80f20bab7f"), "myfield" : "scofield", "agefield" : "18" }
{ "_id" : ObjectId("604b2d4d9446ca80f20bab80"), "myfield" : "amos", "otherfield" : "d", "kube" : "db" }

kubernetes生产实践之mongodb的更多相关文章

  1. 在Docker和Kubernetes上运行MongoDB微服务

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟.容器是完全使用沙箱机制,相互之间不会有任何接 ...

  2. kubernetes生产实践之redis-cluster

    方案一 自定义yaml文件安装redis cluster 背景 在Kubernetes中部署Redis集群面临挑战,因为每个Redis实例都依赖于一个配置文件,该文件可以跟踪其他集群实例及其角色.为此 ...

  3. kubernetes生产实践之mysql

    简介 kubedb mysql 生命周期及特性 Supported MySQL Features Features Availability Clustering ✓ Persistent Volum ...

  4. kubernetes使用statefulset部署mongoDB 单机版 自定义配置文件、密码等

    注: 官方镜像地址: https://hub.docker.com/_/mongo?tab=description docker版的mongo移除了默认的/etc/mongo.conf, 修改了db数 ...

  5. MongoDB 4.2 新特性解读 (转载)

    MongoDB World 2019 上发布新版本 MongoDB 4.2 Beta,包含多项数据库新特性,本文尝试从技术角度解读. Full Text Search MongoDB 4.2 之前,全 ...

  6. 22-MySQL DBA笔记-其他产品的选择

    第22章 其他产品的选择 本章将为读者介绍其他的数据库产品,主要是NoSQL产品的选择.读者在熟悉MySQL之外,也应该了解其他的数据库产品.本章的目的是给读者一个引导,如何选择一些NoSQL产品,而 ...

  7. GitLab + Jenkins + Docker + Kubernetes。

    目前方案是GitLab + Jenkins + Docker + Kubernetes. 方案的工作流程如下:首先,开发人员提交代码代码提交:随后,GitLab 会自动触发Jenkins job,Je ...

  8. Kubernetes如何支持有状态服务的部署?

    作者:Jack47 转载请保留作者和原文出处 PS:如果喜欢我写的文章,欢迎关注我的微信公众账号程序员杰克,两边的文章会同步,也可以添加我的RSS订阅源. Kubernetes对无状态服务有完善的支持 ...

  9. kubernetes实践之四:深入理解控制器(workload)

    一.Pod与controllers的关系 controllers:在集群上管理和运行容器的对象 通过label-selector相关联 Pod通过控制器实现应用的运维,如伸缩,升级等 二.Deploy ...

随机推荐

  1. Linux系统SCSI磁盘扫描机制解析及命令实例

    介绍Linux系统扫描SCSI磁盘有几种方式?Linux新增LUN之后,能否不重启主机就认出设备?如果安装了PowerPath,动态添加/删除LUN的命令是什么?本文总结了Linux主机对磁盘设备进行 ...

  2. 1009E Intercity Travelling 【数学期望】

    题目:戳这里 题意:从0走到n,难度分别为a1~an,可以在任何地方休息,每次休息难度将重置为a1开始.求总难度的数学期望. 解题思路: 跟这题很像,利用期望的可加性,我们分析每个位置的状态,不管怎么 ...

  3. C++ part8

    1.volatile关键字 在C++中,对volatile修饰的对象的访问,有编译器优化上的副作用: 不允许被编译器优化,提供特殊地址的稳定访问(只从内存中读取). 有序性,编译器进行优化时,不能把对 ...

  4. php foundation knowledge!

    php foundation knowledge! 1 <?php 2 $p = "PII"; 3 define("XPI",3.1415926); 4 ...

  5. React Hooks: useReducer All In One

    React Hooks: useReducer All In One useReducer https://reactjs.org/docs/hooks-reference.html#usereduc ...

  6. 使用 js 实现一个简易版的 drag & drop 库

    使用 js 实现一个简易版的 drag & drop 库 具有挑战性的前端面试题 H5 DnD js refs https://www.infoq.cn/article/0NUjpxGrqRX ...

  7. ws & websocket & 掉线重连

    ws & websocket & 掉线重连 reconnecting websocket https://github.com/joewalnes/reconnecting-webso ...

  8. flutter 使用vs编辑windows插件

    创建插件 mkdir win_test && cd win_test flutter create -t plugin --platforms windows ./ 找到win_tes ...

  9. Mac Benchmarks

    Mac Benchmarks https://browser.geekbench.com/mac-benchmarks https://www.geekbench.com/ https://www.f ...

  10. js字典

    传送门https://www.2cto.com/kf/201709/680989.html 点击