Connect file storage to a Managed Kubernetes cluster in a different pool
If you plan to use file storage for backing up data, we recommend creating the storage and the Managed Kubernetes cluster in pools from different availability zones or regions to increase fault tolerance. If the file storage and the cluster are in different pools, you must configure private network connectivity at the L3 level via a global router.
-
Connect a network and subnet for a Managed Kubernetes cluster to the global router.
-
Connect a network and subnet for file storage to the global router.
See an example of connecting file storage to a Managed Kubernetes cluster in another pool.
If you need to increase disk space using file storage, we recommend creating the storage in the same pool as the Managed Kubernetes cluster. See more details in the guide Connect file storage to a Managed Kubernetes cluster in one pool.
Example of connecting file storage to a Managed Kubernetes cluster
For example, you need to connect file storage in pool ru-2 to a Managed Kubernetes cluster in pool ru-8.
-
Create a global router.
-
Connect two private networks to the global router —
192.168.0.0/29with gateway192.168.0.1for pool ru-8 and172.16.0.0/29with gateway172.16.0.1for pool ru-2. -
Assign an address from the
192.168.0.0/29subnet to the Managed Kubernetes cluster node, for example192.168.0.2. -
Add a route on the Managed Kubernetes cluster node in pool ru-8 — to the
172.16.0.0/29subnet via gateway192.168.0.1. -
Create file storage in the
172.16.0.0/29subnet. -
Mount the file storage to the Managed Kubernetes cluster.

