Skip to main content

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

If you plan to use file storage for storing backups, to improve fault tolerance we recommend creating the storage and the Managed Kubernetes cluster in pools from different availability zones or regions. If the file storage and the Managed Kubernetes cluster are in different pools, to connect the storage, you need to configure private L3 network connectivity via a global router.

  1. Create a global router.

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

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

  4. Assign an IP address on the Managed Kubernetes cluster node.

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

  6. Specify 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 a different 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. For more information, see the Connect file storage to a Managed Kubernetes cluster in the same pool instructions.

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 the ru-8 pool and 172.16.0.0/29 with gateway 172.16.0.1 for the ru-2 pool.

  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. Specify a route on the Managed Kubernetes cluster node in the ru-8 pool — to the 172.16.0.0/29 subnet via the 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. Each account has a limit of five global routers.
  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 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.

  1. In the Control panel, in 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 is created.

  7. Select the project where the Managed Kubernetes cluster is 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, since 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 the global router network includes a Managed Kubernetes cluster on cloud servers, the subnet must not overlap with the ranges 10.10.0.0/16, 10.96.0.0/12, 10.250.0.0/16, and 10.251.0.0/24. If the network includes a cluster on dedicated servers — with the ranges 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 for internal Managed Kubernetes addressing, and their use may cause 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, in the top menu, click Products and select Global router. Open the page of the desired 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.

  1. In the Control panel, in 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, since 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 the global router network includes a Managed Kubernetes cluster on cloud servers, the subnet must not overlap with the ranges 10.10.0.0/16, 10.96.0.0/12, 10.250.0.0/16, and 10.251.0.0/24. If the network includes a cluster on dedicated servers — with the ranges 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 for internal Managed Kubernetes addressing, and their use may cause 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, in 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 from the subnet that you connected to the global router in step 2 to the port.

  1. 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 a cluster, select the subnet that you connected to the global router in step 2 as the subnet.

  2. Apply the changes depending on the Apply changes parameter in the Port setup block. You can see the parameter value in the Control panel: in the top menu, Products → Cloud Servers → cloud server page → Ports tab:

    • When rebooting the server — reboot the node via software 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, specify a static route to the file storage subnet that you connected to the global router in step 3.

Use the Configure static routes on subnet subsection of the Static routes instructions.

6. Add a route in the file storage subnet

In the file storage subnet that you connected to the global router in step 3, specify a static route to the Managed Kubernetes cluster subnet that you connected to the global router in step 2.

Use the Configure static routes on subnet subsection of the Static routes instructions.

7. Create file storage

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

  2. Click Create storage.

  3. Enter a storage name or leave the name that is automatically created.

  4. Select the 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.

  5. Fill in the blocks:

  6. Check the price of the file storage.

  7. Click Create.

Subnet

  1. Select the private subnet of the file storage that you connected to the global router in step 3. Once the storage is created, the subnet cannot be changed.

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

  1. Select the file storage type:

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

    Once 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 cannot decrease it.

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

  1. 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.
  2. If you selected the Restricted access option, 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. Limit — from 50 GB to 50 TB;
    • <mountpoint_uuid> — mount point ID. You can find it in the control panel: in the top menu, click Products → File Storage → storage page → Connection section → GNU/Linux tab;
    • <filestorage_ip_address> — file storage IP address. You can find it in the control panel: in the top menu, click Products → File Storage → storage page → Settings tab → IP field.
  3. Apply the manifest:

    kubectl apply -f <persistent_volume.yaml>

    Specify <persistent_volume.yaml> — name of the YAML file with the manifest for creating a 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. Limit — from 50 GB to 50 TB.

  2. Apply the manifest:

    kubectl apply -f <persistent_volume_claim.yaml>

    Specify <persistent_volume_claim.yaml> — name of the YAML file with the manifest for creating a 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> — 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> — name of the YAML file with the manifest for creating a Deployment.