在 K8S 中测试环境中搭建 mongodb

在 K8S 测试环境搭建一个 mongodb,通过 nodeName 选定固定一个节点启动,通过 hostPath 来持久化

vi rs-mongodb.yaml 

apiVersion: apps/v1 
kind: Deployment
metadata:
  namespace: klvchen
  name: mongodb
  labels:
    app: mongodb
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mongodb
  template:
    metadata:
      labels:
        app: mongodb
    spec:
      nodeName: k8s-node1    # 固定在 k8s-node1 节点
      containers:
      - name: mongodb
        image: mongo:4.2.9
        resources:
          limits:            # 限定资源
            cpu: 2000m
            memory: 8Gi
          requests:
            cpu: 100m
            memory: 8Gi
        env:
          - name: MONGO_INITDB_ROOT_USERNAME  # 设置用户名
            value: root
          - name: MONGO_INITDB_ROOT_PASSWORD  # 设置密码
            value: 'klvchen123'
        volumeMounts:
          - mountPath: /data/db                    
            name: mongodb-volume
      volumes:
        - name: mongodb-volume
          hostPath:
            path: /data/rs-mongodb-volume          # 映射的宿主机目录
            type: DirectoryOrCreate
 
---

apiVersion: v1
kind: Service
metadata:
  namespace: klvchen
  name: mongodb
spec:
  type: ClusterIP
  selector:
    app: mongodb
  ports:
  - port: 27017
    targetPort: 27017

启动及访问

# 启动
kubectl apply -f rs-mongodb.yaml

# 查看 
kubectl get pod -n klvchen -o wide

# 在 K8S 集群中的其他容器可以通过 FQDN 来访问
mongodb.klvchen.svc.cluster.local:27017

mongodb 简单操作

# 可以通过 kubectl -n klvhcen exec -it POD_NAME /bin/bash 进入容器

# 进入 mongodb 客户端
mongo admin

# 认证
db.auth('root','klvchen123')

# mongodb 创建 test 数据库,创建用户和密码
use test
db.createUser(
   {
     user: "test",
     pwd: "test123",
     roles: [ { role: "readWrite", db: "test" } ]
   }
 )
 

# 备份,会在当前目录下默认创建名为 dump 的备份文件夹
mongodump --host 127.0.0.1 --port 27017 -u test --authenticationDatabase test

# 恢复到 recommend 数据中
mongorestore --host 127.0.0.1 --port 27017 -u test  --authenticationDatabase -d recommend dump

使用 python 来测试

import pymongo

myclient = pymongo.MongoClient("mongodb://172.16.16.109:27017/")

# 创建的数据库 runoobdb
# 在 MongoDB 中,数据库只有在内容插入后才会创建! 就是说,数据库创建后要创建集合(数据表)并插入一个文档(记录),数据库才会真正创建。
mydb = myclient["runoobdb"]

# 使用数据库对象来创建集合
# 在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。
mycol = mydb["sites"]

# 集合中插入文档使用 insert_one() 方法,该方法的第一参数是字典 name => value 对,以下实例向 sites 集合中插入文档
# mydict = {"name": "RUNOOB", "alexa": "10000", "url": "https://www.runoob.com"}
#
# x = mycol.insert_one(mydict)
# print(x)

# 使用 find_one() 方法来查询集合中的一条数据。
# x = mycol.find_one()
# print(x)

# find() 方法可以查询集合中的所有数据
for x in mycol.find():
    print(x)
posted @ 2020-09-17 15:36  klvchen  阅读(4377)  评论(1编辑  收藏  举报