以下是一个运行MongoDB服务的yaml文件,包括StatefulSet、Service、PersistentVolume(PV)、PersistentVolumeClaim(PVC),并使用本地存储:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mongodb
spec:
replicas: 1
serviceName: mongodb
selector:
matchLabels:
app: mongodb
template:
metadata:
labels:
app: mongodb
spec:
containers:
- name: mongo-container
image: mongo
volumeMounts:
- name: mongo-persistent-storage
mountPath: /data/db # MongoDB默认数据目录路径,可以根据需要修改。
ports:
- containerPort: 27017 # MongoDB默认端口号。
volumes:
- name: mongo-persistent-storage
persistentVolumeClaim:
claimName: mongo-pv-claim # 需要与下面定义的PVC名称保持一致。
---
apiVersion: v1
kind: Service
metadata:
name: mongodb
spec:
selector:
app : mongodb
ports :
- port : 27017
targetPort : 27017
---
apiVersion : v1
kind : PersistentVolume
metadata :
name : mongo-pv-volume # 给PV命名。
spec :
capacity :
storage : 3Gi # 设置存储容量大小。
accessModes :
- ReadWriteOnce # 只读/写模式,表示只有一个节点可以挂载该卷。如果需要多个节点共享,则修改为ReadWriteMany或者ReadOnlyMany。
persistentVolumeReclaimPolicy : Retain # PV回收策略设置为Retain,避免数据丢失。
storageClassName : local-storage # 设置存储类型为本地存储,需要提前在Kubernetes集群中定义。
local :
path : /mnt/data/mongo-pv # 指定PV的挂载路径。在每个节点上必须都存在该路径,并且有足够的空间来存储数据。
---
apiVersion : v1
kind : PersistentVolumeClaim
metadata :
name : mongo-pv-claim # 给PVC命名
spec :
accessModes :
- ReadWriteOnce # 只读/写模式
resources :
requests :
storage : 3Gi # 请求3Gi的存储容量大小。
selector :
matchLabels :
storage-name : mongo-pv-volume # 与下面定义的标签匹配,指定使用哪个PV卷。
请注意,在运行此yaml文件之前,您需要先在Kubernetes集群中创建一个local-storage
StorageClass并且确保每个节点上都存在挂载路径 /mnt/data/mongo-pv
。