我正在尝试将现有NFS与StateFulSets一起使用。
使用PresistentVolumeClaim
创建volumeClaimTemplates
似乎是自动的。
问题:
但是,由于PresistentVolumeClaim
声称整个PresistentVolume
。我必须手动为所有副本创建PresistentVolume
。
有没有办法在Kubernetes中动态配置NFS持久卷?
注意: NFS服务器本身是静态的,只需要动态创建K8中的卷,而不是NFS服务器。
我正在使用mongo statefulset示例:
---
apiVersion: v1
kind: Service
metadata:
name: mongo
labels:
name: mongo
spec:
ports:
- port: 27017
targetPort: 27017
clusterIP: None
selector:
role: mongo
---
apiVersion: apps/v1beta1
kind: StatefulSet
metadata:
name: mongo
spec:
serviceName: "mongo"
replicas: 3
template:
metadata:
labels:
role: mongo
spec:
terminationGracePeriodSeconds: 10
containers:
- name: mongo
image: mongo
command:
- mongod
- "--replSet"
- rs0
- "--smallfiles"
- "--noprealloc"
ports:
- containerPort: 27017
volumeMounts:
- name: mongo-data
mountPath: /data/db
- name: mongo-sidecar
image: cvallance/mongo-k8s-sidecar
env:
- name: MONGO_SIDECAR_POD_LABELS
value: "role=mongo"
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
selector:
matchLabels:
type: nfs
它需要3 PresistentVolumeClaim
,所以我必须创建3 PV
才能使用它。这可以像其他动态配置程序一样动态添加到NFS中,例如aws-ebs
这是获取具有NFS持久卷的StatefulSet的正确方法。
答案 0 :(得分:0)
这是我正在进行的工作,我昨天才回来(我的解决方案),但是我的建议是否适合您的目的(或以后找到它的任何人)是查看GlusterFS和Heketi。
信息包括在下面,但TLDR是GlusterFS是您的NFS,Heketi可以自动设置其余部分。我的github存储库使设置自动化...丑陋...但是它对我有用,而我将用我现在所知道的变得不那么丑。
GlusterFS是一个免费的开源可扩展网络文件系统。 https://github.com/gluster/glusterfs https://www.gluster.org/
用于GlusterFS的基于RESTful的卷管理框架 https://github.com/heketi/heketi