Как организовать постоянные тома для CSE Kubernetes кластера
Что такое постоянные тома
Приложения, контейнезированные в Docker, как правило, не должны иметь состояния и являются эфемерными: их можно быстро развертывать, масштабировать и удалять по желанию. Однако почти все бизнес-приложения требуют сохранения данных в той или иной форме. В некоторых случаях целесообразно выгружать данные во внешнюю систему (например, базу данных, файловое хранилище или объектное хранилище в общедоступных облачных средах).
Одним из решений является создание системы хранения данных рядом с кластером Kubernetes, которая может обеспечить постоянство хранилища при работе в схеме развертывания, аналогичной самому кластеру.
Виды постоянных томов
В терминах kubernetes есть два вида постоянных томов:
Static persistent volumes — статические постоянные тома, они предварительно создаются администратором кластера. Тома содержат информацию о реальном хранилище, которое доступно для использования кластером. Эти тома существуют в API Kubernetes и доступны для потребления.
CSE поддерживает статические тома, размещенные на NFS.
Dynamic persistent volumes — динамические постоянные тома, они заранее не предоставляются администратором кластера, а разворачиваются в процессе запуска приложений.
CSE в настоящее время не поддерживает динамические постоянные тома. Однако продукт динамично развивается, так что можно ожидать скорого расширения функционала CSE.
Создание статических постоянных томов CSE
Для создания статических постоянных томов необходимо либо при создании кластера включить поддержку NFS:
# vcd cse cluster create MyCluster --nodes 2 --network wan.democompany --enable-nfs --ssh-key id_rsa.pub
либо в существующий кластер добавить NFS-сервер:
# vcd cse node create MyCluster --nodes 1 --network wan.democompany --type nfsd --ssh-key id_rsa.pub
(подробно про vcd и cse написано здесь)
Определяем имя созданной виртуальной машины: nfsd-5tmm
# vcd cse cluster info MyCluster | findstr "nfs"
Далее, создаем виртуальный жесткий диск требуемого объема и подключаем его к развернутой виртуальной машине:
# vcd disk create nfs-shares-1 100g --description "Kubernetes NFS shares" --storage-profile "S_STANDARD"
# vcd vapp attach MyCluster nfsd-5tmm nfs-shares-1
Теперь, используя ключ id_rsa.pub подключаемся, например с помощью putty, к NFS-ноде для разметки и презентации нового диска:
# fdisk /dev/sdb
# mkfs -t ext4 /dev/sdb1
# mkdir /export
# echo '/dev/sdb1 /export ext4 defaults 0 0' >> /etc/fstab
# mount -a
# mkdir /export/volume1
# echo '/export/volume1 *(rw,sync,no_root_squash,no_subtree_check)' >> /etc/exports
# exportfs –r
Создаем в кластере постоянный ресурс тома для общего ресурса в /export/volume1 (путь должен совпадать с именем в /etc/exports на NFS-сервере). Для этого создаем текстовый файл create_resource.txt со следующем содержимым:
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-vol1
spec:
capacity:
storage: 100Gi
accessModes:
— ReadWriteMany
nfs:
# укажите IP-адрес вашей NFS-ноды
server: 195.211.4.109
path: "/export/volume1"
и запускаем команду:
# kubectl apply –f create_resouce.txt
После этого создаем заявку на постоянный том соответствующего размера. Для этого создаем текстовый файл create_request.txt со следующим содержимым:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: ""
resources:
requests:
storage: 100Gi
и запускаем команду:
# kubectl apply –f create_request.txt
Теперь все ноды имеют возможность использовать ваш NFS-том для хранения данных.