kubernetes 并在多个 pod 之间共享 nfs 卷

kubernetes 并在多个 pod 之间共享 nfs 卷

我正在尝试弄清楚如何将单个 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'}
    }
  ]
}
[...]

答案2

相关内容