Kubernetes: Могу ли я установить разные подпути из одного и того же PV в разные места одного контейнера?

Могу ли я установить разные подпути из одного и того же PV в разные места одного и того же контейнера?

Я управляю несколькими экземплярами WordPress в кластере моей компании Kubernetes. Каждый экземпляр имеет свой собственный том персистентности и контейнер. Единственная особенность моей установки - это то, что я монтирую несколько путей PV на несколько путей контейнера.

Все мои контейнеры работали хорошо с тех пор, как пару недель назад мы обновили Kubernetes до текущей версии. С тех пор начался ад.

$ kubectl version
Client Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.11", GitCommit:"637c7e288581ee40ab4ca210618a89a555b6e7e9", GitTreeState:"clean", BuildDate:"2018-11-26T14:38:32Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"10", GitVersion:"v1.10.11", GitCommit:"637c7e288581ee40ab4ca210618a89a555b6e7e9", GitTreeState:"clean", BuildDate:"2018-11-26T14:25:46Z", GoVersion:"go1.9.3", Compiler:"gc", Platform:"linux/amd64"}

При перезапуске модуля, если он запланирован для запуска на другом узле, он застревает при PodInitializing со следующим сообщением о событии

Ошибка Multi-Attach для тома "pvc-ac6b35f3-7716-11e8-adda-b60483de6a40" Том уже подключен исключительно к одному узлу и не может быть подключен к другому

Вот мои ресурсы.


Ceph RBD PersistentVolume

Он содержит две директории и файл

  • html/: каталог с php файлами
  • logs/: каталог с лог-файлами
  • container-data.txt: текстовый файл с некоторой информацией

Определяется как:

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: rbd-wordpress-mysite
  labels:
    app: wordpress
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi

Мой стручок

kind: Deployment
apiVersion: apps/v1beta1
metadata:
  name: wordpress-mysite
  labels:
    app: wordpress
  namespace: unibz
spec:
  template:
    metadata:
      name: wordpress-mysite
      labels:
        app: wordpress
      namespace: unibz
    spec:
      containers:
        - name: wordpress-mysite
          image: myimage
          volumeMounts:
          - mountPath: "/root/container-data.txt"
            name: wordpress-data
            subPath: container-data.txt
          - mountPath: "/var/www/html"
            name: wordpress-data
            subPath: html
          - mountPath: "/var/log/apache2"
            name: wordpress-data
            subPath: logs
          ports:
          - containerPort: 80
            name: wordpress-http
      volumes:
      - name: wordpress-data
        persistentVolumeClaim:
           claimName: rbd-wordpress-mysite
      - name: wordpress-conf
        configMap:
          name: wordpress-conf

Это неправильный способ использования постоянства? Может ли это быть причиной ошибки Multi-Attach?

1 ответ

Похоже, вы пытаетесь присоединить то же самое PVC в другой node,

Режимы доступа Заявки используют те же соглашения, что и тома, при запросе хранилища с определенными режимами доступа.

В вашем .yaml Я вижу, у вас есть настройки accessModes: ReadWriteOnce,

PersistentVolume может быть установлен на хосте любым способом, поддерживаемым поставщиком ресурсов. Как показано в таблице ниже, у провайдеров будут разные возможности, и режимы доступа каждого PV установлены на конкретные режимы, поддерживаемые этим конкретным томом. Например, NFS может поддерживать несколько клиентов для чтения / записи, но конкретный PV NFS может быть экспортирован на сервер только для чтения. Каждый PV получает свой собственный набор режимов доступа, описывающих его возможности.

Режимы доступа:

  • ReadWriteOnce - том может монтироваться как чтение-запись одним узлом

  • ReadOnlyMany - том может быть подключен только для чтения многими узлами

  • ReadWriteMany - том может быть смонтирован как чтение-запись многими узлами

От Kubernetes Docs относительно Persistent Volumes Вы можете прочитать, что CephFS поддерживает все accessModes

Другие вопросы по тегам