Подключить файловое хранилище к кластеру Managed Kubernetes в другом пуле
Если вы планируете использовать файловое хранилище для хранения бэкапов, для повышения отказоустойчивости мы рекомендуем создавать хранилище и кластер Managed Kubernetes в пулах из разных зон доступности или регионов. Если файловое хранилище и кластер Managed Kubernetes находятся в разных пулах, то для подключения хранилища нужно настроить приватную сетевую связность на уровне L3 через глобальный роутер.
-
Подключите к глобальному роутеру сеть и подсеть для кластера Managed Kubernetes.
-
Подключите к глобальному роутеру сеть и подсеть для файлового хранилища.
-
Пропишите маршруты на ноде кластера Managed Kubernetes. Добавить маршруты можно только через техническую поддержку.
-
Примонтируйте файловое хранилище к кластеру Managed Kubernetes.
Посмотрите пример подключения файлового хранилища к кластеру Managed Kubernetes в другом пуле.
Если с помощью файлового хранилища нужно увеличить дисковое пространство, мы рекомендуем создавать хранилище в одном пуле с кластером Managed Kubernetes. Подробнее в инструкции Подключить файловое хранилище к кластеру Managed Kubernetes в одном пуле.
Пример подключения файлового хранилища к кластеру Managed Kubernetes
Например, нужно подключить файловое хранилище в пуле ru-2 к кластеру Managed Kubernetes в пуле ru-8.
-
Создайте глобальный роутер.
-
Подключите к глобальному роутеру две приватные сети —
192.168.0.0/29
с шлюзом192.168.0.1
для пула ru-8 и172.16.0.0/29
с шлюзом172.16.0.1
для пула ru-2. -
Назначьте адрес из подсети
192.168.0.0/29
на ноду кластера Managed Kubernetes, например192.168.0.2
. -
Пропишите маршрут на ноде кластера Managed Kubernetes в пуле ru-8 — в подсеть
172.16.0.0/29
через шлюз192.168.0.1
. -
Создайте файловое хранилище в подсети
172.16.0.0/29
. -
Примонтируйте файловое хранилище к кластеру Managed Kubernetes.


