k8s部署mongodb集群
cat <<END>cluster-mongo.yamlapiVersion: apps/v1kind: StatefulSetmetadata:name: mongospec:selector:matchLabels:role: mongoenvironment: testserviceName: "mongo"replicas: 3template:metadata:labe
·
cat <<END>cluster-mongo.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mongo
spec:
selector:
matchLabels:
role: mongo
environment: test
serviceName: "mongo"
replicas: 3
template:
metadata:
labels:
role: mongo
environment: test
spec:
terminationGracePeriodSeconds: 10
containers:
- name: mongo
image: mongo:3.6.22
command:
- mongod
- "--replSet"
- rs0
- "--bind_ip"
- 0.0.0.0
- "--smallfiles"
- "--noprealloc"
ports:
- containerPort: 27017
volumeMounts:
- name: mongo-persistent-storage
mountPath: /data/db
- name: mongo-sidecar
image: cvallance/mongo-k8s-sidecar:latest
env:
- name: MONGO_SIDECAR_POD_LABELS
value: "role=mongo,environment=test"
volumeClaimTemplates:
- metadata:
name: mongo-persistent-storage
spec:
storageClassName: "cluster-mongo"
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 80Gi
---
apiVersion: v1
kind: Service
metadata:
name: mongo
labels:
name: mongo
spec:
ports:
- port: 27017
targetPort: 27017
clusterIP: None
selector:
role: mongo
---
apiVersion: v1
kind: Service
metadata:
name: mongo-cs
labels:
name: mongo
spec:
ports:
- port: 27017
targetPort: 27017
nodePort: 30717
selector:
role: mongo
type: NodePort
END
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: mongo-default-view
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: view
subjects:
- kind: ServiceAccount
name: default
namespace: default
官网连接
https://kubernetes.io/zh/docs/tutorials/stateful-application/basic-stateful-set/
[root@ceph178 mongo]# kubectl get pods | grep mon
mongo-0 2/2 Running 0 85m
mongo-1 2/2 Running 0 84m
mongo-2 2/2 Running 0 84m
shell管理数据库
#进入mongo-0 pod,且mongo命令连接mongoDB数据库
kubectl exec -it mongo-0 -- mongo
rs.status() #执行rs.status()命令,查看mongo集群状态,下面信息显示1个PRIMARY节点,2个SECONDARY,集群正常
rs0:SECONDARY> rs.status()
{
"set" : "rs0",
"date" : ISODate("2021-07-30T15:08:56.611Z"),
"myState" : 2,
"term" : NumberLong(2),
"syncingTo" : "10.170.2.25:27017",
"syncSourceHost" : "10.170.2.25:27017",
"syncSourceId" : 1,
"heartbeatIntervalMillis" : NumberLong(2000),
"optimes" : {
"lastCommittedOpTime" : {
"ts" : Timestamp(1627657730, 1),
"t" : NumberLong(2)
},
"readConcernMajorityOpTime" : {
"ts" : Timestamp(1627657730, 1),
"t" : NumberLong(2)
},
"appliedOpTime" : {
"ts" : Timestamp(1627657730, 1),
"t" : NumberLong(2)
},
"durableOpTime" : {
"ts" : Timestamp(1627657730, 1),
"t" : NumberLong(2)
}
},
"members" : [
{
"_id" : 0,
"name" : "10.170.1.125:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 3247,
"optime" : {
"ts" : Timestamp(1627657730, 1),
"t" : NumberLong(2)
},
"optimeDate" : ISODate("2021-07-30T15:08:50Z"),
"syncingTo" : "10.170.2.25:27017",
"syncSourceHost" : "10.170.2.25:27017",
"syncSourceId" : 1,
"infoMessage" : "",
"configVersion" : 160100,
"self" : true,
"lastHeartbeatMessage" : ""
},
{
"_id" : 1,
"name" : "10.170.2.25:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 3227,
"optime" : {
"ts" : Timestamp(1627657730, 1),
"t" : NumberLong(2)
},
"optimeDurable" : {
"ts" : Timestamp(1627657730, 1),
"t" : NumberLong(2)
},
"optimeDate" : ISODate("2021-07-30T15:08:50Z"),
"optimeDurableDate" : ISODate("2021-07-30T15:08:50Z"),
"lastHeartbeat" : ISODate("2021-07-30T15:08:56.538Z"),
"lastHeartbeatRecv" : ISODate("2021-07-30T15:08:56.537Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncingTo" : "10.170.0.119:27017",
"syncSourceHost" : "10.170.0.119:27017",
"syncSourceId" : 2,
"infoMessage" : "",
"configVersion" : 160100
},
{
"_id" : 2,
"name" : "10.170.0.119:27017",
"health" : 1,
"state" : 1,
"stateStr" : "PRIMARY",
"uptime" : 3232,
"optime" : {
"ts" : Timestamp(1627657730, 1),
"t" : NumberLong(2)
},
"optimeDurable" : {
"ts" : Timestamp(1627657730, 1),
"t" : NumberLong(2)
},
"optimeDate" : ISODate("2021-07-30T15:08:50Z"),
"optimeDurableDate" : ISODate("2021-07-30T15:08:50Z"),
"lastHeartbeat" : ISODate("2021-07-30T15:08:56.537Z"),
"lastHeartbeatRecv" : ISODate("2021-07-30T15:08:56.537Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncingTo" : "",
"syncSourceHost" : "",
"syncSourceId" : -1,
"infoMessage" : "",
"electionTime" : Timestamp(1627654518, 1),
"electionDate" : ISODate("2021-07-30T14:15:18Z"),
"configVersion" : 160100
},
{
"_id" : 3,
"name" : "10.170.0.120:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 902,
"optime" : {
"ts" : Timestamp(1627657730, 1),
"t" : NumberLong(2)
},
"optimeDurable" : {
"ts" : Timestamp(1627657730, 1),
"t" : NumberLong(2)
},
"optimeDate" : ISODate("2021-07-30T15:08:50Z"),
"optimeDurableDate" : ISODate("2021-07-30T15:08:50Z"),
"lastHeartbeat" : ISODate("2021-07-30T15:08:56.538Z"),
"lastHeartbeatRecv" : ISODate("2021-07-30T15:08:56.537Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncingTo" : "10.170.2.25:27017",
"syncSourceHost" : "10.170.2.25:27017",
"syncSourceId" : 1,
"infoMessage" : "",
"configVersion" : 160100
},
{
"_id" : 4,
"name" : "10.170.2.26:27017",
"health" : 1,
"state" : 2,
"stateStr" : "SECONDARY",
"uptime" : 882,
"optime" : {
"ts" : Timestamp(1627657730, 1),
"t" : NumberLong(2)
},
"optimeDurable" : {
"ts" : Timestamp(1627657730, 1),
"t" : NumberLong(2)
},
"optimeDate" : ISODate("2021-07-30T15:08:50Z"),
"optimeDurableDate" : ISODate("2021-07-30T15:08:50Z"),
"lastHeartbeat" : ISODate("2021-07-30T15:08:56.538Z"),
"lastHeartbeatRecv" : ISODate("2021-07-30T15:08:55.226Z"),
"pingMs" : NumberLong(0),
"lastHeartbeatMessage" : "",
"syncingTo" : "10.170.0.120:27017",
"syncSourceHost" : "10.170.0.120:27017",
"syncSourceId" : 3,
"infoMessage" : "",
"configVersion" : 160100
}
],
"ok" : 1,
"operationTime" : Timestamp(1627657730, 1),
"$clusterTime" : {
"clusterTime" : Timestamp(1627657730, 1),
"signature" : {
"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),
"keyId" : NumberLong(0)
}
}
}
nosqlbooster使用管理员与密码连接,所以为初始安装完成的mongodb添加管理员:
rs0:PRIMARY> use admin #切换到admin数据库
switched to db admin
rs0:PRIMARY> db.createUser({user:"admin",pwd:"12300",roles:["root"]}) #创建用户名为admin、密码为password、角色为root的用户;
Successfully added user: { "user" : "admin", "roles" : [ "root" ] }
rs0:PRIMARY> db.getCollectionNames() #新增的用户在system.users;
[ "system.users", "system.version" ]
rs0:PRIMARY> db.auth("admin", "12300") #第一个用户添加完成后,便需要认证才能继续添加其他用户;
1
rs0:PRIMARY> use test; #创建test数据库;
switched to db test
rs0:PRIMARY> db.users.insertMany( [{ name: "bob", age: 42, status: "A", },{ name: "ahn", age: 22, status: "A", },{ name: "xi", age: 34, status: "D", }])
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("61040bba1ce3378f75980aba"),
ObjectId("61040bba1ce3378f75980abb"),
ObjectId("61040bba1ce3378f75980abc")
]
}
rs0:PRIMARY> show collections; #查询集合
users
rs0:PRIMARY> db.users.find() #查询users集合中的数据;
{ "_id" : ObjectId("61040bba1ce3378f75980aba"), "name" : "bob", "age" : 42, "status" : "A" }
{ "_id" : ObjectId("61040bba1ce3378f75980abb"), "name" : "ahn", "age" : 22, "status" : "A" }
{ "_id" : ObjectId("61040bba1ce3378f75980abc"), "name" : "xi", "age" : 34, "status" : "D" }
添加数据库用户
为其他数据库添加用户,添加用户前需要切换到该数据库
这里设置其角色为dbOwner
rs0:PRIMARY> use test
switched to db test
rs0:PRIMARY> db.createUser({user: "jim", pwd: "123456", roles: [{ role: "dbOwner", db: "test" }]})
Successfully added user: {
"user" : "jim",
"roles" : [
{
"role" : "dbOwner",
"db" : "test"
}
]
}

nosqlbooster连接mongo数据库配置




kubectl scale statefulset mongo --replicas=5 #扩展mongo集群到5个节点


helm安装多副本
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install mydbs \
--set global.storageClass=openebs-hostpath \
--set mongodbRootPassword=DU2K123m1SxT9F \
--set shards=2,replicas=2,shardsvr.dataNode.replicas=2 \
--set shardsvr.persistence.size=1Gi \
--set shardsvr.persistence.storageClass=openebs-hostpath \
--set configsvr.replicas=2 \
--set configsvr.persistence.storageClass=openebs-hostpath \
--set configsvr.persistence.size=1Gi \
bitnami/mongodb-sharded

更多参数
https://github.com/bitnami/charts/tree/master/bitnami/mongodb-sharded/#installing-the-chart
更多推荐



所有评论(0)