我正在尝试将现有的NFS与StateFulSets一起使用。
使用volumeClaimTemplates
创建PresistentVolumeClaim
似乎是自动的。
问题:
但是,由于PresistentVolumeClaim
声称整个PresistentVolume
.我必须为所有副本手动创建PresistentVolume
。有没有办法在 Kubernetes 中动态配置 NFS 持久卷?
注意:NFS 服务器本身是静态的,只需要在 K8s 中动态创建卷,而不是 NFS 服务器。
我正在使用 mongo 状态集示例:
---
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
供它使用。是否可以像其他动态配置器(如 aws-ebs(一样将其动态添加到 NFS 中
这是获取具有 NFS 持久卷的 StatefulSet 的正确方法吗?
好消息是,是的,Kubernetes 现在支持动态创建持久卷,如以下帖子中所述:
- http://blog.kubernetes.io/2017/03/dynamic-provisioning-and-storage-classes-kubernetes.html
坏消息是此功能似乎不支持 NFS...这意味着考虑到即使不涉及 Kubernetes 也需要手动创建每个卷,这在一定程度上有意义:-(
话虽如此,谷歌发现了以下链接,表明可能存在一种非官方的方式来动态配置 NFS。
- https://github.com/kubernetes-incubator/external-storage/tree/master/nfs
希望这些链接对您有所帮助。
这是我昨天刚刚回到的正在进行的工作(我的解决方案(,但如果它适合您的目的(或以后发现的任何人(,我的建议是查看 GlusterFS 和 Heketi。
信息包含在下面,但TLDR是GlusterFS是你的NFS,Heketi可以自动配置其余的。我的 github 存储库会自动设置...好丑...但它对我有用,我会用我现在所知道的让它不那么丑陋。
GlusterFS是一个免费的开源可扩展网络文件系统。 https://github.com/gluster/glusterfs https://www.gluster.org/
基于 RESTful 的 GlusterFS 卷管理框架 https://github.com/heketi/heketi
https://github.com/stevenaldinger/gke-glusterfs-heketi