以下是一个k8s上部署mongodb的简单例子 创建了一个mongodb的namespace, 创建了SA, clusterrole,名为mongo的服务, 名为mongo的3个有状态副本
mongo.yaml apiVersion: v1 kind: Namespace metadata: name: mongodb --- apiVersion: v1 kind: ServiceAccount metadata: name: mongo namespace: mongodb --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: mongo subjects: - kind: ServiceAccount name: mongo namespace: mongodb roleRef: kind: ClusterRole name: cluster-admin apiGroup: rbac.authorization.k8s.io --- apiVersion: v1 kind: Service metadata: name: mongo namespace: mongodb labels: name: mongo spec: ports: - port: 27017 targetPort: 27017 clusterIP: None selector: role: mongo --- apiVersion: apps/v1 kind: StatefulSet metadata: name: mongo namespace: mongodb spec: serviceName: mongo replicas: 3 selector: matchLabels: role: mongo environment: staging template: metadata: labels: role: mongo environment: staging replicaset: MainRepSet spec: affinity: podAntiAffinity: preferredDuringSchedulingIgnoredDuringExecution: - weight: 100 podAffinityTerm: labelSelector: matchExpressions: - key: replicaset operator: In values: - MainRepSet topologyKey: kubernetes.io/hostname terminationGracePeriodSeconds: 10 serviceAccountName: mongo containers: - name: mongo image: mongo:4.4 command: - mongod - "--wiredTigerCacheSizeGB" - "0.25" - "--bind_ip" - "0.0.0.0" - "--replSet" - MainRepSet ports: - containerPort: 27017 volumeMounts: - name: mongo-data mountPath: /data/db resources: requests: cpu: 1 memory: 2Gi - name: mongo-sidecar image: cvallance/mongo-k8s-sidecar env: - name: MONGO_SIDECAR_POD_LABELS value: "role=mongo,environment=staging" - name: KUBE_NAMESPACE value: "mongo" - name: KUBERNETES_MONGO_SERVICE_NAME value: "mongo" volumeClaimTemplates: - metadata: name: mongo-data spec: accessModes: [ "ReadWriteOnce" ] storageClassName: openebs-hostpath resources: requests: storage: 30Gi
3个pod启动以后, 进入其中一个pod,然后执行集群创建命令 kubectl -n mongodb exec -it mongo-0 -- mongo
config = { _id:"MainRepSet" , members: [ {_id:0 ,host:"mongo-0.mongo.mongodb.svc.cluster.local:27017" ,priority:90 }, {_id:1 ,host:"mongo-1.mongo.mongodb.svc.cluster.local:27017" ,priority:80 }, {_id:2 ,host:"mongo-2.mongo.mongodb.svc.cluster.local:27017" ,priority:70 } ] } rs.initiate(config);
优化
set -o errexitset -o pipefailset -o nounsetecho 'never' > /sys/kernel/mm/transparent_hugepage/enabledecho 'never' > /sys/kernel/mm/transparent_hugepage/defrag
设置或修改密码 show dbs use admin db.createUser({ user: "admin" , pwd : "password" , roles: [{ role: "userAdminAnyDatabase" , db: "admin" }] }) db.createUser({user: "root" ,pwd : "password" , roles: [ { role: "root" , db: "admin" } ]}) use yourdatabase db.createUser({user: "user" ,pwd : "password" ,roles: [ { role: "dbOwner" , db: "yourdatabase" } ]}) show users use admin db.auth("admin" ,"password" ) db.system.users.remove({user:"XXXXXX" }) db.system.users.remove({} mongodb://username:password@ip:port/database mongodb://username:password@ip0:port,ip1:port,ip2:port/database?replicaSet=MainRepSet
springboot 在nacos中的配置
mongodb: uri: mongodb://mongo-0.mongo.mongodb.svc.cluster.local:27017,mongo-1.mongo.mongodb.svc.cluster.local:27017,mongo-2.mongo.mongodb.svc.cluster.local:27017/database?replicaSet=MainRepSet auto-index-creation: true