Как объясняет @DT, постоянное требование тома связано исключительно с постоянным томом.
Нельзя связать 2 pv c с тем же pv .
Здесь вы можете найти другой случай, где это обсуждалось.
Существует лучшее решение для вашего сценария, которое включает использование nfs-client-provisioner . Для этого сначала нужно установить helm в вашем кластере, а затем выполнить эти шаги, которые я создал для предыдущего ответа на ServerFault.
Я протестировал его, и с помощью этого решения вы можете изолировать один PV C от другого.
1 - Установите и настройте NFS-сервер на моем мастер-узле (Debian Linux, это может измениться в зависимости от вашего Linux дистрибутива):
Перед установкой Сервер ядра NFS, нам нужно обновить индекс репозитория нашей системы:
$ sudo apt-get update
Теперь выполните следующую команду, чтобы установить сервер ядра NFS в вашей системе:
$ sudo apt install nfs-kernel-server
Создать Каталог экспорта
$ sudo mkdir -p /mnt/nfs_server_files
Поскольку мы хотим, чтобы все клиенты обращались к каталогу, мы удалим ограничивающие разрешения для папки экспорта с помощью следующих команд (это может варьироваться в зависимости от настроек в соответствии с политикой безопасности). :
$ sudo chown nobody:nogroup /mnt/nfs_server_files
$ sudo chmod 777 /mnt/nfs_server_files
Назначение доступа к серверу для клиентов через файл экспорта NFS
$ sudo nano /etc/exports
Внутри этого файла добавьте новую строку, чтобы разрешить доступ с других серверов к вашей общей папке.
/mnt/nfs_server_files 10.128.0.0/24(rw,sync,no_subtree_check)
Возможно, вы захотите использовать разные опции в своей акции. 10.128.0.0/24 - это моя внутренняя сеть k8s.
Экспортируйте общий каталог и перезапустите службу, чтобы убедиться в правильности всех файлов конфигурации.
$ sudo exportfs -a
$ sudo systemctl restart nfs-kernel-server
Проверить все активные ресурсы:
$ sudo exportfs
/mnt/nfs_server_files
10.128.0.0/24
2 - установить клиент NFS на все мои рабочие узлы:
$ sudo apt-get update
$ sudo apt-get install nfs-common
В На этом этапе вы можете проверить, есть ли у вас доступ к вашей папке с рабочих узлов:
$ sudo mkdir -p /mnt/sharedfolder_client
$ sudo mount kubemaster:/mnt/nfs_server_files /mnt/sharedfolder_client
Обратите внимание, что в этот момент вы можете использовать имя вашего главного узла. K8s заботится о DNS здесь. Проверьте, правильно ли смонтирован том, и создайте несколько папок и файлов для мужчин, чтобы убедиться, что все работает нормально.
$ cd /mnt/sharedfolder_client
$ mkdir test
$ touch file
Go вернитесь на свой мастер-узел и проверьте, находятся ли эти файлы в папке / mnt / nfs_server_files.
3 - Установите NFS Client Provisioner .
Установите поставщик с помощью helm:
$ helm install --name ext --namespace nfs --set nfs.server=kubemaster --set nfs.path=/mnt/nfs_server_files stable/nfs-client-provisioner
Обратите внимание, что я указал для него пространство имен , Проверьте, работают ли они:
$ kubectl get pods -n nfs
NAME READY STATUS RESTARTS AGE
ext-nfs-client-provisioner-f8964b44c-2876n 1/1 Running 0 84s
На данный момент у нас есть класс хранилища под названием nfs-client:
$ kubectl get storageclass -n nfs
NAME PROVISIONER AGE
nfs-client cluster.local/ext-nfs-client-provisioner 5m30s
Нам необходимо создать PersistentVolumeClaim:
$ more nfs-client-pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
namespace: nfs
name: test-claim
annotations:
volume.beta.kubernetes.io/storage-class: "nfs-client"
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 1Mi
$ kubectl apply -f nfs-client-pvc.yaml
Проверка состояния (ожидается предел):
$ kubectl get persistentvolumeclaim/test-claim -n nfs
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
test-claim Bound pvc-e1cd4c78-7c7c-4280-b1e0-41c0473652d5 1Mi RWX nfs-client 24s
4 - создание простого модуля для проверки возможности чтения и записи NFS. Поделиться:
Создайте модуль, используя этот yaml:
apiVersion: v1
kind: Pod
metadata:
name: pod0
labels:
env: test
namespace: nfs
spec:
containers:
- name: nginx
image: nginx
imagePullPolicy: IfNotPresent
volumeMounts:
- name: nfs-pvc
mountPath: "/mnt"
volumes:
- name: nfs-pvc
persistentVolumeClaim:
claimName: test-claim
$ kubectl apply -f pod.yaml
Давайте перечислим все подключенные тома на нашем модуле:
$ kubectl exec -ti -n nfs pod0 -- df -h /mnt
Filesystem Size Used Avail Use% Mounted on
kubemaster:/mnt/nfs_server_files/nfs-test-claim-pvc-a2e53b0e-f9bb-4723-ad62-860030fb93b1 99G 11G 84G 11% /mnt
Как мы видим, у нас есть том NFS монтируется на / мн. (Важно отметить путь kubemaster:/mnt/nfs_server_files/nfs-test-claim-pvc-a2e53b0e-f9bb-4723-ad62-860030fb93b1
)
Давайте проверим его:
root@pod0:/# cd /mnt
root@pod0:/mnt# ls -la
total 8
drwxrwxrwx 2 nobody nogroup 4096 Nov 5 08:33 .
drwxr-xr-x 1 root root 4096 Nov 5 08:38 ..
Он пуст. Давайте создадим несколько файлов:
$ for i in 1 2; do touch file$i; done;
$ ls -l
total 8
drwxrwxrwx 2 nobody nogroup 4096 Nov 5 08:58 .
drwxr-xr-x 1 root root 4096 Nov 5 08:38 ..
-rw-r--r-- 1 nobody nogroup 0 Nov 5 08:58 file1
-rw-r--r-- 1 nobody nogroup 0 Nov 5 08:58 file2
Теперь давайте рассмотрим, где находятся эти файлы на нашем NFS-сервере (главный узел):
$ cd /mnt/nfs_server_files
$ ls -l
total 4
drwxrwxrwx 2 nobody nogroup 4096 Nov 5 09:11 nfs-test-claim-pvc-4550f9f0-694d-46c9-9e4c-7172a3a64b12
$ cd nfs-test-claim-pvc-4550f9f0-694d-46c9-9e4c-7172a3a64b12/
$ ls -l
total 0
-rw-r--r-- 1 nobody nogroup 0 Nov 5 09:11 file1
-rw-r--r-- 1 nobody nogroup 0 Nov 5 09:11 file2
А вот файлы, которые мы только что создали внутри нашего модуля!