1. Create a global router
- In the Control panel, in the top menu, click Products and select Global Router.
- Click Create router. A limit of five global routers is set for each account.
- Enter the router name.
- Click Create.
- If the router was created with the status
ERRORor is stuck in one of the statuses, create a ticket.
2. Connect a network and subnet for the Managed Kubernetes cluster to the router
You need to connect a network and subnet to the global router for the project and pool where the Managed Kubernetes cluster is created.
You can connect a new network to the router or an existing network if it is not already connected to any of the account's global routers.
Connect a new network
Connect an existing network
-
In the control panel, on the top menu, click Products and select Global Router.
-
Open the router page → Networks tab.
-
Click Create network.
-
Enter a network name. It will only be used in the control panel.
-
Select the Cloud Platform service.
-
Select the location where the Managed Kubernetes cluster was created.
-
Select the project where the Managed Kubernetes cluster was created.
-
Enter a subnet name. It will only be used in the control panel.
-
Enter the CIDR — the IP address and subnet mask. The subnet must meet the following conditions:
- belong to the RFC 1918 private address range:
10.0.0.0/8,172.16.0.0/12or192.168.0.0/16; - have a size of at least
/29, as three addresses will be occupied by Servercore network equipment; - do not overlap with other subnets added to this router — there must be no identical IP addresses in the subnets of one router;
- if a Managed Kubernetes cluster on cloud servers is included in the global router network, the subnet must not overlap with the
10.10.0.0/16,10.96.0.0/12,10.250.0.0/16and10.251.0.0/24. If a cluster on dedicated servers is included in the network — with the10.10.0.0/16,10.222.0.0/16,10.250.0.0/16,10.251.0.0/24and172.250.0.0/14. These subnets are used for internal Managed Kubernetes addressing; using them may lead to network conflicts in the global router.
- belong to the RFC 1918 private address range:
-
Enter the gateway IP or leave the first address from the subnet that is assigned by default. Do not assign this address to your devices so as not to disrupt network operation.
-
Enter the service IPs or leave the last addresses from the subnet that are assigned by default. Do not assign these addresses to your devices so as not to disrupt network operation.
-
Click Create network.
-
Optional: check the network topology on the global router. In the control panel, on the top menu, click Products and select Global Router. Open the page of the required router and click Network map.
3. Connect a network and subnet for the file storage to the router
You need to connect a network and subnet to the global router for the project and pool where the file storage will be created later.
You can connect a new network to the router or an existing network if it is not already connected to any of the account's global routers.
Connect a new network
Connect an existing network
-
In the control panel, on the top menu, click Products and select Global Router.
-
Open the router page → Networks.
-
Click Create network.
-
Enter a network name. It will only be used in the control panel.
-
Select the Cloud Platform service.
-
Select the location where the file storage will be created.
-
Select the project in which the file storage will be created.
-
Enter a subnet name. It will only be used in the control panel.
-
Enter the CIDR — the IP address and subnet mask. The subnet must meet the following conditions:
- belong to the RFC 1918 private address range:
10.0.0.0/8,172.16.0.0/12or192.168.0.0/16; - have a size of at least
/29, as three addresses will be occupied by Servercore network equipment; - do not overlap with other subnets added to this router — there must be no identical IP addresses in the subnets of one router;
- if a Managed Kubernetes cluster on cloud servers is included in the global router network, the subnet must not overlap with the
10.10.0.0/16,10.96.0.0/12,10.250.0.0/16and10.251.0.0/24. If a cluster on dedicated servers is included in the network — with the10.10.0.0/16,10.222.0.0/16,10.250.0.0/16,10.251.0.0/24and172.250.0.0/14. These subnets are used for internal Managed Kubernetes addressing; using them may lead to network conflicts in the global router.
- belong to the RFC 1918 private address range:
-
Enter the gateway IP or leave the first address from the subnet that is assigned by default. Do not assign this address to your devices so as not to disrupt network operation.
-
Enter the service IPs or leave the last addresses from the subnet that are assigned by default. Do not assign these addresses to your devices so as not to disrupt network operation.
-
Click Create network.
-
Optional: check the network topology on the global router. In the control panel, on the top menu, click Products and select Global Router. Open the router page and click Network map.
4. Assign an IP address to a Managed Kubernetes cluster node
Configure a local port on the Managed Kubernetes cluster node that is included in the global router network. Assign an IP address to the port from the subnet that you connected to the global router in step 2.
-
Add the Managed Kubernetes cluster node to the subnet that you connected to the global router in step 2. If you do not have a Managed Kubernetes cluster yet, create one. When creating the cluster, select the subnet you connected to the global router in step 2.
-
Apply changes depending on the Apply changes parameter in the Port settings block. You can check the parameter value in the Control panel: in the top menu Products → Cloud Servers → cloud server page → Ports:
- Upon server reboot — reboot the node programmatically or manually make changes to the network configuration file on the node;
- Manually in the network configuration file on the server — manually make changes to the network configuration file on the node.
5. Add a route on the Managed Kubernetes cluster node
You need to add a static route to the file storage on each cluster node. To do this, in the Managed Kubernetes cluster subnet that you connected to the global router in step 2, add a static route to the file storage subnet that you connected to the global router in step 3.
Use the Configure static routes in a subnet section of the Static Routes guide.
6. Add a route in the file storage subnet
In the file storage subnet that you connected to the global router in step 3, you need to add a static route to the Managed Kubernetes cluster subnet that you connected to the global router in step 2.
Use the Configure static routes in a subnet section of the Static Routes guide.
7. Create file storage
Control panel
OpenStack CLI
Terraform
-
In the Control panel, on the top menu, click Products and select File Storage.
-
Click Create Storage.
-
Enter a storage name or leave the name that is automatically created.
-
Select a location where the storage will be created.
If you need to increase the disk space of a cloud server or Managed Kubernetes cluster using file storage, select the location where the server or cluster is located. To increase the disk space of dedicated servers, file storage can be created in any location.
If you plan to use storage for backups, we recommend choosing a location different from the main infrastructure location to improve fault tolerance.
-
Fill in the blocks:
-
Check the price of the file storage.
-
Click Create.
Subnet
-
Select a private subnet for the file storage that you connected to the global router in step 3. You will not be able to change the subnet after the storage is created.
-
Enter a private IP address for the storage or leave the first available address from the subnet, which is assigned by default. You will not be able to change the IP address after the storage is created.
Settings
-
Select a file storage type:
- HDD Basic,
- SSD Universal,
- SSD Fast.
Once created, the storage type cannot be changed.
-
Specify the storage size: from 50 GB to 50 TB. After creation, you can increase file storage, but you cannot decrease it.
-
Select a protocol:
- NFSv4 — for connecting storage to servers running Linux and other Unix systems;
- CIFS SMBv3 — for connecting storage to Windows servers.
Once created, the protocol cannot be changed.
Access rules
NFSv4
CIFS SMBv3
-
Configure access rules for the file storage:
- accessible by everyone — the storage will be accessible from any IP address in the private subnet where it is created;
- access restricted — the storage will be accessible only to specific IP addresses or private subnets. If you create file storage without rules, access will be restricted for all IP addresses.
-
If you selected the Access restricted option, click Add rule.
-
Enter the IP address or CIDR of the private subnet and select the access level.
After the storage is created, you can configure new access rules.
8. Mount the file storage to the Managed Kubernetes cluster
The mounting process depends on the file storage protocol: NFSv4 or CIFS SMBv3.
NFSv4
CIFS SMBv3
1. Create a PersistentVolume
-
Create a yaml file with a manifest for the PersistentVolume object:
apiVersion: v1kind: PersistentVolumemetadata:name: pv_namespec:storageClassName: storageclass_namecapacity:storage: <storage_size>accessModes:- ReadWriteManynfs:path: /shares/share-<mountpoint_uuid>server: <filestorage_ip_address>Specify:
<storage_size>— PersistentVolume size in GB (file storage size), for example100 Gi. The limit is from 50 GB to 50 TB;<mountpoint_uuid>— mount point ID. You can view it in the control panel: from the top menu, click Products → File Storage → storage page → block Connection → tab GNU/Linux;<filestorage_ip_address>— file storage IP address. You can view it in the control panel: from the top menu, click Products → File Storage → storage page → tab Settings → field IP.
-
Apply the manifest:
kubectl apply -f <persistent_volume.yaml>Specify
<persistent_volume.yaml>— the name of the yaml file with the manifest to create the PersistentVolume. -
Make sure the PersistentVolume object is created:
kubectl get pv
2. Create a PersistentVolumeClaim
-
Create a yaml file with a manifest for the PersistentVolumeClaim object:
apiVersion: v1kind: PersistentVolumeClaimmetadata:name: pvc_namespec:storageClassName: storageclass_nameaccessModes:- ReadWriteManyresources:requests:storage: <storage_size>Specify
<storage_size>— PersistentVolume (file storage) size in GB, for example100 Gi. The limit is from 50 GB to 50 TB. -
Apply the manifest:
kubectl apply -f <persistent_volume_claim.yaml>Specify
<persistent_volume_claim.yaml>— the name of the yaml file with the manifest to create the PersistentVolumeClaim. -
Make sure the PersistentVolumeClaim object is created:
kubectl get pvc
3. Add storage to the container
-
Create a yaml file with a manifest for the Deployment object:
apiVersion: apps/v1kind: Deploymentmetadata:name: filestorage_deployment_namelabels:project: filestorage_deployment_namespec:replicas: 2selector:matchLabels:project: filestorage_project_nametemplate:metadata:labels:project: filestorage_project_namespec:volumes:- name: volume_namepersistentVolumeClaim:claimName: pvc_namecontainers:- name: container-nginximage: nginx:stable-alpineports:- containerPort: 80name: "http-server"volumeMounts:- name: volume_namemountPath: <mount_path>Specify
<mount_path>— the path to the folder inside the container where the file storage will be mounted. -
Apply the manifest:
kubectl apply -f <deployment.yaml>Specify
<deployment.yaml>— the name of the yaml file with the manifest to create the Deployment.