Как я могу определить общий постоянный том между двумя разными развертываниями в k8s?

Я пытаюсь определить общий постоянный том в k8s между двумя разными развертываниями, и я столкнулся с некоторыми проблемами:

У меня есть 2 модуля для каждого развертывания, и между развертываниями я пытаюсь настроить общий том - это означает, что если я создаю файл txt в deplyment1 / pod1 и смотрю в deplyment1 / pod2 - я не вижу файл.

Вторая проблема заключается в том, что я не вижу файлы в другом развертывании (deplyment2) - в настоящее время происходит то, что каждый модуль создает свой собственный разделенный том, а не использует один и тот же том.

В конце концов, моя цель - создать общий том между модулями и развертываниями. Важно отметить, что я использую GKE.

Ниже мои текущие конфигурации

Развертывание 1:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: app1
  namespace: test
spec:
  selector:
    matchLabels:
      app: app1
  template:
    metadata:
      labels:
        app: app1
    spec:
      containers:
        - name: server
          image: app1
          ports:
            - name: grpc
              containerPort: 11111
          resources:
            requests:
              cpu: 300m
            limits:
              cpu: 500m
          volumeMounts:
            - name: test
              mountPath: /etc/test/configs
      volumes:
        - name: test
          persistentVolumeClaim:
            claimName: my-claim

Развертывание 2:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: app2
      namespace: test
    spec:
      selector:
        matchLabels:
          app: app2
      template:
        metadata:
          labels:
            app: app2
        spec:
          containers:
            - name: server
              image: app2
              ports:
                - name: http
                  containerPort: 22222
              resources:
                requests:
                  cpu: 300m
                limits:
                  cpu: 500m
              volumeMounts:
                - name: test
                  mountPath: /etc/test/configs
          volumes:
            - name: test
              persistentVolumeClaim:
                claimName: my-claim

Постоянный объем:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: test-pv
      namespace: test
    spec:
      capacity:
        storage: 5Gi
      volumeMode: Filesystem
      accessModes:
      - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      storageClassName: fast
      local:
        path: /etc/test/configs
      nodeAffinity:
        required:
          nodeSelectorTerms:
          - matchExpressions:
            - key: cloud.google.com/gke-nodepool
              operator: In
              values:
              - default-pool
    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: my-claim
      namespace: test
      annotations:
        volume.beta.kubernetes.io/storage-class: fast
    spec:
      accessModes:
      - ReadWriteMany
      storageClassName: fast
      resources:
        requests:
          storage: 5Gi
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: fast
    provisioner: kubernetes.io/gce-pd
    parameters:
      type: pd-ssd
      fstype: ext4
      replication-type: regional-pd

и опишите ПВХ и ПВХ:

     $ kubectl describe pvc -n test
        Name:          my-claim
        Namespace:     test
        StorageClass:  fast
        Status:        Bound
        Volume:        test-pv
        Labels:        <none>
        Annotations:   pv.kubernetes.io/bind-completed: yes
                       pv.kubernetes.io/bound-by-controller: yes
                       volume.beta.kubernetes.io/storage-class: fast
        Finalizers:    [kubernetes.io/pvc-protection]
        Capacity:      5Gi
        Access Modes:  RWX
        VolumeMode:    Filesystem
        Mounted By:    <none>
        Events:        <none>
      $ kubectl describe pv -n test
        Name:              test-pv
        Labels:            <none>
        Annotations:       pv.kubernetes.io/bound-by-controller: yes
        Finalizers:        [kubernetes.io/pv-protection]
        StorageClass:      fast
        Status:            Bound
        Claim:             test/my-claim
        Reclaim Policy:    Retain
        Access Modes:      RWX
        VolumeMode:        Filesystem
        Capacity:          5Gi
        Node Affinity:
          Required Terms:
            Term 0:        cloud.google.com/gke-nodepool in [default-pool]
        Message:
        Source:
            Type:  LocalVolume (a persistent volume backed by local storage on a node)
            Path:  /etc/test/configs
        Events:    <none>

comment
AFAIK это невозможно. Вы можете настроить контейнер, настроенный с помощью NFS, и создать экспорт, который могут монтировать другие контейнеры. github.com/kubernetes/examples/tree/master/staging/volumes/nfs   -  person John Hanley    schedule 11.11.2020


Ответы (1)


Драйвер хранилища GCE-PD CSI не поддерживает ReadWriteMany. Вам нужно использовать ReadOnlyMany. Для ReadWriteMany нужно использовать крепления GFS.

Из документации о том, как использовать постоянные диски с несколькими считывателями

Создание PersistentVolume и PersistentVolumeClaim

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-readonly-pv
spec:
  storageClassName: ""
  capacity:
    storage: 10Gi
  accessModes:
    - ReadOnlyMany
  claimRef:
    namespace: default
    name: my-readonly-pvc
  gcePersistentDisk:
    pdName: my-test-disk
    fsType: ext4
    readOnly: true
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-readonly-pvc
spec:
  # Specify "" as the storageClassName so it matches the PersistentVolume's StorageClass.
  # A nil storageClassName value uses the default StorageClass. For details, see
  # https://kubernetes.io/docs/concepts/storage/persistent-volumes/#class-1
  storageClassName: ""
  accessModes:
    - ReadOnlyMany
  resources:
    requests:
      storage: 10Gi

Использование PersistentVolumeClaim в модуле

apiVersion: v1
kind: Pod
metadata:
  name: pod-pvc
spec:
  containers:
  - image: k8s.gcr.io/busybox
    name: busybox
    command:
      - "sleep"
      - "3600"
    volumeMounts:
    - mountPath: /test-mnt
      name: my-volume
      readOnly: true
  volumes:
  - name: my-volume
    persistentVolumeClaim:
      claimName: my-readonly-pvc
      readOnly: true

Теперь у вас может быть несколько модулей на разных узлах, которые все могут монтировать этот PersistentVolumeClaim в режиме только для чтения. Однако вы не можете подключать постоянные диски в режиме записи на нескольких узлах одновременно.

person Arghya Sadhu    schedule 11.11.2020
comment
когда я попытался сделать это, я столкнулся с проблемами. `` - test: pod / app1-69f499c8d-srff2: доступно 0/9 узлов: 3 Недостаточно ЦП, 6 узлов имели конфликт сродства узла тома. и это моя проблема. когда модули поднимаются, первые модули улавливают громкость, а другие модули из других приложений не могут подключиться к громкости. не могли бы вы подробнее рассказать о способе nfs? - person Saar Wintrov; 11.11.2020