我正在尝试弄清楚如何将单个 nfs 共享与 k8s 持久卷声明一起使用。
例如,假设我配置了一个 nfs pv:
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs-storage
nfs:
path: /var/nfs_exports
server: 10.9.0.205
readOnly: false
是否可以创建映射到此单个共享内的子目录的多个卷声明?
再举个例子,假设我创建了以下数量声明:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: influx-data
namespace: kube-system
spec:
storageClassName: nfs-storage
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
---
和:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: elasticsearch-data
namespace: kube-system
spec:
storageClassName: nfs-storage
accessModes:
- ReadWriteMany
resources:
requests:
storage: 2Gi
---
我猜测,这两个声明都将与 pv 绑定,但是没有办法分离 elasticsearch 和 influxdb 的数据。
我希望您能理解我在这里要做什么(抱歉,我很难解释)。我只想使用一个可供多个 pod 使用的 nfs 共享,同时仍保持它们的数据独立。
答案1
在这种情况下(使用两个不同文件夹中的两个 PVC 共享一个 PV),您可以在容器的 volumeMounts 配置中使用 subPath 选项:
[...]
'spec': {
'template': {
'metadata': {'name': 'container_name'},
'spec': {
'restartPolicy': 'Never',
'containers':[{
'image': 'busybox',
'name': 'example',
'command': ['/bin/ash'],
'args': ['-c', ls -l /data],
'volumeMounts': [{
'name': 'influx-vol-mount',
'mountPath': '/data',
'subPath': 'subpath_1',
'readOnly': False
},
{ 'name': 'es-vol-mount',
'mountPath': '/data',
'subPath': 'subpath_2',
'readOnly': False
}]
}],
'volumes': [
{
'name': 'influx-vol-mount',
'persistentVolumeClaim': {'claimName': 'influx-data'}
},
{
'name': 'store-vol',
'persistentVolumeClaim': {'claimName': 'elasticsearch-data'}
}
]
}
[...]