1. Создать глобальный роутер
- В панели управления в верхнем меню нажмите Продукты и выберите Глобальный роутер.
- Нажмите Создать роутер. Для каждого аккаунта установлен лимит в пять глобальных роутеров.
- Введите имя роутера.
- Нажмите Создать.
- Если роутер создался со статусом ERROR или завис в одном из статусов, создайте тикет.
2. Подключить к роутеру сеть и подсеть для кластера Managed Kubernetes
Если сеть облачной платформы подключена к глобальному роутеру, вы можете управлять ей только на странице глобального роутера.
Нужно создать сеть и подсеть глобального роутера до того проекта и пула облачной платформы, в которых создан кластер Managed Kubernetes.
Вы можете подключить к роутеру новую сеть или существующую сеть, если она еще не подключена к любому из глобальных роутеров аккаунта.
Подключить новую сеть
Подключить существующую сеть
-
В панели управления в верхнем меню нажмите Продукты и выберите Глобальный роутер.
-
Откройте страницу роутера → вкладка Сети.
-
Нажмите Создать сеть.
-
Введите имя сети, оно будет использоваться только в панели управления.
-
Выберите услугу Облачная платформа.
-
Выберите пул, в котором создан кластер Managed Kubernetes.
-
Выберите проект, в котором создан кластер Managed Kubernetes.
-
Введите имя подсети — оно будет использоваться только в панели управления.
-
Введите CIDR — IP-адрес и маску подсети. Подсеть должна соответствовать условиям:
- принадлежать диапазону приватных адресов по RFC 1918:
10.0.0.0/8
,172.16.0.0/12
или192.168.0.0/16
; - иметь размер не меньше /29, так как три адреса будут заняты сетевым оборудованием Servercore;
- не пересекаться с другими подсетями, добавленными на этот роутер: IP-адреса каждой подсети на роутере не должны совпадать с IP-адресами других подсетей на нем;
- если в сеть глобального роутера будут включены ноды Managed Kubernetes, подсеть не должна пересекаться с диапазонами
10.250.0.0/16
,10.10.0.0/16
и10.96.0.0/12
. Эти подсети участвуют во внутренней адресации Managed Kubernetes, их использование может привести к конфликтам в сети глобального роутера.
- принадлежать диапазону приватных адресов по RFC 1918:
-
Введите IP шлюза или оставьте первый адрес из подсети, который назначается по умолчанию. Не назначайте этот адрес на свои устройства, чтобы не нарушить работу сети.
-
Введите служебные IP или оставьте последние адреса из подсети, которые назначаются по умолчанию. Не назначайте эти адреса на свои устройства, чтобы не нарушить работу сети.
-
Нажмите Создать сеть.
-
Опционально: проверьте топологию сети на глобальном роутере. В панели управления в верхнем меню нажмите Продукты и выберите Глобальный роутер. Откройте страницу нужного роутера и нажмите Карта сети.
-
Проверьте, что сеть еще не добавлена на любой из глобальных роутеров аккаунта. В панели управления в верхнем меню нажмите Продукты → Облачные серверы → Сеть → вкладка Приватные сети → проверьте, что в карточке сети нет тега Глобальный роутер.
-
Убедитесь, что подсеть соответствует условиям:
- принадлежать диапазону приватных адресов по RFC 1918:
10.0.0.0/8
,172.16.0.0/12
или192.168.0.0/16
; - иметь размер не меньше /29, так как три адреса будут заняты сетевым оборудованием Servercore;
- не пересекаться с другими подсетями, добавленными на этот роутер: IP-адреса каждой подсети на роутере не должны совпадать с IP-адресами других подсетей на нем;
- если в сеть глобального роутера будут включены ноды Managed Kubernetes, подсеть не должна пересекаться с диапазонами
10.250.0.0/16
,10.10.0.0/16
и10.96.0.0/12
. Эти подсети участвуют во внутренней адресации Managed Kubernetes, их использование может привести к конфликтам в сети глобального роутера.
- принадлежать диапазону приватных адресов по RFC 1918:
-
В панели управления в верхнем меню нажмите Продукты и выберите Облачные серверы.
-
Перейдите в раздел Сеть → вкладка Приватные сети.
-
В меню сети выберите Подключить к глобальному роутеру.
-
Выберите глобальный роутер.
-
Для каждой из подсетей сети введите IP-адрес, который будет назначен на роутер, или оставьте первый свободный адрес из подсети, который назначается по умолчанию. Не назначайте этот адрес на свои устройства, чтобы не нарушить работу сети. Два последних свободных адреса подсети будут зарезервированы в качестве служебных.
-
Нажмите Подключить. Не закрывайте окно, пока не появится сообщени е о том, что сеть подключена. После этого в панели управления:
- сеть появится в разделе Глобальный роутер Servercore на странице роутера, к которому вы ее подключили. Можно посмотреть в панели управления: в верхнем меню нажмите Продукты → Глобальный роутер → страница роутера;
- у сети появится тег Глобальный роутер. Можно посмотреть в панели управления: в верхнем меню нажмите Продукты → Облачные серверы → страница облачного сервера → раздел Сеть → карточка сети.
3. Подключить к роутеру сеть и подсеть для файлового хранилища
Если сеть облачной платформы подключена к глобальному роутеру, вы можете управлять ей только на странице глобального роутера.
Нужно создать сеть и подсеть глобального роутера до того проекта и пула облачной платформы, в котором в дальнейшем будет создано файловое хранилище.
Вы можете подключить к роутеру новую сеть или существующую сеть, если она еще не подключена к любому из глобальных роутеров аккаунта.
Подключить новую сеть
Подключить существующую сеть
-
В панели управления в верхнем меню нажмите Продукты и выберите Глобальный роутер.
-
Откройте страницу роутера → вкладка Сети.
-
Нажмите Создать сеть.
-
Введите имя сети, оно будет использоваться только в панели управления.
-
Выберите услугу Облачная пла тформа.
-
Выберите пул, в котором будет создано файловое хранилище.
-
Выберите проект, в котором будет создано файловое хранилище.
-
Введите имя подсети — оно будет использоваться только в панели управления.
-
Введите CIDR — IP-адрес и маску подсети. Подсеть должна соответствовать условиям:
- принадлежать диапазону приватных адресов по RFC 1918:
10.0.0.0/8
,172.16.0.0/12
или192.168.0.0/16
; - иметь размер не меньше /29, так как три адреса будут заняты сетевым оборудованием Servercore;
- не пересекаться с другими подсетями, добавленными на этот роутер: IP-адреса каждой подсети на роутере не должны совпадать с IP-адресами других подсетей на нем;
- если в сеть глобального роутера будут включены ноды Managed Kubernetes, подсеть не должна пересекаться с диапазонами
10.250.0.0/16
,10.10.0.0/16
и10.96.0.0/12
. Эти подсети участвуют во внутренней адресации Managed Kubernetes, их использование может привести к конфликтам в сети глобального роутера.
- принадлежать диапазону приватных адресов по RFC 1918:
-
Введите IP шлюза или оставьте первый адрес из подсети, который назначается по умолчанию. Не назначайте этот адрес на свои устройства, чтобы не нарушить работу сети.
-
Введите служебные IP или оставьте последние адреса из подсети, которые назначаются по умолчанию. Не назначайте эти адреса на свои устройства, чтобы не нарушить работу сети.
-
Нажмите Создать сеть.
-
Опционально: проверьте топологию сети на глобальном роутере. В панели управления в верхнем меню нажмите Продукты и выберите Глобальный роутер. Откройте страницу роутера и нажмите Карта сети.
-
Проверьте, что сеть еще не добавлена на любой из глобальных роутеров аккаунта. В панели управления в верхнем меню нажмите Продукты → Облачные серверы → Сеть → вкладка Приватные сети → проверьте, что в карточке сети нет тега Глобальный роутер.
-
Убедитесь, что подсеть соответствует условиям:
- принадлежит диапазону приватных адресов по RFC 1918:
10.0.0.0/8
,172.16.0.0/12
или192.168.0.0/16
; - имеет размер не меньше /29, так как три адреса будут заняты сетевым оборудованием Servercore;
- не пересекается с другими подсетями, добавленными на этот роутер: IP-адреса каждой подсети на роутере не должны совпадать с IP-адресами других подсетей на нем;
- если в сеть глобального роутера будут включены ноды Managed Kubernetes, подсеть не должна пересекаться с диапазонами
10.250.0.0/16
,10.10.0.0/16
и10.96.0.0/12
. Эти подсети участвуют во внутренней адресации Managed Kubernetes, их использование может привести к конфликтам в сети глобального роутера.
- принадлежит диапазону приватных адресов по RFC 1918:
-
В панели управления в верхнем меню нажмите Продукты и выберите Облачные серверы.
-
Перейдите в раздел Сеть → вкладка Приватные сети.
-
В меню сети выберите Подключить к глобальному роутеру.
-
Выберите глобальный роутер.
-
Для каждой из подсетей введите IP шлюза или оставьте первый свободный адрес из подсети, который назначается по умолчанию. Не назначайте этот адрес на свои устройства, чтобы не нарушить работу сети. Два последних свободных адреса подсети будут зарезервированы в качестве служебных.
-
Нажмите Подключить. Не закрывайте окно, пока не появится сообщение о том, что сеть подключена. После этого в панели управления:
- сеть появится в разделе Глобальный роутер Servercore на странице роутера, к которому вы ее подключили. Можно посмотреть в панели управления: в верхнем меню нажмите Продукты → Глобальный роутер → страница роутера;
- у сети появится тег Глобальный роутер. Можно посмотреть в панели управления: в верхнем меню нажмите Продукты → Облачные серверы → страница облачного сервера → раздел Сеть → карточка сети.
4. Назначить IP-адрес на ноде кластера Managed Kubernetes
Настройте локальный порт на ноде кластера Managed Kubernetes, которые включается в сеть глобального роутера. На порт назначьте IP-адрес из подсети, которую вы создали на глобальном роутере для соответствующего пула.
-
Добавьте ноду кластера Managed Kubernetes в созданную подсеть глобального роутера. Если у вас еще нет кластера Managed Kubernetes, создайте его. При создании в качестве подсети выберите подсеть глобального роутера.
-
Примените изменения в зависимости от параметра Применять изменения в блоке Настройка портов. Значение параметра можно посмотреть в панели управления: в верхнем меню Продукты → Облачные серверы → страница облачного сервера → вкладка Порты:
- При перезагрузке сервера — программно перезагрузите ноду или вручную внесите изменения в файле конфигурации сети на ноде;
- Вручную в файле конфигурации сети на сервере — вручную внесите изменения в файле конфигурации сети на ноде.
5. Прописать маршруты на ноде кластера Managed Kubernetes
Если вы создали новый кластер Managed Kubernetes и добавили ноду в существующую сеть глобального роутера, маршруты прописывать не нужно. В этом случае нода будет сразу доступна для других устройств в сети.
Если вы добавляете в сеть глобального роутера существующую ноду, на ней необходимо прописать статические маршруты до всех подсетей, с которыми нужна связность. Для этого создайте тикет.
6. Создать файловое хранилище
Панель управления
Terraform
-
В панели управления в верхнем меню нажмите Продукты и выберите Файловое хранилище.
-
Нажмите Создать хранилище.
-
Введите новое имя хранилища или оставьте имя, которое создано автоматически.
-
Выберите регион и сегмент пула, в котором будет создано хранилище.
Если с помощью файлового хранилища нужно увеличить дисковое пространство, выберите сегмент пула из пула, в котором расположен облачный сервер или кластер Managed Kubernetes.
Если вы планируете использовать хранилище для хранения бэкапов, мы рекомендуем выбрать сегмент пула из другой зоны доступности или региона для повышения отказоустойчивости.
-
Заполните блоки:
-
Проверьте цену файлового хранилища.
-
Нажмите Создать.
Подсеть
-
Выберите приватную подсеть, в которой будет находиться хранилище. Тип подсети зависит от того, к чему нужно подключить хранилище:
- облачная приватная подсеть — хранилище будет доступно для облачных серверов и кластеров Managed Kubernetes только в том пуле, который вы выбрали на предыдущем шаге. Для подключения хранилища нужно будет только примонтировать его;
- подсеть глобального роутера — хранилище будет доступно для выделенных серверов, а также облачных серверов и кластеров Managed Kubernetes, которые находятся в других пулах. Для подключения хранилища нужно настроить сетевую связность между сервером или кластером и хранилищем через глобальный роутер. Посмотрите примеры настройки сетевой связности в инструкциях раздела Подключить файловое хранилище.
После создания хранилища подсеть нельзя будет изменить.
-
Введите приватный IP-адрес хранилища или оставьте первый доступный адрес из подсети, который назначается по умолчанию. После создания хранилища IP-адрес нельзя будет изменить.
Настройки
-
Выберите тип файлового хранилища:
- HDD Базовое
- SSD Универсальное
- SSD Быстрое
После создания тип хранилища нельзя будет изменить.
-
Укажите размер хранилища: от 50 ГБ до 50 ТБ. После создания можно будет увеличить файловое хранилище, но нельзя уменьшить.
-
Выберите протокол:
- NFSv4 — для подключения хранилища к серверам с операционной системой Linux и другими Unix-системами;
- CIFS SMBv3 — для подключения хранилища к серверам с операционной системой Windows.
После создания хранилища протокол нельзя будет изменить.
Правила доступа
NFSv4
CIFS SMBv3
-
Настройте правила доступа к файловому хранилищу:
- доступно всем — хранилище будет доступно для любого IP-адреса приватной подсети, в которой оно создается;
- доступ ограничен — хранилище будет доступно только для определенных IP-адресов или приватных подсетей. Если создать файловое хранилище без правил, доступ будет ограничен для всех IP-адресов.
-
Если вы выбрали опцию Доступ ограничен, нажмите Добавить правило.
-
Введите IP-адрес или CIDR приватной подсети, выберите уровень доступа.
После создания хранилища можно изменить правила доступа, для этого можно настроить новые правила доступа.
-
Настройте правила доступа к файловому хранилищу:
- доступно всем — хранилище будет доступно для любого IP-адреса приватной подсети, в которой оно создается;
- доступ ограничен — хранилище будет доступно только для определенных IP-адресов или приватных подсетей. Если создать файловое хранилище без правил, доступ будет ограничен для всех IP-адресов.
-
Если вы выбрали опцию Доступ ограничен, нажмите Добавить правило.
-
Введите IP-адрес или CIDR приватной подсети.
После создания хранилища можно изменить правила доступа, для этого можно настроить новые правила доступа.
Используйте инструкцию Создать файловое хранилище в документации Terraform.
7. Примонтировать файловое хранилище к кластеру Managed Kubernetes
Процесс монтирования зависит от протокола файлового хранилища: NFSv4 или CIFS SMBv3.
NFSv4
CIFS SMBv3
1. Создать PersistentVolume
-
Создайте yaml-файл с манифестом для объекта PersistentVolume:
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv_name
spec:
storageClassName: storageclass_name
capacity:
storage: <storage_size>
accessModes:
- ReadWriteMany
nfs:
path: /shares/share-<mountpoint_uuid>
server: <filestorage_ip_address>Укажите:
<storage_size>
— размер PersistentVolume в ГБ (размер файлового хранилища), например100 Gi
. Ограничение — от 50 ГБ до 50 ТБ;<mountpoint_uuid>
— ID точки монтирования. Можно посмотреть в панели управления: в верхнем меню нажмите Продукты → Файловое хранилище → страница хранилища → блок Подключение → вкладка GNU/Linux;<filestorage_ip_address>
— IP-адрес файлового хранилища. Можно посмотреть в панели управления: в верхнем меню нажмите Продукты → Файловое хранилище → страница хранилища → вкладка Настройки → поле IP.
-
Примените манифест:
kubectl apply -f <persistent_volume.yaml>
Укажите
<persistent_volume.yaml>
— имя yaml-файла с манифестом для создания PersistentVolume. -
Убедитесь, что создан объект PersistentVolume:
kubectl get pv
2. Создать PersistentVolumeClaim
-
Создайте 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 ТБ. -
Примените манифест:
kubectl apply -f <persistent_volume_claim.yaml>
Укажите
<persistent_volume_claim.yaml>
— имя yaml-файла с манифестом для создания PersistentVolumeClaim. -
Убедитесь, что создан объект PersistentVolumeClaim:
kubectl get pvc
3. Добавить хранилище в контейнер
-
Создайте 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: <mount_path>Укажите
<mount_path>
— путь до папки внутри контейнера, в которую будет примонтировано файловое хранилище. -
Примените манифест:
kubectl apply -f <deployment.yaml>
Укажите
<deployment.yaml>
— имя yaml-файла с манифестом для создания Deployment.
- Установите CSI-драйвер для Samba.
- Создайте секрет для хранения логина и пароля.
- Создайте StorageClass.
- Создайте PersistentVolumeClaim.
- Добавьте файловое хранилище в контейнер.
1. Установить 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"
2. Создать секрет
Файловое хранилище не поддерживает разграничение прав доступа. Доступ по протоколу CIFS SMBv3 производится под пользователем guest
.
Создайте секрет для хранения логина и пароля (по умолчанию guest/guest
):
kubectl create secret generic smbcreds --from-literal username=guest --from-literal password=guest
3. Создать StorageClass
-
Создайте yaml-файл с манифестом для объекта StorageClass:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: storageclass_name
provisioner: smb.csi.k8s.io
parameters:
source: "//<filestorage_ip_address>/share-<mountpoint_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Укажите:
<mountpoint_uuid>
— ID точки монтирования. Можно посмотреть в панели управления: в верхнем меню нажмите Продукты → Файловое хранилище → страница хранилища → блок Подключение → вкладка GNU/Linux;<filestorage_ip_address>
— IP-адрес файлового хранилища. Можно посмотреть в панели управления: в верхнем меню нажмите Продукты → Файловое хранилище → страница хранилища → вкладка Настройки → поле IP.
-
Примените манифест:
kubectl apply -f <storage_class.yaml>
Укажите
<storage_class.yaml>
— имя yaml-файла с манифестом для создания StorageClass. -
Убедитесь, что объект StorageClass создан:
kubectl get storageclass
4. Создать PersistentVolumeClaim
-
Создайте 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 ТБ. -
Примените манифест:
kubectl apply -f <persistent_volume_claim.yaml>
Укажите
<persistent_volume_claim.yaml>
— имя yaml-файла с манифестом для создания PersistentVolumeClaim. -
Убедитесь, что объект PersistentVolumeClaim создан:
kubectl get pvc
5. Добавить хранилище в контейнер
-
Создайте 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: <mount_path>Укажите
<mount_path>
— путь до папки внутри контейнера, в которую будет примонтировано файловое хранилище. -
Примените манифест:
kubectl apply -f <deployment.yaml>
Укажите
<deployment.yaml>
— имя yaml-файла с манифестом для создания Deployment.