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