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
Logo

K8S/Kubernetes社区为您提供最前沿的新闻资讯和知识内容

更多推荐