简介

先看下生命周期图



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. ElasticSearch 7.x 学习

    目录 ElasticSearch 7.x 一.前言 1.1.正向索引和倒排索引 1.1.1.正向索引 1.1.2.倒排索引 二.安装 三.ES 基本概念 3.1.索引 3.2.文档 3.4.mappi ...

  2. 卸载vue2.9.6版本,安装新版本

    1.检查vue安装目录(cmd中输入) where vue 2.删除目录中的关于vue的文件(可以将文件按时间排序,找到vue相关的文件删除) 3.检查vue是否还能找到 4.安装新版本的vue np ...

  3. Ubuntu16安装Caffe+Python3缺少libboost

    如果在/usr/lib/x86_64-linux-gnu中找到libboost_python-py3.5.so, 则 sudo ln -s libboost_python-py3.5.so libbo ...

  4. TypeScript Version 23 Design Patterns

    TypeScript Version 23 Design Patterns TypeScript 设计模式 https://refactoring.guru/design-patterns/types ...

  5. MOOC学习成果认证及对高等教育变革路径的影响

    MOOC是网络开放教育创新发展的产物,也是备受人们欢迎的网络学习途径.当前制约MOOC能否可持续深入发展的问题聚焦于MOOC学习成果能否得到合理的认证.MOOC学习成果认证分为非学分认证和学分认证.M ...

  6. bind & this & new & arrow function

    bind & this & new & arrow function this bind call apply new arrow function arrow functio ...

  7. web cache & web storage all in one

    web cache & web storage all in one web cache in action web cache best practices web storage in a ...

  8. virtual scroll list / dynamic dom list

    virtual scroll list / dynamic dom list 虚拟滚动列表 1亿条数据的处理渲染方法 时间分片,不阻塞 DOM web workers 后台进程 Array buffe ...

  9. Dart All In One

    Dart All In One dart & flutter https://github.com/dart-lang https://github.com/dart-lang/sdk win ...

  10. Node.js & ES modules & .mjs

    Node.js & ES modules & .mjs Node.js v13.9.0 https://nodejs.org/api/esm.html https://nodejs.o ...