Getting started
Remote Block Storage (RBS) are external block-level storage volumes that can be mounted to Enterprise Bare Metal servers, Scalable Bare Metal servers, Cloud Servers, or Kubernetes nodes. This section outlines how to create and initialize a new RBS volume. To create a new RBS volume:
- Log in to the Customer Portal and navigate to Remote Block Storage
- Click Order
- Select the storage location
- Choose a type of flavor
- Specify the desired volume size in gigabytes
- IOPS (Input/Output Operations Per Second) and bandwidth will be calculated automatically based on the selected size
- Enter a name for the volume
- Click Order to complete the request
The system will begin provisioning the volume. Once completed, the volume will be available for use.
Connection configuration
Linux
To connect a volume to a Linux server, follow the steps below. Run all commands as root (or with sudo).
Step 1: install the Internet Small Computer System Interface (iSCSI) package (if not done already)
- Debian-based OS (Ubuntu, Debian)
apt install open-iscsiThe target configuration path is: /etc/iscsi/nodes
- RedHat-based OS (Rocky Linux, Alma Linux, CentOS)
yum install iscsi-initiator-utilsThe target configuration path is: /var/lib/iscsi/nodes
The target configuration path stores connection details for each discovered iSCSI target and supports automatic reconnection after reboot. If issues occur during login or reconfiguration, you can manually inspect or remove entries in this directory.
Step 2: register the target volume
Take the target name and the volume IP address from the volume details page: Customer Portal → Remote Block Storage → Your volume. You will need two fields:
- Target name - the IQN (iSCSI Qualified Name) that uniquely identifies the volume, for example:
iqn.2024-10.com.servers:59809d6c-6ec7-4220-b334-9c93ed8f52b4 - IP address - the iSCSI volume IP address
Create a node record for the target:
iscsiadm -m node --targetname <Target name> -p <Volume IP>:3260 -o newReplace <Target name> and <Volume IP> with the values from the Target name and IP address fields on the volume details page.
Step 3: configure authentication
Configure CHAP authentication parameters, by setting up a username and password:
iscsiadm -m node --targetname <Target name> -p <Volume IP>:3260 -o update -n node.session.auth.username -v <Username>
iscsiadm -m node --targetname <Target name> -p <Volume IP>:3260 -o update -n node.session.auth.password -v <Password>Replace <Username> and <Password> parameters with credentials from Remote Block Storage → Your volume → Credentials → Click the Show button.
Enable auto-start for this connection (optional):
iscsiadm -m node --targetname <Target name> -p <Volume IP>:3260 -o update -n node.startup -v automaticStep 4: Configure queue depth
By default, the Linux iSCSI initiator exposes a low queue depth on the SCSI device, which can limit performance for volumes with high IOPS limits.
To increase the queue depth, update the node session parameters before you log in:
iscsiadm -m node --targetname <Target name> -p <Volume IP>:3260 -o update -n node.session.cmds_max -v 256
iscsiadm -m node --targetname <Target name> -p <Volume IP>:3260 -o update -n node.session.queue_depth -v 128node.session.cmds_max must be a power of two and must be at least twice the target node.session.queue_depth.
For example, to set a queue depth of 128 on the SCSI device, set cmds_max to 256.
If the session is already active, log out and log back in for the changes to take effect.
Step 5: log in to the target volume
Log in to the target volume:
iscsiadm -m node --targetname <Target name> -p <Volume IP>:3260 --loginAfter completing the login, a new block storage device will appear in the /dev directory, typically named in the sdX format (e.g., sdc). To identify <Device name>, use the lsblk command.
Step 6: prepare the storage device
Format the new block storage device, create a file system (ext4 in our example) and mount it to a local directory such as /mnt/iscsi:
mkfs.ext4 -E lazy_itable_init=1 -E lazy_journal_init=1 /dev/<Device name>
mkdir /mnt/iscsi
mount /dev/<Device name> /mnt/iscsiReplace <Device name> with the actual device name from the previous step.
Step 7: set up auto-mounting after reboot (optional)
- Get the UUID of the file system:
lsblk -f- Set up automatic mounting:
echo "UUID=<UUID value> /mnt/iscsi ext4 _netdev 0 0" | tee --append /etc/fstab<UUID value> is the UUID of a file system from the previous request
Remote Block Storage has been set up.
Windows
To connect a volume to a Windows server, follow the steps below. Run all commands in an elevated PowerShell session.
Step 1: configure the iSCSI service
Using PowerShell
- Set the Microsoft iSCSI Initiator Service to start automatically and start it:
Set-Service -Name MSiSCSI -StartupType Automatic
Start-Service -Name MSiSCSI- Add the target portal, binding it to your Global Private Network interface:
New-IscsiTargetPortal -TargetPortalAddress <Volume IP> -InitiatorPortalAddress <GPN interface IP><Volume IP> is the volume's IP address from the volume details page: Customer Portal → Remote Block Storage → Your volume → IP address.
<GPN interface IP> is a Global Private Network IP address assigned to an interface of your server, found on your server's detail page (Private IP).
- Confirm the target was discovered and note its NodeAddress (the target IQN), which you need in Step 2:
Get-IscsiTargetUsing the GUI
- Make sure the iSCSI service is set to run automatically:
- Open the Microsoft Management Console by typing
services.mscin the Start menu - Locate Microsoft iSCSI Initiator Service, right-click → Properties
- Set Startup type to Automatic
- Open the iSCSI Initiator by typing
iscsicplin the Start menu - In the iSCSI Initiator Properties window, switch to the Discovery tab and click Discover Portal
- In the Discover Target Portal dialog, set the following:
- IP address or DNS name:
<Volume IP> - Port:
3260<Volume IP>is the volume's IP address from the volume details page: Customer Portal → Remote Block Storage → Your volume → IP address
- Click Advanced and set the following:
- Local adapter: Microsoft iSCSI Initiator
- Initiator IP:
<GPN interface IP>
<GPN interface IP> is a Global Private Network IP address assigned to an interface of your server. Find it on your server's detail page (Private IP).
- Click OK to close Advanced Settings, then OK to add the portal. It now appears under Target portals on the Discovery tab.
- Switch to the Targets tab. The volume appears under Discovered targets with the Inactive status.
Step 2: connect to the volume
Connect to the target with CHAP authentication, binding it to your Global Private Network interface and keeping the connection persistent across reboots.
Using PowerShell
Connect-IscsiTarget -NodeAddress <Target name> -TargetPortalAddress <Volume IP> -InitiatorPortalAddress <GPN interface IP> -AuthenticationType ONEWAYCHAP -ChapUsername <Username> -ChapSecret <Password> -IsPersistent $trueReplace <Target name> with the target IQN (the NodeAddress returned by Get-IscsiTarget, or the Target name field on the volume details page). Find <Username> and <Password> on the volume details page: Remote Block Storage → Your volume → Credentials → Show.
Using the GUI
- On the Targets tab, select the discovered target and click Connect
- In the Connect To Target dialog, keep Add this connection to the list of Favorite Targets selected so the connection is restored automatically after every reboot, then click Advanced
- In the Advanced Settings dialog, set the following:
- Local adapter: Microsoft iSCSI Initiator
- Initiator IP:
<GPN interface IP> - Target portal IP:
<Volume IP> / 3260 - Select the Enable CHAP log on checkbox
- Name:
<Username> - Target secret:
<Password>
You can find <Username> and <Password> on the volume details page: Remote Block Storage → Your volume → Credentials → Show
- Click OK to close Advanced Settings, then OK in the Connect To Target dialog. The target's status changes to Connected on the Targets tab.
Step 3: initialize the disk
Using PowerShell
$RBSDisk = Get-Disk | Where-Object PartitionStyle -eq 'RAW'
$RBSDisk | Set-Disk -IsOffline:$false
$RBSDisk | Initialize-Disk -PartitionStyle GPT -PassThru | New-Partition -AssignDriveLetter -UseMaximumSize | Format-Volume -FileSystem NTFS -Confirm:$falseUsing the GUI
- Right-click Start → select Disk Management
- Locate your iSCSI disk in the list
If the disk is marked Offline, that means Windows detects it but does not activate new external disks by default (this is a data protection feature)
- Set the disk to online and initialize it:
- In Disk Management, locate the correct disk (e.g., Disk 2)
- Right-click on the left pane (not the "unallocated" area)
- In the context menu, select Online, then Initialize Disk
You can now create partitions, assign a label or drive letter, and format to NTFS.
Kubernetes
To connect a volume to a Kubernetes cluster, follow the steps below.
Step 1: create a CHAP secret
Create a YAML file (e.g., chap-secret.yaml) and insert the following structure, adjusting it to your environment:
apiVersion: v1
kind: Secret
metadata:
name: <CHAP secret name>
type: "kubernetes.io/iscsi-chap"
data:
node.session.auth.username: <base64-username>
node.session.auth.password: <base64-password>Encode the credentials in base64 before pasting them into the file:
echo -n '<Username>' | base64
echo -n '<Password>' | base64Replace:
<Username>and<Password>with the values from the Customer Portal → Remote Block Storage → Your volume → Credentials → Show<CHAP secret name>with a name for the secret (e.g.,chap-secret), which will be used later in the pod manifest
Apply the secret to the cluster:
kubectl apply -f chap-secret.yamlIf successful, you will see:
secret/chap-secret createdThe CHAP secret is now ready to be referenced in your pod manifest.
Step 2: define a pod that mounts the block storage
Create a pod manifest file (e.g., pod-manifest.yaml) and use the following configuration as a base, adjusting it as needed:
apiVersion: v1
kind: Pod
metadata:
name: <Pod name>
spec:
containers:
- name: <Container name>
image: <Image name>
imagePullPolicy: IfNotPresent
command: ["sleep", "3600"]
volumeMounts:
- mountPath: "/mnt/<Folder>"
name: <Volume name>
volumes:
- name: <Volume name>
iscsi:
targetPortal: <Volume IP>
iqn: <Target name>
lun: 0
fsType: <File system>
readOnly: false
chapAuthDiscovery: false
chapAuthSession: true
secretRef:
name: <CHAP secret name>Replace the placeholders with actual values:
<Pod name>- name of the pod (e.g.,iscsi-demo-pod)<Container name>- name of the container inside the pod<Image name>- container image name (e.g.,nginx)<Folder>- subdirectory under/mntto mount inside the container (e.g.,storage)<Volume name>- volume name inside the pod<Volume IP>- IP address of the iSCSI target<Target name>- IQN of the target (e.g.,iqn.2024-10.com.servers:abc123)<File system>- filesystem type (typicallyext4)<CHAP secret name>- name of the CHAP secret object from the previous step
You can find <Volume IP> and <Target name> in the Customer Portal on the block storage details page.
Apply the configuration:
kubectl apply -f pod-manifest.yamlIf successful, you will see:
pod/iscsi-demo-pod createdStorage verification
Linux
- Navigate to the mount point:
cd /mnt/iscsi- Create a test file:
nano /mnt/iscsi/test.txtTo save and close:
- Press Ctrl + O → then Enter (to save)
- Press Ctrl + X (to exit Nano)
- Verify the created file and its content
cat /mnt/iscsi/test.txtWindows
Using PowerShell
- Confirm the volume is available and note its drive letter:
Get-Volume- Write a test file to the volume and read it back (replace
<Drive letter>with the letter assigned to the volume, for exampleD):
Set-Content -Path <Drive letter>:\test.txt -Value "Remote Block Storage test"
Get-Content -Path <Drive letter>:\test.txtGet-Content returns Remote Block Storage test, confirming the volume is writable and readable.
Using the GUI
- Open File Explorer and confirm the volume appears under This PC.
- Open the volume, right-click an empty area → New → Text Document, and name the file
test.txt. - Open
test.txt, type some text, and save it (Ctrl + S). - Close and reopen the file to confirm the content was saved to the volume.
Kubernetes
- Confirm the pod is running:
kubectl get pods- Check container status:
kubectl get pod iscsi-demo-pod -o wideStatuses:
Running- container is successfully launched and the volume is mountedContainerCreating- the pod is still initializingCrashLoopBackOff- check the container's command, logs, or volume errors. You can get more details using thekubectl describe pod <Pod name>command
- Exec into the pod and check the mount:
kubectl exec -it iscsi-demo-pod -- sh- Once inside the pod:
ls /mnt/storageIf everything was set up correctly, you should see the contents of the mounted iSCSI volume.
Disconnecting storage
Linux
To safely disconnect and avoid data loss:
- Identify mountpoints:
lsblkExample output:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sdc 8:32 0 10G 0 disk /mnt/storage
/mnth- Unmount all mountpoints:
sudo umount /mnt/storage
sudo umount /mnthIf the device is busy, check which processes are using it:
lsof /mnt/storageEnd those processes or wait for any write operations to complete, then try unmounting again.
- Disconnect from the iSCSI target:
- Check the current iSCSI session:
iscsiadm -m session- Log out from the target:
sudo iscsiadm -m node -T <Target IQN> -p <Volume IP> --logout- Remove the target record (optional):
iscsiadm -m node --targetname <Target name> -p <Volume IP>:3260 -o delete- Run
lsblkagain to ensure the block storage device is no longer listed
Windows
To disconnect a volume from a Windows Dedicated Server, follow the steps below.
Step 1: take the volume offline via Disk Management
- Open Disk Management (search for
diskmgmt.mscin the Start menu) - Locate the disk associated with the iSCSI volume
- Right-click on the volume or partition → select Change Drive Letter and Paths...
- If a drive letter is assigned, remove it
- In the left-hand panel (e.g., Disk 2), right-click the disk → choose Offline
Step 2: disconnect from the iSCSI target via iSCSI Initiator
- Open iSCSI Initiator (search for
iscsicplin the Start menu) - In the Targets tab, locate the target with Status: Connected
- Select it and click Disconnect
- Confirm the action when prompted
Step 3: remove the target from configuration (optional)
- Navigate to the Favorite Targets tab in iSCSI Initiator
- Select the disconnected target and click Remove
This prevents Windows from automatically reconnecting to the target on startup.
Kubernetes
Step 1: identify the node where the volume is mounted
Before deleting the pod, determine the node it runs on:
kubectl get pod <Pod name> -o wideThis will show something like:
NAME READY STATUS RESTARTS AGE IP NODE
iscsi-demo-pod 1/1 Running 0 1h 172.31.x.x 10.20.30.40Step 2: log in to the worker node that mounted the volume via SSH
ssh <user>@<node IP>Step 3: Log out from the iSCSI target
- After connecting to the node, list active sessions:
sudo iscsiadm -m session- Disconnect the storage:
sudo iscsiadm -m node -T <Target IQN> -p <Volume IP> --logoutReplace <Target IQN> and <Volume IP> with actual values from the list of active sessions
- Run the session list command again to make sure the storage was successfully disconnected
Step 4: delete the pod
This command must be executed from your workstation or any machine with kubectl access, not on the Kubernetes node. Once logout is complete:
kubectl delete pod iscsi-demo-podStep 5: remove the CHAP secret (optional)
kubectl delete secret chap-secret