在 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)