Mount file storage
File storage can be mounted:
Mount file storage to a dedicated or cloud server
The mount process depends on the operating system on the server and the file storage protocol: NFSv4 or CIFS SMBv3.
NFSv4
CIFS SMBv3
Linux
Windows
-
Open the CLI.
-
Install the NFS protocol package:
sudo apt install nfs-common
-
Create a folder to mount the repository:
sudo mkdir -p /mnt/nfs
-
Mount the file storage:
sudo mount -vt nfs "<filestorage_ip_address>:/shares/share-<mountpoint_uuid>" /mnt/nfs
Specify:
<filestorage_ip_address>
— The IP address of the file storage. You can look in control panels under Cloud platform → File storage → storage page → tab Settings → field IP;<mountpoint_uuid>
— The ID of the mount point. You can look in control panels under Cloud platform → File storage → storage page → block Connection → tab GNU/Linux.
The file storage works only with an NFS client of NFSv4 version. By default, Windows supports NFSv2 and NFSv3 NFS clients. Read more about NFS versions in the article NFS Review Microsoft documentation.
To work with file storage from Windows, we recommend using file storage with CIFS protocol. If you need to connect storage with NFS protocol, install and use a client that supports NFSv4 protocol.
Linux
Windows
-
Open the CLI.
-
Install the CIFS protocol package:
sudo apt install cifs-utils
-
Create a folder to mount the repository:
sudo mkdir -p /mnt/cifs
-
Mount the file storage:
sudo mount.cifs -o guest //<filestorage_ip_address>/share-<mountpoint_uuid> /mnt/cifs
Specify:
<filestorage_ip_address>
— The IP address of the file storage. You can look in control panels under Cloud platform → File storage → storage page → tab Settings → field IP;<mountpoint_uuid>
— The ID of the mount point. You can look in control panels under Cloud platform → File storage → storage page → block Connection → tab GNU/Linux.
-
Open the CLI.
-
Mount the file storage:
net use X: \\\\<filestorage_ip_address>\share-<mountpoint_uuid>
Specify:
<filestorage_ip_address>
— The IP address of the file storage. You can look in control panels under Cloud platform → File storage → storage page → tab Settings → field IP;<mountpoint_uuid>
— The ID of the mount point. You can look in control panels under Cloud platform → File storage → storage page → block Connection → tab Windows.
Mount file storage to a Managed Kubernetes cluster
The mount process depends on the file storage protocol: NFSv4 or CIFS SMBv3.
NFSv4
CIFS SMBv3
Create PersistentVolume
-
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), e.g.100 Gi
. The limit is from 50 GB to 50 TB;<mountpoint_uuid>
— The ID of the mount point. You can look in control panels under Cloud platform → File storage → storage page → block Connection → tab GNU/Linux;<filestorage_ip_address>
— The IP address of the file storage. You can look in control panels under Cloud platform → 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 that a PersistentVolume object is created:
kubectl get pv
Create a PersistentVolumeClaim
-
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 size in GB (file storage size), e.g.100 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. -
Ensure that a PersistentVolumeClaim object is created:
kubectl get pvc
Add storage to a container
-
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 to which 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.
- Install the CSI driver for Samba.
- Create a secret to store the login and password.
- Create StorageClass.
- Create PersistentVolumeClaim.
- Add file storage to the container.
Install the CSI driver for Samba
-
Download the CSI driver from GitHub Kubernetes CSI.
-
Install the latest driver version:
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 -
Check that the pods are installed and running:
kubectl --namespace=kube-system get pods --selector="app=csi-smb-controller"
Create a secret
The file storage does not support differentiation of access rights. Access via CIFS SMBv3 protocol is performed under the user name guest
.
Create a secret to store the login and password (by default guest/guest
):
kubectl create secret generic smbcreds --from-literal username=guest --from-literal password=guest
Create StorageClass
-
Create a yaml file with a manifest for the StorageClass object:
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=0777Specify:
<mountpoint_uuid>
— The ID of the mount point. You can look in control panels under Cloud platform → File storage → storage page → block Connection → tab GNU/Linux;<filestorage_ip_address>
— The IP address of the file storage. You can look in control panels under Cloud platform → File storage → storage page → tab Settings → field IP.
-
Apply the manifest:
kubectl apply -f <storage_class.yaml>
Specify
<storage_class.yaml>
— name of the yaml file with the manifest to create the StorageClass. -
Make sure that the StorageClass object is created:
kubectl get storageclass
Create a PersistentVolumeClaim
-
Create a yaml file with a manifest for the PersistentVolumeClaim object:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc_name
annotations:
volume.beta.kubernetes.io/storage-class: smb
spec:
accessModes: ["ReadWriteMany"]
resources:
requests:
storage: <storage_size>Specify
<storage_size>
— PersistentVolume size in GB (file storage size), e.g.100 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. -
Ensure that the PersistentVolumeClaim object is created:
kubectl get pvc
Add storage to a container
-
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 to which 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.