Skip to main content

Connect file storage to a Managed Kubernetes cluster in a different pool

Last update:

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.

  1. Create a global router.

  2. Connect a network and subnet for a Managed Kubernetes cluster to the global router.

  3. Connect a network and subnet for the file storage to the global router.

  4. Assign an IP address to a Managed Kubernetes cluster node.

  5. Add a route on the Managed Kubernetes cluster node.

  6. Add a route in the file storage subnet.

  7. Create file storage.

  8. Mount the file storage to the Managed Kubernetes cluster.

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.

  1. Create a global router.

  2. Connect two private networks to the global router — 192.168.0.0/29 with gateway 192.168.0.1 for pool ru-8 and 172.16.0.0/29 with gateway 172.16.0.1 for pool ru-2.

  3. Assign an address from the 192.168.0.0/29 subnet to the Managed Kubernetes cluster node, for example 192.168.0.2.

  4. Add a route on the Managed Kubernetes cluster node in pool ru-8 — to the 172.16.0.0/29 subnet via gateway 192.168.0.1.

  5. Create file storage in the 172.16.0.0/29 subnet.

  6. Mount the file storage to the Managed Kubernetes cluster.

1. Create a global router

  1. In the Control panel, in the top menu, click Products and select Global Router.
  2. Click Create router. A limit of five global routers is set for each account.
  3. Enter the router name.
  4. Click Create.
  5. If the router was created with the status ERROR or 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 create a global router network and subnet for the project and cloud platform 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.

  1. In the control panel, on the top menu, click Products and select Global Router.

  2. Open the router page → Networks tab.

  3. Click Create network.

  4. Enter a network name. It will only be used in the control panel.

  5. Select the Cloud Platform service.

  6. Select the location where the Managed Kubernetes cluster was created.

  7. Select the project where the Managed Kubernetes cluster was created.

  8. Enter a subnet name. It will only be used in the control panel.

  9. 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/12 or 192.168.0.0/16;
    • have a size of at least /29, as three addresses will be occupied by Selectel 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/16 and 10.251.0.0/24. If a cluster on dedicated servers is included in the network — with the 10.10.0.0/16, 10.222.0.0/16, 10.250.0.0/16, 10.251.0.0/24 and 172.250.0.0/14. These subnets are used in Managed Kubernetes internal addressing, and their use may lead to conflicts in the global router network.
  10. 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.

  11. 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.

  12. Click Create network.

  13. 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 for the required router and click Network map.

3. Connect a network and subnet for the file storage to the router

You need to create a global router network and subnet for the project and cloud platform pool where the file storage will be created in the future.

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.

  1. In the control panel, on the top menu, click Products and select Global Router.

  2. Open the router page → Networks tab.

  3. Click Create network.

  4. Enter a network name. It will only be used in the control panel.

  5. Select the Cloud Platform service.

  6. Select the location where the file storage will be created.

  7. Select the project where the file storage will be created.

  8. Enter a subnet name. It will only be used in the control panel.

  9. 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/12 or 192.168.0.0/16;
    • have a size of at least /29, as three addresses will be occupied by Selectel 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/16 and 10.251.0.0/24. If a cluster on dedicated servers is included in the network — with the 10.10.0.0/16, 10.222.0.0/16, 10.250.0.0/16, 10.251.0.0/24 and 172.250.0.0/14. These subnets are used in Managed Kubernetes internal addressing, and their use may lead to conflicts in the global router network.
  10. 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.

  11. 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.

  12. Click Create network.

  13. 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 for the Managed Kubernetes cluster at stage 2.

  1. Add the Managed Kubernetes cluster node to the created global router subnet. If you do not have a Managed Kubernetes cluster yet, create one. When creating it, select the global router subnet as the subnet.

  2. Apply changes depending on the Apply changes parameter in the Port settings block. You can view the parameter value in the control panel: from the top menu, click ProductsCloud Servers → cloud server page → Ports tab:

    • On server rebootreboot 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

