mongodb - 如何使用 NFS 部署具有持久卷的单实例 mongodb
问题描述
我有一个在我的笔记本电脑上运行的微服务。但是,我正在使用 docker compose。我正在努力部署到我已经设置的 kubernetes 集群。我坚持让数据持久化。例如,这是我在 docker-compose 中的 mongodb
systemdb:
container_name: system-db
image: mongo:4.4.1
restart: always
ports:
- '9000:27017'
volumes:
- ./system_db:/data/db
networks:
- backend
由于它是本地解决方案,因此我使用了 NFS 服务器。我创建了一个 Persistent Volume 和 Persistent Volume Claim (pvc-nfs-pv1),在使用 nginx 进行测试时似乎效果很好。但是,我不知道如何部署 mongodb statefulset 来使用 pvc。我没有实现副本集。
这是我的yaml:
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: mongod
spec:
serviceName: mongodb-service
replicas: 1
selector:
matchLabels:
role: mongo
template:
metadata:
labels:
role: mongo
environment: test
spec:
terminationGracePeriodSeconds: 10
containers:
- name: mongod-container
image: mongo
resources:
requests:
cpu: "0.2"
memory: 200Mi
ports:
- containerPort: 27017
volumeMounts:
- name: pvc-nfs-pv1
mountPath: /data/db
volumeClaimTemplates:
- metadata:
name: pvc-nfs-pv1
annotations:
volume.beta.kubernetes.io/storage-class: "standard"
spec:
accessModes: [ "ReadWriteOnce" ]
resources:
requests:
storage: 500Mi
我该怎么做?
解决方案
volumeClaimTemplates
用于动态卷配置。因此,您正在定义一个卷声明模板,该模板将用于PersistentVolumeClaim
为每个 pod 创建一个。
将使用PersistentVolume Provisioner 提供的 PersistentVolume
volumeClaimTemplates
提供稳定的存储
因此,对于您的用例,您需要storageclass
使用 nfs 配置器进行创建。NFS Subdir 外部配置 器是一个自动配置器,它使用您现有的和已配置的NFS 服务器来支持通过持久卷声明动态配置 Kubernetes 持久卷。持久卷配置为${namespace}-${pvcName}-${pvName}
.
这是一个如何定义存储类的示例:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: managed-nfs-storage
provisioner: fuseim.pri/ifs # or choose another name, must match deployment's env PROVISIONER_NAME'
parameters:
pathPattern: "${.PVC.namespace}/${.PVC.annotations.nfs.io/storage-path}" # waits for nfs.io/storage-path annotation, if not specified will accept as empty string.
onDelete: delete
推荐阅读
- python - Web Scraping - 我不能使用 for 循环来列出元素
- sql - 特定外键使用的最佳数据库设计?
- c - 如何跨多个文件访问和修改全局变量?
- c# - C# SDL2.SDL_ttf.TTF_Init 在用户机器上返回错误
- python - CSV 行作为字典中的键/值
- javascript - 求区间内未知函数的最大值
- r - 将 R 中的 x 轴指数图格式化为 a^x?
- reactjs - 通过开发菜单重新加载应用程序时,模式不会被拆除/消失
- ios - iOS Swift Gestures:如何将两个项目与手势联系起来
- r - 如何将着丝粒信息添加到 Gviz IdeogramTrack 对象?