k8s部署mongodb.md

在 NFS 服务器上创建目录

1
2
sudo mkdir -p /data/nfs/mongodb-data
sudo chmod 777 /data/nfs/mongodb-data

mongodb静态pv

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# mongodb-static-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: mongodb-data-pv
labels:
app: mongodb
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs-storage # 相同的StorageClass名称
nfs:
server: 192.168.1.100
path: /data/nfs/mongodb-data # 不同的路径
---
# mongodb-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mongodb-data-pvc
spec:
storageClassName: nfs-storage # 引用相同的StorageClass
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
selector: # 可选:确保绑定到特定的PV
matchLabels:
app: mongodb

kubectl apply -f mongodb-static-pv.yaml
kubectl apply -f mongodb-pvc.yaml

mongodb部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# mongodb-deployment.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mongodb
spec:
serviceName: mongodb-service
replicas: 1
selector:
matchLabels:
app: mongodb
template:
metadata:
labels:
app: mongodb
spec:
securityContext:
fsGroup: 999
containers:
- name: mongodb
image: mongo:latest
ports:
- containerPort: 27017
env:
- name: MONGO_INITDB_ROOT_USERNAME
value: "admin"
- name: MONGO_INITDB_ROOT_PASSWORD
value: "password123"
volumeMounts:
- name: mongodb-data
mountPath: /data/db
securityContext:
runAsUser: 999
runAsGroup: 999

volumes:
- name: mongodb-data
persistentVolumeClaim:
claimName: mongodb-data-pvc

---

apiVersion: v1
kind: Service
metadata:
name: mongodb-service
spec:
selector:
app: mongodb
ports:
- protocol: TCP
port: 27017
targetPort: 27017
nodePort: 30017 # 节点暴露端口(范围30000-32767)
type: NodePort # 允许外部通过节点IP:NodePort访问