On each cluster node, you need to add a static route to the file storage. To do this, in the subnet you connected to the global router for the Managed Kubernetes cluster at stage 2, you need to add a static route to the subnet you connected to the global router for the file storage at stage 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 subnet you connected to the global router for the file storage at stage 3, you need to add a static route to the subnet you connected to the global router for the Managed Kubernetes cluster at stage 2.

Use the Configure static routes in a subnet section of the Static routes guide.

7. Create file storage

  1. In the Control panel, from the top menu click Products and select File Storage.

  2. Click Create Storage.

  3. Enter a name for the storage or keep the automatically generated one.

  4. Select a location where the storage will be created.

    If you need to increase disk space with file storage, select the location where your cloud server or Managed Kubernetes cluster is located.

    If you plan to use the storage for backups, we recommend choosing a location different from your primary infrastructure location to increase fault tolerance.

  5. Fill in the sections:

  6. Check the cost of the file storage.

  7. Click Create.

Subnet

  1. Select a private subnet where the storage will be located. The subnet type depends on what you need to connect the storage to:

    • cloud private subnet — the storage will be available for cloud servers and Managed Kubernetes clusters only in the pool you selected when creating the storage. To connect the storage, you will only need to mount it;
    • global router subnet — the storage will be available for dedicated servers, as well as cloud servers and Managed Kubernetes clusters that are in other pools. To connect the storage, you need to configure network connectivity between the server or cluster and the storage via the global router. See examples of configuring network connectivity in the instructions in the Connect File Storage section.

    Once the storage is created, the subnet cannot be changed.

  2. Enter the private IP address for the storage or leave the first available address from the subnet, which is assigned by default. Once the storage is created, the IP address cannot be changed.

Settings

  1. Select the file storage type:

    • HDD Basic,
    • SSD Universal,
    • SSD Fast.

    Once the storage is created, the storage type cannot be changed.

  2. Specify the storage size: from 50 GB to 50 TB. After creation, you can increase the file storage, but you cannot decrease it.

  3. Select a protocol:

    • NFSv4 — for connecting storage to servers running Linux or other Unix-based OS;
    • CIFS SMBv3 — for connecting storage to servers running Windows OS.

    Once the storage is created, the protocol cannot be changed.

Access rules

  1. Configure access rules for the file storage:

    • accessible to everyone — the storage will be available for any IP address in the private subnet where it is created;
    • access restricted — the storage will be available only for specific IP addresses or private subnets. If you create the file storage without rules, access will be restricted for all IP addresses.
  2. If you selected Access restricted, click Add rule.

  3. Enter the IP address or CIDR of the private subnet and select the access level.

    After creating the storage, 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.

  1. Create a PersistentVolume.

  2. Create a PersistentVolumeClaim.

  3. Add file storage to the container.

1. Create a PersistentVolume

  1. Connect to the Managed Kubernetes cluster.

  2. Create a yaml file with a manifest for the PersistentVolume object:

    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>

    Specify:

    • <storage_size> — PersistentVolume size in GB (file storage size), for example 100 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 ProductsFile 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 ProductsFile Storage → storage page → tab Settings → field IP.
  3. 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.

  4. Make sure the PersistentVolume object is created:

    kubectl get pv

2. Create a PersistentVolumeClaim

  1. Create a yaml file with a manifest for the PersistentVolumeClaim object:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: pvc_name
    spec:
    storageClassName: storageclass_name
    accessModes:
    - ReadWriteMany
    resources:
    requests:
    storage: <storage_size>

    Specify <storage_size> — PersistentVolume (file storage) size in GB, for example 100 Gi. The limit is from 50 GB to 50 TB.

  2. 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.

  3. Make sure the PersistentVolumeClaim object is created:

    kubectl get pvc

3. Add storage to the container

  1. Create a yaml file with a manifest for the Deployment object:

    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>

    Specify <mount_path> — the path to the folder inside the container where the file storage will be mounted.

  2. Apply the manifest:

    kubectl apply -f <deployment.yaml>

    Specify <deployment.yaml> — the name of the yaml file with the manifest to create the Deployment.