Подключить файловое хранилище к кластеру Managed Kubernetes в одном пуле
Если с помощью файлового хранилища нужно увеличить дисковое пространство, мы рекомендуем создавать хранилище в одном пуле с кластером Managed Kubernetes. Если файловое хранилище и кластер Managed Kubernetes находятся в одном пуле, то для подключения хранилища нужно его примонтировать.
Если вы планируете использовать файловое хранилище для хранения бэкапов, для повышения отказоустойчивости мы рекомендуем создавать хранилище и кластер Managed Kubernetes в пулах из разных зон доступности или регионов. Подробнее в инструкции Подключить файловое хранилище к кластеру Managed Kubernetes в другом пуле.
Создать файловое хранилище
В панели управления перейдите в раздел Облачная платформа → Файловое хранилище.
Нажмите Создать хранилище.
Введите новое имя хранилища или оставьте имя, которое создано автоматически.
Выберите пул, в котором расположен кластер Managed Kubernetes. В этом пуле будет создано хранилище.
Выберите подсеть облачной приватной сети. Мы рекомендуем выбирать подсеть, в которой расположены ноды кластера Managed Kubernetes, — так будет автоматически настроена сетевая связность между нодами и хранилищем.
Выберите тип файлового хранилища. Хранилища отличаются скоростью чтения/записи и значениями пропускной способности:
HDD Базовое;
SSD Универсальное;
SSD Быстрое.
После создания тип хранилища нельзя будет изменить.
Укажите размер хранилища: от 50 ГБ до 50 ТБ. После создания можно будет увеличить файловое хранилище, но нельзя уменьшить.
Выберите протокол:
NFSv4 — для подключения хранилища к серверам с операционной системой Linux и другими Unix-системами;
CIFS SMBv3 — для подключения хранилища к серверам с операционной системой Windows.
После создания протокол нельзя будет изменить.
Проверьте стоимость файлового хранилища.
Нажмите Создать.
Примонтировать файловое хранилище к кластеру Managed Kubernetes
Процесс монтирования зависит от протокола файлового хранилища: примонтируйте хранилище по протоколу NFSv4 или CIFS SMBv3.
Примонтировать хранилище по протоколу NFSv4
Создать PersistentVolume
Создайте yaml-файл
filestorage_persistent_volume.yaml
с манифестом для PersistentVolume:apiVersion: v1
kind: PersistentVolume
metadata:
name: pv_name
spec:
storageClassName: storageclass_name
capacity:
storage: <storage_size>
accessModes:
- ReadWriteMany
nfs:
path: /shares/<filestorage_uuid>
server: <filestorage_ip_address>Укажите:
<storage_size>
— размер файлового хранилища в ГБ (размер PersistentVolume), например,100 Gi
. Ограничение — от 50 ГБ до 50 ТБ;<filestorage_uuid>
— ID файлового хранилища. В панели управления в разделе Облачная платформа → Файловое хранилище → в строке нужного хранилища нажмите ;<filestorage_ip_address>
— IP-адрес файлового хранилища. Можно посмотреть в панели управления в разделе Облачная платформа → Файловое хранилище → страница хранилища → вкладка Настройки → поле IP.
Создайте PersistentVolume — примените манифест:
kubectl apply -f filestorage_persistent_volume.yaml
Проверьте, что PersistentVolume создан:
kubectl get pv
Создать PersistentVolumeClaim
Создайте yaml-файл
filestorage_persistent_volume_claim.yaml
с манифестом для PersistentVolumeClaim:apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc_name
spec:
storageClassName: storageclass_name
accessModes:
- ReadWriteMany
resources:
requests:
storage: <storage_size>Укажите
<storage_size>
— размер файлового хранилища в ГБ (размер PersistentVolume), например,100 Gi
. Ограничение — от 50 ГБ до 50 ТБ.Создайте PersistentVolumeClaim — примените манифест:
kubectl apply -f filestorage_persistent_volume_claim.yaml
Проверьте, что PersistentVolumeClaim создан:
kubectl get pvc
Добавить хранилище в контейнер
Создайте yaml-файл
deployment.yaml
с манифестом для Deployment:apiVersion: apps/v1
kind: Deployment
metadata:
name: filestorage_deployment_name
labels:
project: filestorage_deployment_name
spec:
replicas: 2
selector:
matchLabels:
project: filestorage_project_name
template:
metadata:
labels:
project: filestorage_project_name
spec:
volumes:
- name: volume_name
persistentVolumeClaim:
claimName: pvc_name
containers:
- name: container-nginx
image: nginx:stable-alpine
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- name: volume_name
mountPath: <mouth_path>Укажите
<mouth_path>
— путь до папки внутри контейнера, в которую будет примонтировано файловое хранилище.Создайте Deployment — примените манифест:
kubectl apply -f deployment.yaml
Примонтировать хранилище по протоколу CIFS SMBv3
- Установите CSI-драйвер для Samba.
- Создайте секрет для хранения логина и пароля.
- Создайте StorageClass.
- Создайте PersistentVolumeClaim.
- Добавьте файловое хранилище в контейнер.
Установить CSI-драйвер для Samba
Скачайте CSI-драйвер с GitHub Kubernetes CSI.
Установите последнюю версию драйвера:
helm repo add csi-driver-smb https://raw.githubusercontent.com/kubernetes-csi/csi-driver-smb/master/charts
helm install csi-driver-smb csi-driver-smb/csi-driver-smb --namespace kube-system --version v1.4.0Проверьте, что поды установлены и запущены:
kubectl --namespace=kube-system get pods --selector="app=csi-smb-controller"
Создать секрет
Файловое хранилище не поддерживает разграничение прав доступа. Доступ по протоколу CIFS SMBv3 производится под пользователем guest
.
Создайте секрет для хранения логина и пароля (по умолчанию guest/guest
):
kubectl create secret generic smbcreds --from-literal username=guest --from-literal password=guest
Создать StorageClass
Создайте yaml-файл
filestorage_storage_class.yaml
с манифестом для StorageClass:apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: storageclass_name
provisioner: smb.csi.k8s.io
parameters:
source: "//<filestorage_ip_address>/<filestorage_uuid>"
csi.storage.k8s.io/provisioner-secret-name: "smbcreds"
csi.storage.k8s.io/provisioner-secret-namespace: "default"
csi.storage.k8s.io/node-stage-secret-name: "smbcreds"
csi.storage.k8s.io/node-stage-secret-namespace: "default"
reclaimPolicy: Delete
volumeBindingMode: Immediate
mountOptions:
- dir_mode=0777
- file_mode=0777Укажите:
<filestorage_uuid>
— ID файлового хранилища. В панели управления в разделе Облачная платформа → Файловое хранилище → в строке нужного хранилища нажмите ;<filestorage_ip_address>
— IP-адрес файлового хранилища. Можно посмотреть в панели управления в разделе Облачная платформа → Файловое хранилище → страница хранилища → вкладка Настройки → поле IP.
Создайте StorageClass — примените манифест:
kubectl apply -f filestorage_storage_class.yaml
Проверьте, что StorageClass создан:
kubectl get storageclass
Создать PersistentVolumeClaim
Создайте yaml-файл
filestorage_persistent_volume_claim.yaml
с манифестом для PersistentVolumeClaim:apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc_name
annotations:
volume.beta.kubernetes.io/storage-class: smb
spec:
accessModes: ["ReadWriteMany"]
resources:
requests:
storage: <storage_size>Укажите
<storage_size>
— размер файлового хранилища в ГБ (размер PersistentVolume), например,100 Gi
. Ограничение — от 50 ГБ до 50 ТБ.Создайте PersistentVolumeClaim — примените манифест:
kubectl apply -f filestorage_persistent_volume_claim.yaml
Проверьте, что PersistentVolumeClaim создан:
kubectl get pvc
Добавить хранилище в контейнер
Создайте yaml-файл
deployment.yaml
с манифестом для Deployment:apiVersion: apps/v1
kind: Deployment
metadata:
name: filestorage_deployment_name
labels:
project: filestorage_deployment_name
spec:
replicas: 2
selector:
matchLabels:
project: filestorage_project_name
template:
metadata:
labels:
project: filestorage_project_name
spec:
volumes:
- name: volume_name
persistentVolumeClaim:
claimName: pvc_name
containers:
- name: container-nginx
image: nginx:stable-alpine
ports:
- containerPort: 80
name: "http-server"
volumeMounts:
- name: volume_name
mountPath: <mouth_path>Укажите
<mouth_path>
— путь до папки внутри контейнера, в которую будет примонтировано файловое хранилище.Создайте Deployment — примените манифест:
kubectl apply -f deployment.yaml