Назад | Перейти на главную страницу

kubernetes и совместное использование тома 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.

Надеюсь, вы понимаете, что я здесь пытаюсь сделать (извините, мне сложно объяснить). Я просто хочу использовать один общий ресурс nfs, который может использоваться несколькими модулями, сохраняя при этом их данные отдельно.

Я читал, что PV привязан один к одному к PVC и, следовательно, не может быть использован повторно, но PVC можно использовать повторно. См. Следующие ресурсы:

https://stackoverflow.com/questions/44204223/kubernetes-nfs-persistent-volumes-multiple-claims-on-same-volume-claim-stuck

https://docs.openshift.org/latest/install_config/storage_examples/shared_storage.html

В этом случае (совместное использование одного PV с использованием двух PVC в двух разных папках) вы можете использовать параметр subPath в конфигурации volumeMounts ваших контейнеров:

[...]
'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'}
    }
  ]
}
[...]