Подключить файловое хранилище к кластеру Managed Kubernetes в другом пуле
Если вы планируете использовать файловое хранилище для хранения бэкапов, для повышения отказоустойчивости мы рекомендуем создавать хранилище и кластер Managed Kubernetes в пулах из разных зон доступности или регионов. Если файловое хранилище и кластер Managed Kubernetes находятся в разных пулах, то для подключения хранилища нужно настроить приватную сетевую связность на уровне L3 через глобальный роутер.
- Создайте глобальный роутер.
- Создайте на глобальном роутере сеть и подсеть для кластера Managed Kubernetes.
- Создайте на глобальном роутере сеть и подсеть для файлового хранилища.
- Назначьте IP-адрес на ноде кластера Managed Kubernetes.
- Пропишите маршруты на ноде кластера Managed Kubernetes. Добавить маршруты можно только через техническую поддержку.
- Создайте файловое хранилище.
- Примонтируйте файловое хранилище к кластеру Managed Kubernetes.
Посмотрите пример подключения файлового хранилища к кластеру Managed Kubernetes в другом пуле.
Если с помощью файлового хранилища нужно увеличить дисковое пространство, мы рекомендуем создавать хранилище в одном пуле с кластером Managed Kubernetes. Подробнее в инструкции Подключить файловое хранилище к кластеру Managed Kubernetes в одном пуле.
Пример подключения файлового хранилища к кластеру Managed Kubernetes
Например, нужно подключить файловое хранилище в пуле ru-2 к кластеру Managed Kubernetes в пуле ru-8.
- Создайте глобальный роутер.
- Создайте две приватные подсети глобального роутера —
192.168.0.0/24
для пула ru-8 и10.10.0.0/24
для пула ru-2. - Назначьте адрес из подсети
192.168.0.0/24
на ноду кластера Managed Kubernetes, например,192.168.0.2
. - Пропишите маршруты на ноде кластера Managed Kubernetes в пуле ru-8 — в подсеть
10.10.0.0/24
через шлюз192.168.0.1
. - Создайте файловое хранилище в подсети
10.10.0.0/24
. - Примонтируйте файловое хранилище к кластеру Managed Kubernetes.
Создать глобальный роутер
- В панели управления перейдите в раздел Сетевые сервисы → Глобальный роутер Selectel.
- Нажмите Создать роутер. Для каждого аккаунта установлен лимит в пять глобальных роутеров.
- Введите имя роутера.
- Нажмите Создать.
- Если роутер создался со статусом ERROR или завис в одном из статусов, создайте тикет.
Создать сеть и подсеть для кластера Managed Kubernetes
Нужно создать сеть и подсеть глобального роутера до того проекта и пула облачной платформы, в которых создан кластер Managed Kubernetes.
В панели управления перейдите в раздел Сетевые сервисы → Глобальный роутер Selectel.
Откройте страницу роутера → вкладка Сети.
Нажмите Создать сеть.
Введите имя сети, оно будет использоваться только в панели управления.
Выберите услугу Облачная платформа.
Выберите пул, в котором создан кластер Managed Kubernetes.
Выберите проект облачной платформы, в котором создан кластер Managed Kubernetes.
Введите имя подсети — оно будет использоваться только в панели управления.
Введите CIDR — IP-адрес и маску подсети. В форме можно ввести только новую подсеть. Если нужно добавить существующую подсеть, проверьте, что она еще не добавлена на любой из глобальных роутеров в аккаунте, и создайте тикет. Подсеть должна соответствовать условиям:
- принадлежать диапазону приватных адресов по RFC 1918:
10.0.0.0/8
,172.16.0.0/12
или192.168.0.0/16
. - если в сеть глобального роутера будут включены ноды Managed Kubernetes, подсеть не должна пересекаться с диапазонами
10.250.0.0/16
,10.10.0.0/16
и10.96.0.0/12
. Эти подсети участвуют во внутренней адресации Managed Kubernetes, их использование может привести к конфликтам в сети глобального роутера; - иметь размер не меньше /29, так как три адреса будут заняты сетевым оборудованием Selectel;
- не пересекаться с другими подсетями, добавленными на этот роутер: доступные IP-адреса каждой подсети на роутере не должны совпадать с IP-адресами других подсетей на нем.
- принадлежать диапазону приватных адресов по RFC 1918:
Введите IP шлюза или оставьте первый адрес из подсети, который назначается по умолчанию. Не назначайте этот адрес на свои устройства, чтобы не нарушить работу сети.
Введите служебные IP или оставьте последние адреса из подсети, которые назначаются по умолчанию. Не назначайте эти адреса на свои устройства, чтобы не нарушить работу сети.
Нажмите Создать сеть.
Опционально: проверьте топологию сети на глобальном роутере. В панели управления перейдите в раздел Сетевые сервисы → Глобальный роутер Selectel → откройте страницу роутера → нажмите Карта сети.
Создать сеть и подсеть для файлового хранилища
Нужно создать сеть и подсеть глобального роутера до того проекта и пула облачной платформы, в котором в дальнейшем будет создано файловое хранилище.
В панели управления перейдите в раздел Сетевые сервисы → Глобальный роутер Selectel.
Откройте страницу роутера → вкладка Сети.
Нажмите Создать сеть.
Введите имя сети, оно будет использоваться только в панели управления.
Выберите услугу Облачная платформа.
Выберите пул, в котором будет создано файловое хранилище.
Выберите проект облачной платформы, в котором будет создано файловое хранилище.
Введите имя подсети — оно будет использоваться только в панели управления.
Введите CIDR — IP-адрес и маску подсети. В форме можно ввести только новую подсеть. Если нужно добавить существующую подсеть, проверьте, что она еще не добавлена на любой из глобальных роутеров в аккаунте, и создайте тикет. Подсеть должна соответствовать условиям:
- принадлежать диапазону приватных адресов по RFC 1918:
10.0.0.0/8
,172.16.0.0/12
или192.168.0.0/16
. - не пересекаться с диапазонами
10.250.0.0/16
,10.10.0.0/16
и10.96.0.0/12
. Эти подсети участвуют во внутренней адресации Managed Kubernetes, их использование может привести к конфликтам в сети глобального роутера; - иметь размер не меньше /29, так как три адреса будут заняты сетевым оборудованием Selectel;
- не пересекаться с другими подсетями, добавленными на этот роутер: доступные IP-адреса каждой подсети на роутере не должны совпадать с IP-адресами других подсетей на нем.
- принадлежать диапазону приватных адресов по RFC 1918:
Введите IP шлюза или оставьте первый адрес из подсети, который назначается по умолчанию. Не назначайте этот адрес на свои устройства, чтобы не нарушить работу сети.
Введите служебные IP или оставьте последние адреса из подсети, которые назначаются по умолчанию. Не назначайте эти адреса на свои устройства, чтобы не нарушить работу сети.
Нажмите Создать сеть.
Опционально: проверьте топологию сети на глобальном роутере. В панели управления перейдите в раздел Сетевые сервисы → Глобальный роутер Selectel → откройте страницу роутера → нажмите Карта сети.
Назначить IP-адрес на ноде кластера Managed Kubernetes
Настройте локальный порт на ноде кластера Managed Kubernetes, которые включается в сеть глобального роутера. На порт назначьте IP-адрес из подсети, которую вы создали на глобальном роутере для соответствующего пула.
Добавьте ноду кластера Managed Kubernetes в созданную подсеть глобального роутера. Если у вас еще нет кластера Managed Kubernetes, создайте его. При создании в качестве подсети выберите подсеть глобального роутера.
Примените изменения в зависимости от параметра Применять изменения в блоке Настройка портов. Значение параметра можно посмотреть в панели управления в разделе Облачная платформа → Серверы → страница облачного сервера:
- При перезагрузке сервера — программно перезагрузите ноду или вручную внесите изменения в файле конфигурации сети на ноде;
- Вручную в файле конфигурации сети на сервере — вручную внесите изменения в файле конфигурации сети на ноде.
Прописать маршруты на ноде кластера Managed Kubernetes
Если вы создали новый кластер Managed Kubernetes и добавили ноду в существующую сеть глобального роутера, маршруты прописывать не нужно. В этом случае нода будет сразу доступна для других устройств в сети.
Если вы добавляете в сеть глобального роутера существующую ноду, на ней необходимо прописать статические маршруты до всех подсетей, с которыми нужна связность. Для этого создайте тикет.
Создать файловое хранилище
В панели управления перейдите в раздел Облачная платформа → Файловое хранилище.
Нажмите Создать хранилище.
Введите новое имя хранилища или оставьте имя, которое создано автоматически.
Выберите пул, в котором будет расположено хранилище.
Выберите подсеть приватной сети глобального роутера Selectel, которую вы создали для файлового хранилища.
Выберите тип файлового хранилища. Хранилища отличаются скоростью чтения/записи и значениями пропускной способности:
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