From f8173fac360970e64acf6baae93e879d172d42c5 Mon Sep 17 00:00:00 2001 From: Valentin Lacour Date: Tue, 7 Apr 2026 12:07:59 +0200 Subject: [PATCH 1/2] feat(efs): delete guide, update link and title --- pages/index.md | 2 +- .../guide.de-de.md | 411 ------------------ .../guide.en-asia.md | 411 ------------------ .../guide.en-au.md | 411 ------------------ .../guide.en-ca.md | 411 ------------------ .../guide.en-gb.md | 411 ------------------ .../guide.en-ie.md | 411 ------------------ .../guide.en-sg.md | 411 ------------------ .../guide.en-us.md | 411 ------------------ .../guide.es-es.md | 411 ------------------ .../guide.es-us.md | 411 ------------------ .../guide.fr-ca.md | 411 ------------------ .../guide.fr-fr.md | 411 ------------------ .../guide.it-it.md | 411 ------------------ .../guide.pl-pl.md | 411 ------------------ .../guide.pt-pt.md | 411 ------------------ .../images/create-efs-volume.png | Bin 24547 -> 0 bytes .../images/manage-efs-volume-access-ip.png | Bin 146288 -> 0 bytes .../images/manage-efs-volume-access.png | Bin 131429 -> 0 bytes .../images/manage-efs-volume-acl-list.png | Bin 152790 -> 0 bytes .../meta.yaml | 2 - .../guide.de-de.md | 2 +- .../guide.en-asia.md | 2 +- .../guide.en-au.md | 2 +- .../guide.en-ca.md | 2 +- .../guide.en-gb.md | 2 +- .../guide.en-ie.md | 2 +- .../guide.en-sg.md | 2 +- .../guide.en-us.md | 2 +- .../guide.es-es.md | 2 +- .../guide.es-us.md | 2 +- .../guide.fr-ca.md | 2 +- .../guide.fr-fr.md | 2 +- .../guide.it-it.md | 2 +- .../guide.pl-pl.md | 2 +- .../guide.pt-pt.md | 2 +- .../guide.en-gb.md | 2 +- .../guide.fr-fr.md | 2 +- 38 files changed, 18 insertions(+), 6185 deletions(-) delete mode 100644 pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.de-de.md delete mode 100644 pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-asia.md delete mode 100644 pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-au.md delete mode 100644 pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-ca.md delete mode 100644 pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-gb.md delete mode 100644 pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-ie.md delete mode 100644 pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-sg.md delete mode 100644 pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-us.md delete mode 100644 pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.es-es.md delete mode 100644 pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.es-us.md delete mode 100644 pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.fr-ca.md delete mode 100644 pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.fr-fr.md delete mode 100644 pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.it-it.md delete mode 100644 pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.pl-pl.md delete mode 100644 pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.pt-pt.md delete mode 100644 pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/images/create-efs-volume.png delete mode 100644 pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/images/manage-efs-volume-access-ip.png delete mode 100644 pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/images/manage-efs-volume-access.png delete mode 100644 pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/images/manage-efs-volume-acl-list.png delete mode 100755 pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/meta.yaml diff --git a/pages/index.md b/pages/index.md index 4217ca63b5e..09befb076eb 100644 --- a/pages/index.md +++ b/pages/index.md @@ -1013,7 +1013,7 @@ + [Persistent Volumes on OVHcloud Managed Kubernetes Service](public_cloud/containers_orchestration/managed_kubernetes/setting-up-a-persistent-volume) + [Resizing Persistent Volumes](public_cloud/containers_orchestration/managed_kubernetes/resizing-persistent-volumes) + [Configuring multi-attach persistent volumes with OVHcloud NAS-HA](public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-nas-ha) - + [Configuring multi-attach persistent volumes with OVHcloud Enterprise File Storage](public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs) + + [Enterprise File Storage - Getting started with Trident CSI](storage_and_backup/file_storage/enterprise_file_storage/netapp_trident_csi) + [Configuring multi-attach persistent volumes with OVHcloud Cloud Disk Array](public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-cloud-disk-array) + [Formatting NVMe disks on IOPS nodes](public_cloud/containers_orchestration/managed_kubernetes/formating-nvme-disks-on-iops-nodes) + [Network](public-cloud-containers-orchestration-managed-kubernetes-k8s-configuration-network) diff --git a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.de-de.md b/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.de-de.md deleted file mode 100644 index 6ca429e07ee..00000000000 --- a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.de-de.md +++ /dev/null @@ -1,411 +0,0 @@ ---- -title: Configuring multi-attach persistent volumes with Enterprise File Storage -excerpt: 'Find out how to configure a multi-attach persistent volume using our Enterprise File Storage solution' -updated: 2025-01-06 ---- - - - -## Objective - -OVHcloud Managed Kubernetes currently offers Block Storage for persistent volumes by default, but that may not be suited for applications that require a shared file system between multiple nodes. This tutorial shows how to configure a shared [Kubernetes Persistent Volume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) (AccessMode `ReadWriteMany` or `RWX`) using [OVHcloud Enterprise File Storage](/links/storage/enterprise-file-storage) as a storage backend. - -## Requirements - -This tutorial assumes that you already have a working [OVHcloud Managed Kubernetes](/links/public-cloud/kubernetes) cluster, and some basic knowledge of how to operate it. If you want to know more on those topics, please look at the [deploying a Hello World application](/pages/public_cloud/containers_orchestration/managed_kubernetes/deploying-hello-world) documentation. - -It also assumes you have an OVHcloud Enterprise File Storage already available. If you don't, you can [order one in the OVHcloud Control Panel](/links/manager). - -You also need to have [Helm](https://docs.helm.sh/) installed on your workstation. Please refer to the [How to install Helm on OVHcloud Managed Kubernetes Service](/pages/public_cloud/containers_orchestration/managed_kubernetes/installing-helm) tutorial. - - -## Instructions - -### Step 1 - Creating a volume and granting your Managed Kubernetes Service access to it - -Your Enterprise File Storage service can expose multiple volumes, and supports a variety of protocols. Each volume is accessible only from a specific range of IPs. We will create a new EFS volume and make it accessible from your Kubernetes worker nodes. - -You can find more information about our Enterprise File Storage product by clicking [here](/pages/storage_and_backup/file_storage/enterprise_file_storage/netapp_control_panel). - -Access the UI for OVHcloud Enterprise File Storage by clicking the `Storage and backups`{.action} then `Enterprise File Storage`{.action} menu in the [Bare Metal Cloud section of the OVHcloud Control Panel](/links/manager). - -Click your Enterprise File Storage service, then click the `Volumes`{.action} tab. Click the `Create a volume`{.action} button and create the new Enterprise File Storage volume with the following content: - -![Create an EFS volume](images/create-efs-volume.png){.thumbnail} - -Provide the following parameters to create a volume: - -| Name | Description | Required | -| ------------------- | -------------------------- | ------------- | -| Volume name | Name of the volume | False | -| Volume description | Description of the volume | False | -| Protocol | Protocol used to connect | True | -| Volume size | Size of the volume | True | - -The volume size needs to be adapted to your needs. For this guide, we define a volume size of 100 GiB. - -Once your volume is created, click on its ID and select `Access Control List`{.action}. -Enter your Nodes' public IPs and/or your Public Cloud Gateway public IP into the volume's ACLs. This will ensure your Kubernetes worker nodes can reach the storage service. - -#### Your cluster is installed with Public Network or a private network without using an OVHcloud Internet Gateway or a custom one as your default route - -Once the volume is created, we need to allow our Kubernetes nodes to access it. - -Get our Kubernetes nodes IP: - -```bash -kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -``` - -```console -$ kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -51.128.xx.xx 37.59.xx.xx -``` - -#### Your cluster is installed with Private Network and a default route via your Private Network (OVHcloud Internet Gateway/OpenStack Router or a custom one) - -Because your nodes are configured to be routed by the private network gateway, you need to add the gateway IP address to the ACLs. - -By using Public Cloud Gateway through our Managed Kubernetes Service, public IPs on nodes are only for management purposes: [MKS Known Limits](/pages/public_cloud/containers_orchestration/managed_kubernetes/known-limits) - -You can get your OVHcloud Internet Gateway's public IP by navigating through the OVHcloud Control Panel: - -`Public Cloud`{.action} > Select your tenant > `Network / Gateway`{.action} > `Public IP`{.action} - -You can also get your OVHcloud Internet Gateway's public IP via the following API: - -> [!api] -> -> @api {v1} /cloud GET /cloud/project/{serviceName}/region/{regionName}/gateway/{id} -> - -> [!success] -> If you are not familiar with the OVHcloud API, read our [First Steps with the OVHcloud API](/pages/manage_and_operate/api/first-steps) guide. - -If you want to use your Kubernetes cluster to know your Gateway's public IP, you can run this command: - -```bash -kubectl run get-gateway-ip --image=ubuntu:latest -i --tty --rm -``` - -This command will create a temporary pod and open a console. - -You may have to wait a bit to let the pod be created. Once the shell appears, you can run this command: - -```bash -apt update && apt upgrade -y && apt install -y curl && curl ifconfig.ovh -``` - -The public IP of the Gateway you're using should appear. - -Click on the `Manage IP Access (ACL)`{.action} menu of our newly created volume: - -![Manage Access of the EFS Volume](images/manage-efs-volume-access.png){.thumbnail} - -Add either the nodes' IPs one by one or the Gateway's public IP depending on your configuration: - -![Allow nodes IP to access the EFS Volume](images/manage-efs-volume-access-ip.png){.thumbnail} - -You should now have something similar to this: - -![EFS Configuration](images/manage-efs-volume-acl-list.png){.thumbnail} - -### Step 2 - Configuring Kubernetes to use our newly created EFS volume - -Your Kubernetes cluster needs some additional piece of software to make use of the Enterprise File Storage volume. We will install those and then create a first volume, shared across multiple pods. - -To do so, you can install the [csi-driver-nfs](https://github.com/kubernetes-csi/csi-driver-nfs): - -```bash -helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts -helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set controller.name="csi-nfs2-controller" --set rbac.name=nfs2 -``` - -```console -$ helm install csi-driver-nfs -n kube-system csi-driver-nfs/csi-driver-nfs --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set rbac.name=nfs --set controller.name="csi-nfs2-controller" -NAME: csi-driver-nfs -LAST DEPLOYED: Mon Dec 16 16:13:31 2024 -NAMESPACE: kube-system -STATUS: deployed -REVISION: 1 -TEST SUITE: None -NOTES: -The CSI NFS Driver is getting deployed to your cluster. - -To check CSI NFS Driver pods status, please run: - - kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -``` - -Let's verify our installation: - -```bash -kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" -``` - -```console -$ kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -NAME READY STATUS RESTARTS AGE -csi-nfs-node-7kdwj 0/3 ContainerCreating 0 5s -csi-nfs-node-7smkb 0/3 ContainerCreating 0 5s -csi-nfs2-controller-68d7768f64-pzs74 0/4 ContainerCreating 0 5s -csi-nfs-node-7kdwj 3/3 Running 0 11s -csi-nfs-node-7smkb 3/3 Running 0 20s -csi-nfs2-controller-68d7768f64-pzs74 4/4 Running 0 21s -``` - -### Step 3 - Create the NFS StorageClass Object - -Let's create a `efs-storageclass.yaml` file: - - -> [!primary] -> -> Don't forget to replace `[EFS_IP]`, `[EFS_PATH]` and `[PARTITION_NAME]` with the correct information. -> - -```yaml -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - name: nfs-csi -provisioner: nfs2.csi.k8s.io -parameters: - server: '[EFS_IP]' - share: '[EFS_PATH]' -reclaimPolicy: Delete -volumeBindingMode: Immediate -mountOptions: - - nfsvers=3 - - tcp -``` - -> [!primary] -> -> The `EFS_IP` is the private IP of your Enterprise File Storage and the `EFS_PATH` is the path to access your volume. -> -> The `tcp` parameter instructs the NFS mount to use the TCP protocol. -> - -Then apply the YAML file to create the StorageClass: - -```bash -kubectl apply -f efs-storageclass.yaml -``` - -### Step 4 - Create and use an NFS persistent volume - -Let’s create a `efs-persistent-volume-claim.yaml` file: - -```yaml -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: efs-pvc - namespace: default -spec: - accessModes: - - ReadWriteMany - storageClassName: nfs-csi - resources: - requests: - storage: 1Gi -``` - -And apply this to create the persistent volume claim: - -```bash -kubectl apply -f efs-persistent-volume-claim.yaml -``` - -You can find more information about the PVC by running this command: - -```bash -kubectl describe pvc efs-pvc -``` - -```console -$ kubectl describe pvc efs-pvc -Name: efs-pvc -Namespace: default -StorageClass: nfs-csi -Status: Bound -Volume: pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -Labels: -Annotations: pv.kubernetes.io/bind-completed: yes - pv.kubernetes.io/bound-by-controller: yes - volume.beta.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io - volume.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io -Finalizers: [kubernetes.io/pvc-protection] -Capacity: 1Gi -Access Modes: RWX -VolumeMode: Filesystem -Used By: -Events: - Type Reason Age From Message - ---- ------ ---- ---- ------- - Normal Provisioning 10s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 External provisioner is provisioning volume for claim "default/efs-pvc" - Normal ExternalProvisioning 10s persistentvolume-controller Waiting for a volume to be created either by the external provisioner 'nfs2.csi.k8s.io' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered. - Normal ProvisioningSucceeded 9s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 Successfully provisioned volume pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -``` - -By reading the events on this PersistentVolumeClaim, our PVC has been provisioned from our Enterprise File Storage. - -If you encounter errors such as: - -```console - Warning ProvisioningFailed 2s (x3 over 6s) nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-7f86e647-4632-4188-bfbe-84d11ea03426 -Output: mount.nfs: mounting 10.201.xx.xx:/share_xxx failed, reason given by server: No such file or directory -``` - -or similar to: - -```console - Warning ProvisioningFailed 1s (x3 over 4s) nfs2.csi.k8s.io_nodepool-cc5ad1db-f645-465c-85-node-6f9649_95fd7b5e-94aa-4c90-9ffa-9765beadfbe6 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-ebab8dfa-7ce8-4102-9ef5-5a626638f3b8 -Output: mount.nfs: access denied by server while mounting 10.201.xx.xx:/share_xxx - -``` - -It may indicate an issue with the Enterprise File Storage ACLs configuration. Check the authorized IPs which can access to the wanted partition on the ACLs list. - -> [!warning] -> If the number of __PersistentVolumes__ to schedule simultaneously is too important, some slowness can be encountered and volume creation can be delayed. - - -Let’s now create a DaemonSet of Nginx pods using the persistent volume claim as their webroot folder. - -Using a DaemonSet will create a pod on each deployed node and make troubleshooting easier in case of a misconfiguration or to isolate a node issue. - -Let's create a file named `nginx-daemonset.yaml`: - -```yaml -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: nfs-nginx - namespace: default -spec: - selector: - matchLabels: - name: nginx - template: - metadata: - labels: - name: nginx - spec: - volumes: - - name: nfs-volume - persistentVolumeClaim: - claimName: nfs-pvc - containers: - - name: nginx - image: nginx - ports: - - containerPort: 80 - name: "http-server" - volumeMounts: - - mountPath: "/usr/share/nginx/html" - name: nfs-volume -``` - -And apply this to create the Nginx DaemonSet: - -```bash -kubectl apply -f nginx-daemonset.yaml -``` - -Both pods should be running: - -```bash -kubectl get pods -NAME READY STATUS RESTARTS AGE -nfs-nginx-9z7wk 1/1 Running 0 11s -nfs-nginx-sfthh 1/1 Running 0 11s -``` - -Let’s enter inside the first Nginx pod and container to check if the Enterprise File Storage Volume is properly mounted and create a file on the NFS persistent volume: - -```bash -$ FIRST_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -1) -kubectl exec -it $FIRST_POD -n default -- bash -``` - -```bash -root@nfs-nginx-9z7wk:/# mount -l | grep nfs -10.201.xx.xx:/share_xxx/pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 on /usr/share/nginx/html type nfs (rw,relatime,vers=3,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.201.xx.xx,mountvers=3,mountport=635,mountproto=tcp,local_lock=none,addr=10.201.xx.xx) -``` - -Now, we will check if the EFS volume is properly shared between the deployed pods. - -Create a new `index.html` file: - -```bash -echo "NFS volume!" > /usr/share/nginx/html/index.html -``` - -And exit the Nginx container: - -```bash -exit -``` - -Let’s try to access our new web page: - -```bash -kubectl proxy -``` - -Generate the URL to open in your broswer: - -```bash -URL=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$FIRST_POD:/proxy/") -echo $URL -``` - -You can open the URL which is displayed to access the Nginx Service. - -Now let’s try to see if the data is shared with the second pod (if you have more than one node deployed). - -```bash -$ SECOND_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -2 | tail -1) -URL2=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$SECOND_POD:/proxy/") -echo $URL2 -``` - -You can open the URL which is displayed to access the Nginx Service on the other pod. - -As you can see the data is correctly shared between the two Nginx pods running on two different Kubernetes nodes. - -Congratulations, you have successfully set up a multi-attach persistent volume with OVHcloud Enterprise File Storage! - -## Go further - -To learn more about using your Kubernetes cluster the practical way, we invite you to look at our [OVHcloud Managed Kubernetes doc site](/products/public-cloud-containers-orchestration-managed-kubernetes-k8s). - -If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](/links/professional-services) to get a quote and ask our Professional Services experts for a custom analysis of your project. - -Join our [community of users](/links/community). \ No newline at end of file diff --git a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-asia.md b/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-asia.md deleted file mode 100644 index 6ca429e07ee..00000000000 --- a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-asia.md +++ /dev/null @@ -1,411 +0,0 @@ ---- -title: Configuring multi-attach persistent volumes with Enterprise File Storage -excerpt: 'Find out how to configure a multi-attach persistent volume using our Enterprise File Storage solution' -updated: 2025-01-06 ---- - - - -## Objective - -OVHcloud Managed Kubernetes currently offers Block Storage for persistent volumes by default, but that may not be suited for applications that require a shared file system between multiple nodes. This tutorial shows how to configure a shared [Kubernetes Persistent Volume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) (AccessMode `ReadWriteMany` or `RWX`) using [OVHcloud Enterprise File Storage](/links/storage/enterprise-file-storage) as a storage backend. - -## Requirements - -This tutorial assumes that you already have a working [OVHcloud Managed Kubernetes](/links/public-cloud/kubernetes) cluster, and some basic knowledge of how to operate it. If you want to know more on those topics, please look at the [deploying a Hello World application](/pages/public_cloud/containers_orchestration/managed_kubernetes/deploying-hello-world) documentation. - -It also assumes you have an OVHcloud Enterprise File Storage already available. If you don't, you can [order one in the OVHcloud Control Panel](/links/manager). - -You also need to have [Helm](https://docs.helm.sh/) installed on your workstation. Please refer to the [How to install Helm on OVHcloud Managed Kubernetes Service](/pages/public_cloud/containers_orchestration/managed_kubernetes/installing-helm) tutorial. - - -## Instructions - -### Step 1 - Creating a volume and granting your Managed Kubernetes Service access to it - -Your Enterprise File Storage service can expose multiple volumes, and supports a variety of protocols. Each volume is accessible only from a specific range of IPs. We will create a new EFS volume and make it accessible from your Kubernetes worker nodes. - -You can find more information about our Enterprise File Storage product by clicking [here](/pages/storage_and_backup/file_storage/enterprise_file_storage/netapp_control_panel). - -Access the UI for OVHcloud Enterprise File Storage by clicking the `Storage and backups`{.action} then `Enterprise File Storage`{.action} menu in the [Bare Metal Cloud section of the OVHcloud Control Panel](/links/manager). - -Click your Enterprise File Storage service, then click the `Volumes`{.action} tab. Click the `Create a volume`{.action} button and create the new Enterprise File Storage volume with the following content: - -![Create an EFS volume](images/create-efs-volume.png){.thumbnail} - -Provide the following parameters to create a volume: - -| Name | Description | Required | -| ------------------- | -------------------------- | ------------- | -| Volume name | Name of the volume | False | -| Volume description | Description of the volume | False | -| Protocol | Protocol used to connect | True | -| Volume size | Size of the volume | True | - -The volume size needs to be adapted to your needs. For this guide, we define a volume size of 100 GiB. - -Once your volume is created, click on its ID and select `Access Control List`{.action}. -Enter your Nodes' public IPs and/or your Public Cloud Gateway public IP into the volume's ACLs. This will ensure your Kubernetes worker nodes can reach the storage service. - -#### Your cluster is installed with Public Network or a private network without using an OVHcloud Internet Gateway or a custom one as your default route - -Once the volume is created, we need to allow our Kubernetes nodes to access it. - -Get our Kubernetes nodes IP: - -```bash -kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -``` - -```console -$ kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -51.128.xx.xx 37.59.xx.xx -``` - -#### Your cluster is installed with Private Network and a default route via your Private Network (OVHcloud Internet Gateway/OpenStack Router or a custom one) - -Because your nodes are configured to be routed by the private network gateway, you need to add the gateway IP address to the ACLs. - -By using Public Cloud Gateway through our Managed Kubernetes Service, public IPs on nodes are only for management purposes: [MKS Known Limits](/pages/public_cloud/containers_orchestration/managed_kubernetes/known-limits) - -You can get your OVHcloud Internet Gateway's public IP by navigating through the OVHcloud Control Panel: - -`Public Cloud`{.action} > Select your tenant > `Network / Gateway`{.action} > `Public IP`{.action} - -You can also get your OVHcloud Internet Gateway's public IP via the following API: - -> [!api] -> -> @api {v1} /cloud GET /cloud/project/{serviceName}/region/{regionName}/gateway/{id} -> - -> [!success] -> If you are not familiar with the OVHcloud API, read our [First Steps with the OVHcloud API](/pages/manage_and_operate/api/first-steps) guide. - -If you want to use your Kubernetes cluster to know your Gateway's public IP, you can run this command: - -```bash -kubectl run get-gateway-ip --image=ubuntu:latest -i --tty --rm -``` - -This command will create a temporary pod and open a console. - -You may have to wait a bit to let the pod be created. Once the shell appears, you can run this command: - -```bash -apt update && apt upgrade -y && apt install -y curl && curl ifconfig.ovh -``` - -The public IP of the Gateway you're using should appear. - -Click on the `Manage IP Access (ACL)`{.action} menu of our newly created volume: - -![Manage Access of the EFS Volume](images/manage-efs-volume-access.png){.thumbnail} - -Add either the nodes' IPs one by one or the Gateway's public IP depending on your configuration: - -![Allow nodes IP to access the EFS Volume](images/manage-efs-volume-access-ip.png){.thumbnail} - -You should now have something similar to this: - -![EFS Configuration](images/manage-efs-volume-acl-list.png){.thumbnail} - -### Step 2 - Configuring Kubernetes to use our newly created EFS volume - -Your Kubernetes cluster needs some additional piece of software to make use of the Enterprise File Storage volume. We will install those and then create a first volume, shared across multiple pods. - -To do so, you can install the [csi-driver-nfs](https://github.com/kubernetes-csi/csi-driver-nfs): - -```bash -helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts -helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set controller.name="csi-nfs2-controller" --set rbac.name=nfs2 -``` - -```console -$ helm install csi-driver-nfs -n kube-system csi-driver-nfs/csi-driver-nfs --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set rbac.name=nfs --set controller.name="csi-nfs2-controller" -NAME: csi-driver-nfs -LAST DEPLOYED: Mon Dec 16 16:13:31 2024 -NAMESPACE: kube-system -STATUS: deployed -REVISION: 1 -TEST SUITE: None -NOTES: -The CSI NFS Driver is getting deployed to your cluster. - -To check CSI NFS Driver pods status, please run: - - kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -``` - -Let's verify our installation: - -```bash -kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" -``` - -```console -$ kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -NAME READY STATUS RESTARTS AGE -csi-nfs-node-7kdwj 0/3 ContainerCreating 0 5s -csi-nfs-node-7smkb 0/3 ContainerCreating 0 5s -csi-nfs2-controller-68d7768f64-pzs74 0/4 ContainerCreating 0 5s -csi-nfs-node-7kdwj 3/3 Running 0 11s -csi-nfs-node-7smkb 3/3 Running 0 20s -csi-nfs2-controller-68d7768f64-pzs74 4/4 Running 0 21s -``` - -### Step 3 - Create the NFS StorageClass Object - -Let's create a `efs-storageclass.yaml` file: - - -> [!primary] -> -> Don't forget to replace `[EFS_IP]`, `[EFS_PATH]` and `[PARTITION_NAME]` with the correct information. -> - -```yaml -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - name: nfs-csi -provisioner: nfs2.csi.k8s.io -parameters: - server: '[EFS_IP]' - share: '[EFS_PATH]' -reclaimPolicy: Delete -volumeBindingMode: Immediate -mountOptions: - - nfsvers=3 - - tcp -``` - -> [!primary] -> -> The `EFS_IP` is the private IP of your Enterprise File Storage and the `EFS_PATH` is the path to access your volume. -> -> The `tcp` parameter instructs the NFS mount to use the TCP protocol. -> - -Then apply the YAML file to create the StorageClass: - -```bash -kubectl apply -f efs-storageclass.yaml -``` - -### Step 4 - Create and use an NFS persistent volume - -Let’s create a `efs-persistent-volume-claim.yaml` file: - -```yaml -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: efs-pvc - namespace: default -spec: - accessModes: - - ReadWriteMany - storageClassName: nfs-csi - resources: - requests: - storage: 1Gi -``` - -And apply this to create the persistent volume claim: - -```bash -kubectl apply -f efs-persistent-volume-claim.yaml -``` - -You can find more information about the PVC by running this command: - -```bash -kubectl describe pvc efs-pvc -``` - -```console -$ kubectl describe pvc efs-pvc -Name: efs-pvc -Namespace: default -StorageClass: nfs-csi -Status: Bound -Volume: pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -Labels: -Annotations: pv.kubernetes.io/bind-completed: yes - pv.kubernetes.io/bound-by-controller: yes - volume.beta.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io - volume.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io -Finalizers: [kubernetes.io/pvc-protection] -Capacity: 1Gi -Access Modes: RWX -VolumeMode: Filesystem -Used By: -Events: - Type Reason Age From Message - ---- ------ ---- ---- ------- - Normal Provisioning 10s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 External provisioner is provisioning volume for claim "default/efs-pvc" - Normal ExternalProvisioning 10s persistentvolume-controller Waiting for a volume to be created either by the external provisioner 'nfs2.csi.k8s.io' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered. - Normal ProvisioningSucceeded 9s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 Successfully provisioned volume pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -``` - -By reading the events on this PersistentVolumeClaim, our PVC has been provisioned from our Enterprise File Storage. - -If you encounter errors such as: - -```console - Warning ProvisioningFailed 2s (x3 over 6s) nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-7f86e647-4632-4188-bfbe-84d11ea03426 -Output: mount.nfs: mounting 10.201.xx.xx:/share_xxx failed, reason given by server: No such file or directory -``` - -or similar to: - -```console - Warning ProvisioningFailed 1s (x3 over 4s) nfs2.csi.k8s.io_nodepool-cc5ad1db-f645-465c-85-node-6f9649_95fd7b5e-94aa-4c90-9ffa-9765beadfbe6 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-ebab8dfa-7ce8-4102-9ef5-5a626638f3b8 -Output: mount.nfs: access denied by server while mounting 10.201.xx.xx:/share_xxx - -``` - -It may indicate an issue with the Enterprise File Storage ACLs configuration. Check the authorized IPs which can access to the wanted partition on the ACLs list. - -> [!warning] -> If the number of __PersistentVolumes__ to schedule simultaneously is too important, some slowness can be encountered and volume creation can be delayed. - - -Let’s now create a DaemonSet of Nginx pods using the persistent volume claim as their webroot folder. - -Using a DaemonSet will create a pod on each deployed node and make troubleshooting easier in case of a misconfiguration or to isolate a node issue. - -Let's create a file named `nginx-daemonset.yaml`: - -```yaml -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: nfs-nginx - namespace: default -spec: - selector: - matchLabels: - name: nginx - template: - metadata: - labels: - name: nginx - spec: - volumes: - - name: nfs-volume - persistentVolumeClaim: - claimName: nfs-pvc - containers: - - name: nginx - image: nginx - ports: - - containerPort: 80 - name: "http-server" - volumeMounts: - - mountPath: "/usr/share/nginx/html" - name: nfs-volume -``` - -And apply this to create the Nginx DaemonSet: - -```bash -kubectl apply -f nginx-daemonset.yaml -``` - -Both pods should be running: - -```bash -kubectl get pods -NAME READY STATUS RESTARTS AGE -nfs-nginx-9z7wk 1/1 Running 0 11s -nfs-nginx-sfthh 1/1 Running 0 11s -``` - -Let’s enter inside the first Nginx pod and container to check if the Enterprise File Storage Volume is properly mounted and create a file on the NFS persistent volume: - -```bash -$ FIRST_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -1) -kubectl exec -it $FIRST_POD -n default -- bash -``` - -```bash -root@nfs-nginx-9z7wk:/# mount -l | grep nfs -10.201.xx.xx:/share_xxx/pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 on /usr/share/nginx/html type nfs (rw,relatime,vers=3,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.201.xx.xx,mountvers=3,mountport=635,mountproto=tcp,local_lock=none,addr=10.201.xx.xx) -``` - -Now, we will check if the EFS volume is properly shared between the deployed pods. - -Create a new `index.html` file: - -```bash -echo "NFS volume!" > /usr/share/nginx/html/index.html -``` - -And exit the Nginx container: - -```bash -exit -``` - -Let’s try to access our new web page: - -```bash -kubectl proxy -``` - -Generate the URL to open in your broswer: - -```bash -URL=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$FIRST_POD:/proxy/") -echo $URL -``` - -You can open the URL which is displayed to access the Nginx Service. - -Now let’s try to see if the data is shared with the second pod (if you have more than one node deployed). - -```bash -$ SECOND_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -2 | tail -1) -URL2=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$SECOND_POD:/proxy/") -echo $URL2 -``` - -You can open the URL which is displayed to access the Nginx Service on the other pod. - -As you can see the data is correctly shared between the two Nginx pods running on two different Kubernetes nodes. - -Congratulations, you have successfully set up a multi-attach persistent volume with OVHcloud Enterprise File Storage! - -## Go further - -To learn more about using your Kubernetes cluster the practical way, we invite you to look at our [OVHcloud Managed Kubernetes doc site](/products/public-cloud-containers-orchestration-managed-kubernetes-k8s). - -If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](/links/professional-services) to get a quote and ask our Professional Services experts for a custom analysis of your project. - -Join our [community of users](/links/community). \ No newline at end of file diff --git a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-au.md b/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-au.md deleted file mode 100644 index 6ca429e07ee..00000000000 --- a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-au.md +++ /dev/null @@ -1,411 +0,0 @@ ---- -title: Configuring multi-attach persistent volumes with Enterprise File Storage -excerpt: 'Find out how to configure a multi-attach persistent volume using our Enterprise File Storage solution' -updated: 2025-01-06 ---- - - - -## Objective - -OVHcloud Managed Kubernetes currently offers Block Storage for persistent volumes by default, but that may not be suited for applications that require a shared file system between multiple nodes. This tutorial shows how to configure a shared [Kubernetes Persistent Volume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) (AccessMode `ReadWriteMany` or `RWX`) using [OVHcloud Enterprise File Storage](/links/storage/enterprise-file-storage) as a storage backend. - -## Requirements - -This tutorial assumes that you already have a working [OVHcloud Managed Kubernetes](/links/public-cloud/kubernetes) cluster, and some basic knowledge of how to operate it. If you want to know more on those topics, please look at the [deploying a Hello World application](/pages/public_cloud/containers_orchestration/managed_kubernetes/deploying-hello-world) documentation. - -It also assumes you have an OVHcloud Enterprise File Storage already available. If you don't, you can [order one in the OVHcloud Control Panel](/links/manager). - -You also need to have [Helm](https://docs.helm.sh/) installed on your workstation. Please refer to the [How to install Helm on OVHcloud Managed Kubernetes Service](/pages/public_cloud/containers_orchestration/managed_kubernetes/installing-helm) tutorial. - - -## Instructions - -### Step 1 - Creating a volume and granting your Managed Kubernetes Service access to it - -Your Enterprise File Storage service can expose multiple volumes, and supports a variety of protocols. Each volume is accessible only from a specific range of IPs. We will create a new EFS volume and make it accessible from your Kubernetes worker nodes. - -You can find more information about our Enterprise File Storage product by clicking [here](/pages/storage_and_backup/file_storage/enterprise_file_storage/netapp_control_panel). - -Access the UI for OVHcloud Enterprise File Storage by clicking the `Storage and backups`{.action} then `Enterprise File Storage`{.action} menu in the [Bare Metal Cloud section of the OVHcloud Control Panel](/links/manager). - -Click your Enterprise File Storage service, then click the `Volumes`{.action} tab. Click the `Create a volume`{.action} button and create the new Enterprise File Storage volume with the following content: - -![Create an EFS volume](images/create-efs-volume.png){.thumbnail} - -Provide the following parameters to create a volume: - -| Name | Description | Required | -| ------------------- | -------------------------- | ------------- | -| Volume name | Name of the volume | False | -| Volume description | Description of the volume | False | -| Protocol | Protocol used to connect | True | -| Volume size | Size of the volume | True | - -The volume size needs to be adapted to your needs. For this guide, we define a volume size of 100 GiB. - -Once your volume is created, click on its ID and select `Access Control List`{.action}. -Enter your Nodes' public IPs and/or your Public Cloud Gateway public IP into the volume's ACLs. This will ensure your Kubernetes worker nodes can reach the storage service. - -#### Your cluster is installed with Public Network or a private network without using an OVHcloud Internet Gateway or a custom one as your default route - -Once the volume is created, we need to allow our Kubernetes nodes to access it. - -Get our Kubernetes nodes IP: - -```bash -kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -``` - -```console -$ kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -51.128.xx.xx 37.59.xx.xx -``` - -#### Your cluster is installed with Private Network and a default route via your Private Network (OVHcloud Internet Gateway/OpenStack Router or a custom one) - -Because your nodes are configured to be routed by the private network gateway, you need to add the gateway IP address to the ACLs. - -By using Public Cloud Gateway through our Managed Kubernetes Service, public IPs on nodes are only for management purposes: [MKS Known Limits](/pages/public_cloud/containers_orchestration/managed_kubernetes/known-limits) - -You can get your OVHcloud Internet Gateway's public IP by navigating through the OVHcloud Control Panel: - -`Public Cloud`{.action} > Select your tenant > `Network / Gateway`{.action} > `Public IP`{.action} - -You can also get your OVHcloud Internet Gateway's public IP via the following API: - -> [!api] -> -> @api {v1} /cloud GET /cloud/project/{serviceName}/region/{regionName}/gateway/{id} -> - -> [!success] -> If you are not familiar with the OVHcloud API, read our [First Steps with the OVHcloud API](/pages/manage_and_operate/api/first-steps) guide. - -If you want to use your Kubernetes cluster to know your Gateway's public IP, you can run this command: - -```bash -kubectl run get-gateway-ip --image=ubuntu:latest -i --tty --rm -``` - -This command will create a temporary pod and open a console. - -You may have to wait a bit to let the pod be created. Once the shell appears, you can run this command: - -```bash -apt update && apt upgrade -y && apt install -y curl && curl ifconfig.ovh -``` - -The public IP of the Gateway you're using should appear. - -Click on the `Manage IP Access (ACL)`{.action} menu of our newly created volume: - -![Manage Access of the EFS Volume](images/manage-efs-volume-access.png){.thumbnail} - -Add either the nodes' IPs one by one or the Gateway's public IP depending on your configuration: - -![Allow nodes IP to access the EFS Volume](images/manage-efs-volume-access-ip.png){.thumbnail} - -You should now have something similar to this: - -![EFS Configuration](images/manage-efs-volume-acl-list.png){.thumbnail} - -### Step 2 - Configuring Kubernetes to use our newly created EFS volume - -Your Kubernetes cluster needs some additional piece of software to make use of the Enterprise File Storage volume. We will install those and then create a first volume, shared across multiple pods. - -To do so, you can install the [csi-driver-nfs](https://github.com/kubernetes-csi/csi-driver-nfs): - -```bash -helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts -helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set controller.name="csi-nfs2-controller" --set rbac.name=nfs2 -``` - -```console -$ helm install csi-driver-nfs -n kube-system csi-driver-nfs/csi-driver-nfs --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set rbac.name=nfs --set controller.name="csi-nfs2-controller" -NAME: csi-driver-nfs -LAST DEPLOYED: Mon Dec 16 16:13:31 2024 -NAMESPACE: kube-system -STATUS: deployed -REVISION: 1 -TEST SUITE: None -NOTES: -The CSI NFS Driver is getting deployed to your cluster. - -To check CSI NFS Driver pods status, please run: - - kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -``` - -Let's verify our installation: - -```bash -kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" -``` - -```console -$ kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -NAME READY STATUS RESTARTS AGE -csi-nfs-node-7kdwj 0/3 ContainerCreating 0 5s -csi-nfs-node-7smkb 0/3 ContainerCreating 0 5s -csi-nfs2-controller-68d7768f64-pzs74 0/4 ContainerCreating 0 5s -csi-nfs-node-7kdwj 3/3 Running 0 11s -csi-nfs-node-7smkb 3/3 Running 0 20s -csi-nfs2-controller-68d7768f64-pzs74 4/4 Running 0 21s -``` - -### Step 3 - Create the NFS StorageClass Object - -Let's create a `efs-storageclass.yaml` file: - - -> [!primary] -> -> Don't forget to replace `[EFS_IP]`, `[EFS_PATH]` and `[PARTITION_NAME]` with the correct information. -> - -```yaml -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - name: nfs-csi -provisioner: nfs2.csi.k8s.io -parameters: - server: '[EFS_IP]' - share: '[EFS_PATH]' -reclaimPolicy: Delete -volumeBindingMode: Immediate -mountOptions: - - nfsvers=3 - - tcp -``` - -> [!primary] -> -> The `EFS_IP` is the private IP of your Enterprise File Storage and the `EFS_PATH` is the path to access your volume. -> -> The `tcp` parameter instructs the NFS mount to use the TCP protocol. -> - -Then apply the YAML file to create the StorageClass: - -```bash -kubectl apply -f efs-storageclass.yaml -``` - -### Step 4 - Create and use an NFS persistent volume - -Let’s create a `efs-persistent-volume-claim.yaml` file: - -```yaml -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: efs-pvc - namespace: default -spec: - accessModes: - - ReadWriteMany - storageClassName: nfs-csi - resources: - requests: - storage: 1Gi -``` - -And apply this to create the persistent volume claim: - -```bash -kubectl apply -f efs-persistent-volume-claim.yaml -``` - -You can find more information about the PVC by running this command: - -```bash -kubectl describe pvc efs-pvc -``` - -```console -$ kubectl describe pvc efs-pvc -Name: efs-pvc -Namespace: default -StorageClass: nfs-csi -Status: Bound -Volume: pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -Labels: -Annotations: pv.kubernetes.io/bind-completed: yes - pv.kubernetes.io/bound-by-controller: yes - volume.beta.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io - volume.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io -Finalizers: [kubernetes.io/pvc-protection] -Capacity: 1Gi -Access Modes: RWX -VolumeMode: Filesystem -Used By: -Events: - Type Reason Age From Message - ---- ------ ---- ---- ------- - Normal Provisioning 10s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 External provisioner is provisioning volume for claim "default/efs-pvc" - Normal ExternalProvisioning 10s persistentvolume-controller Waiting for a volume to be created either by the external provisioner 'nfs2.csi.k8s.io' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered. - Normal ProvisioningSucceeded 9s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 Successfully provisioned volume pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -``` - -By reading the events on this PersistentVolumeClaim, our PVC has been provisioned from our Enterprise File Storage. - -If you encounter errors such as: - -```console - Warning ProvisioningFailed 2s (x3 over 6s) nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-7f86e647-4632-4188-bfbe-84d11ea03426 -Output: mount.nfs: mounting 10.201.xx.xx:/share_xxx failed, reason given by server: No such file or directory -``` - -or similar to: - -```console - Warning ProvisioningFailed 1s (x3 over 4s) nfs2.csi.k8s.io_nodepool-cc5ad1db-f645-465c-85-node-6f9649_95fd7b5e-94aa-4c90-9ffa-9765beadfbe6 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-ebab8dfa-7ce8-4102-9ef5-5a626638f3b8 -Output: mount.nfs: access denied by server while mounting 10.201.xx.xx:/share_xxx - -``` - -It may indicate an issue with the Enterprise File Storage ACLs configuration. Check the authorized IPs which can access to the wanted partition on the ACLs list. - -> [!warning] -> If the number of __PersistentVolumes__ to schedule simultaneously is too important, some slowness can be encountered and volume creation can be delayed. - - -Let’s now create a DaemonSet of Nginx pods using the persistent volume claim as their webroot folder. - -Using a DaemonSet will create a pod on each deployed node and make troubleshooting easier in case of a misconfiguration or to isolate a node issue. - -Let's create a file named `nginx-daemonset.yaml`: - -```yaml -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: nfs-nginx - namespace: default -spec: - selector: - matchLabels: - name: nginx - template: - metadata: - labels: - name: nginx - spec: - volumes: - - name: nfs-volume - persistentVolumeClaim: - claimName: nfs-pvc - containers: - - name: nginx - image: nginx - ports: - - containerPort: 80 - name: "http-server" - volumeMounts: - - mountPath: "/usr/share/nginx/html" - name: nfs-volume -``` - -And apply this to create the Nginx DaemonSet: - -```bash -kubectl apply -f nginx-daemonset.yaml -``` - -Both pods should be running: - -```bash -kubectl get pods -NAME READY STATUS RESTARTS AGE -nfs-nginx-9z7wk 1/1 Running 0 11s -nfs-nginx-sfthh 1/1 Running 0 11s -``` - -Let’s enter inside the first Nginx pod and container to check if the Enterprise File Storage Volume is properly mounted and create a file on the NFS persistent volume: - -```bash -$ FIRST_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -1) -kubectl exec -it $FIRST_POD -n default -- bash -``` - -```bash -root@nfs-nginx-9z7wk:/# mount -l | grep nfs -10.201.xx.xx:/share_xxx/pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 on /usr/share/nginx/html type nfs (rw,relatime,vers=3,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.201.xx.xx,mountvers=3,mountport=635,mountproto=tcp,local_lock=none,addr=10.201.xx.xx) -``` - -Now, we will check if the EFS volume is properly shared between the deployed pods. - -Create a new `index.html` file: - -```bash -echo "NFS volume!" > /usr/share/nginx/html/index.html -``` - -And exit the Nginx container: - -```bash -exit -``` - -Let’s try to access our new web page: - -```bash -kubectl proxy -``` - -Generate the URL to open in your broswer: - -```bash -URL=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$FIRST_POD:/proxy/") -echo $URL -``` - -You can open the URL which is displayed to access the Nginx Service. - -Now let’s try to see if the data is shared with the second pod (if you have more than one node deployed). - -```bash -$ SECOND_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -2 | tail -1) -URL2=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$SECOND_POD:/proxy/") -echo $URL2 -``` - -You can open the URL which is displayed to access the Nginx Service on the other pod. - -As you can see the data is correctly shared between the two Nginx pods running on two different Kubernetes nodes. - -Congratulations, you have successfully set up a multi-attach persistent volume with OVHcloud Enterprise File Storage! - -## Go further - -To learn more about using your Kubernetes cluster the practical way, we invite you to look at our [OVHcloud Managed Kubernetes doc site](/products/public-cloud-containers-orchestration-managed-kubernetes-k8s). - -If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](/links/professional-services) to get a quote and ask our Professional Services experts for a custom analysis of your project. - -Join our [community of users](/links/community). \ No newline at end of file diff --git a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-ca.md b/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-ca.md deleted file mode 100644 index 6ca429e07ee..00000000000 --- a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-ca.md +++ /dev/null @@ -1,411 +0,0 @@ ---- -title: Configuring multi-attach persistent volumes with Enterprise File Storage -excerpt: 'Find out how to configure a multi-attach persistent volume using our Enterprise File Storage solution' -updated: 2025-01-06 ---- - - - -## Objective - -OVHcloud Managed Kubernetes currently offers Block Storage for persistent volumes by default, but that may not be suited for applications that require a shared file system between multiple nodes. This tutorial shows how to configure a shared [Kubernetes Persistent Volume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) (AccessMode `ReadWriteMany` or `RWX`) using [OVHcloud Enterprise File Storage](/links/storage/enterprise-file-storage) as a storage backend. - -## Requirements - -This tutorial assumes that you already have a working [OVHcloud Managed Kubernetes](/links/public-cloud/kubernetes) cluster, and some basic knowledge of how to operate it. If you want to know more on those topics, please look at the [deploying a Hello World application](/pages/public_cloud/containers_orchestration/managed_kubernetes/deploying-hello-world) documentation. - -It also assumes you have an OVHcloud Enterprise File Storage already available. If you don't, you can [order one in the OVHcloud Control Panel](/links/manager). - -You also need to have [Helm](https://docs.helm.sh/) installed on your workstation. Please refer to the [How to install Helm on OVHcloud Managed Kubernetes Service](/pages/public_cloud/containers_orchestration/managed_kubernetes/installing-helm) tutorial. - - -## Instructions - -### Step 1 - Creating a volume and granting your Managed Kubernetes Service access to it - -Your Enterprise File Storage service can expose multiple volumes, and supports a variety of protocols. Each volume is accessible only from a specific range of IPs. We will create a new EFS volume and make it accessible from your Kubernetes worker nodes. - -You can find more information about our Enterprise File Storage product by clicking [here](/pages/storage_and_backup/file_storage/enterprise_file_storage/netapp_control_panel). - -Access the UI for OVHcloud Enterprise File Storage by clicking the `Storage and backups`{.action} then `Enterprise File Storage`{.action} menu in the [Bare Metal Cloud section of the OVHcloud Control Panel](/links/manager). - -Click your Enterprise File Storage service, then click the `Volumes`{.action} tab. Click the `Create a volume`{.action} button and create the new Enterprise File Storage volume with the following content: - -![Create an EFS volume](images/create-efs-volume.png){.thumbnail} - -Provide the following parameters to create a volume: - -| Name | Description | Required | -| ------------------- | -------------------------- | ------------- | -| Volume name | Name of the volume | False | -| Volume description | Description of the volume | False | -| Protocol | Protocol used to connect | True | -| Volume size | Size of the volume | True | - -The volume size needs to be adapted to your needs. For this guide, we define a volume size of 100 GiB. - -Once your volume is created, click on its ID and select `Access Control List`{.action}. -Enter your Nodes' public IPs and/or your Public Cloud Gateway public IP into the volume's ACLs. This will ensure your Kubernetes worker nodes can reach the storage service. - -#### Your cluster is installed with Public Network or a private network without using an OVHcloud Internet Gateway or a custom one as your default route - -Once the volume is created, we need to allow our Kubernetes nodes to access it. - -Get our Kubernetes nodes IP: - -```bash -kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -``` - -```console -$ kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -51.128.xx.xx 37.59.xx.xx -``` - -#### Your cluster is installed with Private Network and a default route via your Private Network (OVHcloud Internet Gateway/OpenStack Router or a custom one) - -Because your nodes are configured to be routed by the private network gateway, you need to add the gateway IP address to the ACLs. - -By using Public Cloud Gateway through our Managed Kubernetes Service, public IPs on nodes are only for management purposes: [MKS Known Limits](/pages/public_cloud/containers_orchestration/managed_kubernetes/known-limits) - -You can get your OVHcloud Internet Gateway's public IP by navigating through the OVHcloud Control Panel: - -`Public Cloud`{.action} > Select your tenant > `Network / Gateway`{.action} > `Public IP`{.action} - -You can also get your OVHcloud Internet Gateway's public IP via the following API: - -> [!api] -> -> @api {v1} /cloud GET /cloud/project/{serviceName}/region/{regionName}/gateway/{id} -> - -> [!success] -> If you are not familiar with the OVHcloud API, read our [First Steps with the OVHcloud API](/pages/manage_and_operate/api/first-steps) guide. - -If you want to use your Kubernetes cluster to know your Gateway's public IP, you can run this command: - -```bash -kubectl run get-gateway-ip --image=ubuntu:latest -i --tty --rm -``` - -This command will create a temporary pod and open a console. - -You may have to wait a bit to let the pod be created. Once the shell appears, you can run this command: - -```bash -apt update && apt upgrade -y && apt install -y curl && curl ifconfig.ovh -``` - -The public IP of the Gateway you're using should appear. - -Click on the `Manage IP Access (ACL)`{.action} menu of our newly created volume: - -![Manage Access of the EFS Volume](images/manage-efs-volume-access.png){.thumbnail} - -Add either the nodes' IPs one by one or the Gateway's public IP depending on your configuration: - -![Allow nodes IP to access the EFS Volume](images/manage-efs-volume-access-ip.png){.thumbnail} - -You should now have something similar to this: - -![EFS Configuration](images/manage-efs-volume-acl-list.png){.thumbnail} - -### Step 2 - Configuring Kubernetes to use our newly created EFS volume - -Your Kubernetes cluster needs some additional piece of software to make use of the Enterprise File Storage volume. We will install those and then create a first volume, shared across multiple pods. - -To do so, you can install the [csi-driver-nfs](https://github.com/kubernetes-csi/csi-driver-nfs): - -```bash -helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts -helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set controller.name="csi-nfs2-controller" --set rbac.name=nfs2 -``` - -```console -$ helm install csi-driver-nfs -n kube-system csi-driver-nfs/csi-driver-nfs --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set rbac.name=nfs --set controller.name="csi-nfs2-controller" -NAME: csi-driver-nfs -LAST DEPLOYED: Mon Dec 16 16:13:31 2024 -NAMESPACE: kube-system -STATUS: deployed -REVISION: 1 -TEST SUITE: None -NOTES: -The CSI NFS Driver is getting deployed to your cluster. - -To check CSI NFS Driver pods status, please run: - - kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -``` - -Let's verify our installation: - -```bash -kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" -``` - -```console -$ kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -NAME READY STATUS RESTARTS AGE -csi-nfs-node-7kdwj 0/3 ContainerCreating 0 5s -csi-nfs-node-7smkb 0/3 ContainerCreating 0 5s -csi-nfs2-controller-68d7768f64-pzs74 0/4 ContainerCreating 0 5s -csi-nfs-node-7kdwj 3/3 Running 0 11s -csi-nfs-node-7smkb 3/3 Running 0 20s -csi-nfs2-controller-68d7768f64-pzs74 4/4 Running 0 21s -``` - -### Step 3 - Create the NFS StorageClass Object - -Let's create a `efs-storageclass.yaml` file: - - -> [!primary] -> -> Don't forget to replace `[EFS_IP]`, `[EFS_PATH]` and `[PARTITION_NAME]` with the correct information. -> - -```yaml -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - name: nfs-csi -provisioner: nfs2.csi.k8s.io -parameters: - server: '[EFS_IP]' - share: '[EFS_PATH]' -reclaimPolicy: Delete -volumeBindingMode: Immediate -mountOptions: - - nfsvers=3 - - tcp -``` - -> [!primary] -> -> The `EFS_IP` is the private IP of your Enterprise File Storage and the `EFS_PATH` is the path to access your volume. -> -> The `tcp` parameter instructs the NFS mount to use the TCP protocol. -> - -Then apply the YAML file to create the StorageClass: - -```bash -kubectl apply -f efs-storageclass.yaml -``` - -### Step 4 - Create and use an NFS persistent volume - -Let’s create a `efs-persistent-volume-claim.yaml` file: - -```yaml -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: efs-pvc - namespace: default -spec: - accessModes: - - ReadWriteMany - storageClassName: nfs-csi - resources: - requests: - storage: 1Gi -``` - -And apply this to create the persistent volume claim: - -```bash -kubectl apply -f efs-persistent-volume-claim.yaml -``` - -You can find more information about the PVC by running this command: - -```bash -kubectl describe pvc efs-pvc -``` - -```console -$ kubectl describe pvc efs-pvc -Name: efs-pvc -Namespace: default -StorageClass: nfs-csi -Status: Bound -Volume: pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -Labels: -Annotations: pv.kubernetes.io/bind-completed: yes - pv.kubernetes.io/bound-by-controller: yes - volume.beta.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io - volume.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io -Finalizers: [kubernetes.io/pvc-protection] -Capacity: 1Gi -Access Modes: RWX -VolumeMode: Filesystem -Used By: -Events: - Type Reason Age From Message - ---- ------ ---- ---- ------- - Normal Provisioning 10s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 External provisioner is provisioning volume for claim "default/efs-pvc" - Normal ExternalProvisioning 10s persistentvolume-controller Waiting for a volume to be created either by the external provisioner 'nfs2.csi.k8s.io' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered. - Normal ProvisioningSucceeded 9s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 Successfully provisioned volume pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -``` - -By reading the events on this PersistentVolumeClaim, our PVC has been provisioned from our Enterprise File Storage. - -If you encounter errors such as: - -```console - Warning ProvisioningFailed 2s (x3 over 6s) nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-7f86e647-4632-4188-bfbe-84d11ea03426 -Output: mount.nfs: mounting 10.201.xx.xx:/share_xxx failed, reason given by server: No such file or directory -``` - -or similar to: - -```console - Warning ProvisioningFailed 1s (x3 over 4s) nfs2.csi.k8s.io_nodepool-cc5ad1db-f645-465c-85-node-6f9649_95fd7b5e-94aa-4c90-9ffa-9765beadfbe6 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-ebab8dfa-7ce8-4102-9ef5-5a626638f3b8 -Output: mount.nfs: access denied by server while mounting 10.201.xx.xx:/share_xxx - -``` - -It may indicate an issue with the Enterprise File Storage ACLs configuration. Check the authorized IPs which can access to the wanted partition on the ACLs list. - -> [!warning] -> If the number of __PersistentVolumes__ to schedule simultaneously is too important, some slowness can be encountered and volume creation can be delayed. - - -Let’s now create a DaemonSet of Nginx pods using the persistent volume claim as their webroot folder. - -Using a DaemonSet will create a pod on each deployed node and make troubleshooting easier in case of a misconfiguration or to isolate a node issue. - -Let's create a file named `nginx-daemonset.yaml`: - -```yaml -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: nfs-nginx - namespace: default -spec: - selector: - matchLabels: - name: nginx - template: - metadata: - labels: - name: nginx - spec: - volumes: - - name: nfs-volume - persistentVolumeClaim: - claimName: nfs-pvc - containers: - - name: nginx - image: nginx - ports: - - containerPort: 80 - name: "http-server" - volumeMounts: - - mountPath: "/usr/share/nginx/html" - name: nfs-volume -``` - -And apply this to create the Nginx DaemonSet: - -```bash -kubectl apply -f nginx-daemonset.yaml -``` - -Both pods should be running: - -```bash -kubectl get pods -NAME READY STATUS RESTARTS AGE -nfs-nginx-9z7wk 1/1 Running 0 11s -nfs-nginx-sfthh 1/1 Running 0 11s -``` - -Let’s enter inside the first Nginx pod and container to check if the Enterprise File Storage Volume is properly mounted and create a file on the NFS persistent volume: - -```bash -$ FIRST_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -1) -kubectl exec -it $FIRST_POD -n default -- bash -``` - -```bash -root@nfs-nginx-9z7wk:/# mount -l | grep nfs -10.201.xx.xx:/share_xxx/pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 on /usr/share/nginx/html type nfs (rw,relatime,vers=3,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.201.xx.xx,mountvers=3,mountport=635,mountproto=tcp,local_lock=none,addr=10.201.xx.xx) -``` - -Now, we will check if the EFS volume is properly shared between the deployed pods. - -Create a new `index.html` file: - -```bash -echo "NFS volume!" > /usr/share/nginx/html/index.html -``` - -And exit the Nginx container: - -```bash -exit -``` - -Let’s try to access our new web page: - -```bash -kubectl proxy -``` - -Generate the URL to open in your broswer: - -```bash -URL=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$FIRST_POD:/proxy/") -echo $URL -``` - -You can open the URL which is displayed to access the Nginx Service. - -Now let’s try to see if the data is shared with the second pod (if you have more than one node deployed). - -```bash -$ SECOND_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -2 | tail -1) -URL2=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$SECOND_POD:/proxy/") -echo $URL2 -``` - -You can open the URL which is displayed to access the Nginx Service on the other pod. - -As you can see the data is correctly shared between the two Nginx pods running on two different Kubernetes nodes. - -Congratulations, you have successfully set up a multi-attach persistent volume with OVHcloud Enterprise File Storage! - -## Go further - -To learn more about using your Kubernetes cluster the practical way, we invite you to look at our [OVHcloud Managed Kubernetes doc site](/products/public-cloud-containers-orchestration-managed-kubernetes-k8s). - -If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](/links/professional-services) to get a quote and ask our Professional Services experts for a custom analysis of your project. - -Join our [community of users](/links/community). \ No newline at end of file diff --git a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-gb.md b/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-gb.md deleted file mode 100644 index 6ca429e07ee..00000000000 --- a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-gb.md +++ /dev/null @@ -1,411 +0,0 @@ ---- -title: Configuring multi-attach persistent volumes with Enterprise File Storage -excerpt: 'Find out how to configure a multi-attach persistent volume using our Enterprise File Storage solution' -updated: 2025-01-06 ---- - - - -## Objective - -OVHcloud Managed Kubernetes currently offers Block Storage for persistent volumes by default, but that may not be suited for applications that require a shared file system between multiple nodes. This tutorial shows how to configure a shared [Kubernetes Persistent Volume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) (AccessMode `ReadWriteMany` or `RWX`) using [OVHcloud Enterprise File Storage](/links/storage/enterprise-file-storage) as a storage backend. - -## Requirements - -This tutorial assumes that you already have a working [OVHcloud Managed Kubernetes](/links/public-cloud/kubernetes) cluster, and some basic knowledge of how to operate it. If you want to know more on those topics, please look at the [deploying a Hello World application](/pages/public_cloud/containers_orchestration/managed_kubernetes/deploying-hello-world) documentation. - -It also assumes you have an OVHcloud Enterprise File Storage already available. If you don't, you can [order one in the OVHcloud Control Panel](/links/manager). - -You also need to have [Helm](https://docs.helm.sh/) installed on your workstation. Please refer to the [How to install Helm on OVHcloud Managed Kubernetes Service](/pages/public_cloud/containers_orchestration/managed_kubernetes/installing-helm) tutorial. - - -## Instructions - -### Step 1 - Creating a volume and granting your Managed Kubernetes Service access to it - -Your Enterprise File Storage service can expose multiple volumes, and supports a variety of protocols. Each volume is accessible only from a specific range of IPs. We will create a new EFS volume and make it accessible from your Kubernetes worker nodes. - -You can find more information about our Enterprise File Storage product by clicking [here](/pages/storage_and_backup/file_storage/enterprise_file_storage/netapp_control_panel). - -Access the UI for OVHcloud Enterprise File Storage by clicking the `Storage and backups`{.action} then `Enterprise File Storage`{.action} menu in the [Bare Metal Cloud section of the OVHcloud Control Panel](/links/manager). - -Click your Enterprise File Storage service, then click the `Volumes`{.action} tab. Click the `Create a volume`{.action} button and create the new Enterprise File Storage volume with the following content: - -![Create an EFS volume](images/create-efs-volume.png){.thumbnail} - -Provide the following parameters to create a volume: - -| Name | Description | Required | -| ------------------- | -------------------------- | ------------- | -| Volume name | Name of the volume | False | -| Volume description | Description of the volume | False | -| Protocol | Protocol used to connect | True | -| Volume size | Size of the volume | True | - -The volume size needs to be adapted to your needs. For this guide, we define a volume size of 100 GiB. - -Once your volume is created, click on its ID and select `Access Control List`{.action}. -Enter your Nodes' public IPs and/or your Public Cloud Gateway public IP into the volume's ACLs. This will ensure your Kubernetes worker nodes can reach the storage service. - -#### Your cluster is installed with Public Network or a private network without using an OVHcloud Internet Gateway or a custom one as your default route - -Once the volume is created, we need to allow our Kubernetes nodes to access it. - -Get our Kubernetes nodes IP: - -```bash -kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -``` - -```console -$ kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -51.128.xx.xx 37.59.xx.xx -``` - -#### Your cluster is installed with Private Network and a default route via your Private Network (OVHcloud Internet Gateway/OpenStack Router or a custom one) - -Because your nodes are configured to be routed by the private network gateway, you need to add the gateway IP address to the ACLs. - -By using Public Cloud Gateway through our Managed Kubernetes Service, public IPs on nodes are only for management purposes: [MKS Known Limits](/pages/public_cloud/containers_orchestration/managed_kubernetes/known-limits) - -You can get your OVHcloud Internet Gateway's public IP by navigating through the OVHcloud Control Panel: - -`Public Cloud`{.action} > Select your tenant > `Network / Gateway`{.action} > `Public IP`{.action} - -You can also get your OVHcloud Internet Gateway's public IP via the following API: - -> [!api] -> -> @api {v1} /cloud GET /cloud/project/{serviceName}/region/{regionName}/gateway/{id} -> - -> [!success] -> If you are not familiar with the OVHcloud API, read our [First Steps with the OVHcloud API](/pages/manage_and_operate/api/first-steps) guide. - -If you want to use your Kubernetes cluster to know your Gateway's public IP, you can run this command: - -```bash -kubectl run get-gateway-ip --image=ubuntu:latest -i --tty --rm -``` - -This command will create a temporary pod and open a console. - -You may have to wait a bit to let the pod be created. Once the shell appears, you can run this command: - -```bash -apt update && apt upgrade -y && apt install -y curl && curl ifconfig.ovh -``` - -The public IP of the Gateway you're using should appear. - -Click on the `Manage IP Access (ACL)`{.action} menu of our newly created volume: - -![Manage Access of the EFS Volume](images/manage-efs-volume-access.png){.thumbnail} - -Add either the nodes' IPs one by one or the Gateway's public IP depending on your configuration: - -![Allow nodes IP to access the EFS Volume](images/manage-efs-volume-access-ip.png){.thumbnail} - -You should now have something similar to this: - -![EFS Configuration](images/manage-efs-volume-acl-list.png){.thumbnail} - -### Step 2 - Configuring Kubernetes to use our newly created EFS volume - -Your Kubernetes cluster needs some additional piece of software to make use of the Enterprise File Storage volume. We will install those and then create a first volume, shared across multiple pods. - -To do so, you can install the [csi-driver-nfs](https://github.com/kubernetes-csi/csi-driver-nfs): - -```bash -helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts -helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set controller.name="csi-nfs2-controller" --set rbac.name=nfs2 -``` - -```console -$ helm install csi-driver-nfs -n kube-system csi-driver-nfs/csi-driver-nfs --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set rbac.name=nfs --set controller.name="csi-nfs2-controller" -NAME: csi-driver-nfs -LAST DEPLOYED: Mon Dec 16 16:13:31 2024 -NAMESPACE: kube-system -STATUS: deployed -REVISION: 1 -TEST SUITE: None -NOTES: -The CSI NFS Driver is getting deployed to your cluster. - -To check CSI NFS Driver pods status, please run: - - kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -``` - -Let's verify our installation: - -```bash -kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" -``` - -```console -$ kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -NAME READY STATUS RESTARTS AGE -csi-nfs-node-7kdwj 0/3 ContainerCreating 0 5s -csi-nfs-node-7smkb 0/3 ContainerCreating 0 5s -csi-nfs2-controller-68d7768f64-pzs74 0/4 ContainerCreating 0 5s -csi-nfs-node-7kdwj 3/3 Running 0 11s -csi-nfs-node-7smkb 3/3 Running 0 20s -csi-nfs2-controller-68d7768f64-pzs74 4/4 Running 0 21s -``` - -### Step 3 - Create the NFS StorageClass Object - -Let's create a `efs-storageclass.yaml` file: - - -> [!primary] -> -> Don't forget to replace `[EFS_IP]`, `[EFS_PATH]` and `[PARTITION_NAME]` with the correct information. -> - -```yaml -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - name: nfs-csi -provisioner: nfs2.csi.k8s.io -parameters: - server: '[EFS_IP]' - share: '[EFS_PATH]' -reclaimPolicy: Delete -volumeBindingMode: Immediate -mountOptions: - - nfsvers=3 - - tcp -``` - -> [!primary] -> -> The `EFS_IP` is the private IP of your Enterprise File Storage and the `EFS_PATH` is the path to access your volume. -> -> The `tcp` parameter instructs the NFS mount to use the TCP protocol. -> - -Then apply the YAML file to create the StorageClass: - -```bash -kubectl apply -f efs-storageclass.yaml -``` - -### Step 4 - Create and use an NFS persistent volume - -Let’s create a `efs-persistent-volume-claim.yaml` file: - -```yaml -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: efs-pvc - namespace: default -spec: - accessModes: - - ReadWriteMany - storageClassName: nfs-csi - resources: - requests: - storage: 1Gi -``` - -And apply this to create the persistent volume claim: - -```bash -kubectl apply -f efs-persistent-volume-claim.yaml -``` - -You can find more information about the PVC by running this command: - -```bash -kubectl describe pvc efs-pvc -``` - -```console -$ kubectl describe pvc efs-pvc -Name: efs-pvc -Namespace: default -StorageClass: nfs-csi -Status: Bound -Volume: pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -Labels: -Annotations: pv.kubernetes.io/bind-completed: yes - pv.kubernetes.io/bound-by-controller: yes - volume.beta.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io - volume.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io -Finalizers: [kubernetes.io/pvc-protection] -Capacity: 1Gi -Access Modes: RWX -VolumeMode: Filesystem -Used By: -Events: - Type Reason Age From Message - ---- ------ ---- ---- ------- - Normal Provisioning 10s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 External provisioner is provisioning volume for claim "default/efs-pvc" - Normal ExternalProvisioning 10s persistentvolume-controller Waiting for a volume to be created either by the external provisioner 'nfs2.csi.k8s.io' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered. - Normal ProvisioningSucceeded 9s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 Successfully provisioned volume pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -``` - -By reading the events on this PersistentVolumeClaim, our PVC has been provisioned from our Enterprise File Storage. - -If you encounter errors such as: - -```console - Warning ProvisioningFailed 2s (x3 over 6s) nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-7f86e647-4632-4188-bfbe-84d11ea03426 -Output: mount.nfs: mounting 10.201.xx.xx:/share_xxx failed, reason given by server: No such file or directory -``` - -or similar to: - -```console - Warning ProvisioningFailed 1s (x3 over 4s) nfs2.csi.k8s.io_nodepool-cc5ad1db-f645-465c-85-node-6f9649_95fd7b5e-94aa-4c90-9ffa-9765beadfbe6 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-ebab8dfa-7ce8-4102-9ef5-5a626638f3b8 -Output: mount.nfs: access denied by server while mounting 10.201.xx.xx:/share_xxx - -``` - -It may indicate an issue with the Enterprise File Storage ACLs configuration. Check the authorized IPs which can access to the wanted partition on the ACLs list. - -> [!warning] -> If the number of __PersistentVolumes__ to schedule simultaneously is too important, some slowness can be encountered and volume creation can be delayed. - - -Let’s now create a DaemonSet of Nginx pods using the persistent volume claim as their webroot folder. - -Using a DaemonSet will create a pod on each deployed node and make troubleshooting easier in case of a misconfiguration or to isolate a node issue. - -Let's create a file named `nginx-daemonset.yaml`: - -```yaml -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: nfs-nginx - namespace: default -spec: - selector: - matchLabels: - name: nginx - template: - metadata: - labels: - name: nginx - spec: - volumes: - - name: nfs-volume - persistentVolumeClaim: - claimName: nfs-pvc - containers: - - name: nginx - image: nginx - ports: - - containerPort: 80 - name: "http-server" - volumeMounts: - - mountPath: "/usr/share/nginx/html" - name: nfs-volume -``` - -And apply this to create the Nginx DaemonSet: - -```bash -kubectl apply -f nginx-daemonset.yaml -``` - -Both pods should be running: - -```bash -kubectl get pods -NAME READY STATUS RESTARTS AGE -nfs-nginx-9z7wk 1/1 Running 0 11s -nfs-nginx-sfthh 1/1 Running 0 11s -``` - -Let’s enter inside the first Nginx pod and container to check if the Enterprise File Storage Volume is properly mounted and create a file on the NFS persistent volume: - -```bash -$ FIRST_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -1) -kubectl exec -it $FIRST_POD -n default -- bash -``` - -```bash -root@nfs-nginx-9z7wk:/# mount -l | grep nfs -10.201.xx.xx:/share_xxx/pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 on /usr/share/nginx/html type nfs (rw,relatime,vers=3,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.201.xx.xx,mountvers=3,mountport=635,mountproto=tcp,local_lock=none,addr=10.201.xx.xx) -``` - -Now, we will check if the EFS volume is properly shared between the deployed pods. - -Create a new `index.html` file: - -```bash -echo "NFS volume!" > /usr/share/nginx/html/index.html -``` - -And exit the Nginx container: - -```bash -exit -``` - -Let’s try to access our new web page: - -```bash -kubectl proxy -``` - -Generate the URL to open in your broswer: - -```bash -URL=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$FIRST_POD:/proxy/") -echo $URL -``` - -You can open the URL which is displayed to access the Nginx Service. - -Now let’s try to see if the data is shared with the second pod (if you have more than one node deployed). - -```bash -$ SECOND_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -2 | tail -1) -URL2=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$SECOND_POD:/proxy/") -echo $URL2 -``` - -You can open the URL which is displayed to access the Nginx Service on the other pod. - -As you can see the data is correctly shared between the two Nginx pods running on two different Kubernetes nodes. - -Congratulations, you have successfully set up a multi-attach persistent volume with OVHcloud Enterprise File Storage! - -## Go further - -To learn more about using your Kubernetes cluster the practical way, we invite you to look at our [OVHcloud Managed Kubernetes doc site](/products/public-cloud-containers-orchestration-managed-kubernetes-k8s). - -If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](/links/professional-services) to get a quote and ask our Professional Services experts for a custom analysis of your project. - -Join our [community of users](/links/community). \ No newline at end of file diff --git a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-ie.md b/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-ie.md deleted file mode 100644 index 6ca429e07ee..00000000000 --- a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-ie.md +++ /dev/null @@ -1,411 +0,0 @@ ---- -title: Configuring multi-attach persistent volumes with Enterprise File Storage -excerpt: 'Find out how to configure a multi-attach persistent volume using our Enterprise File Storage solution' -updated: 2025-01-06 ---- - - - -## Objective - -OVHcloud Managed Kubernetes currently offers Block Storage for persistent volumes by default, but that may not be suited for applications that require a shared file system between multiple nodes. This tutorial shows how to configure a shared [Kubernetes Persistent Volume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) (AccessMode `ReadWriteMany` or `RWX`) using [OVHcloud Enterprise File Storage](/links/storage/enterprise-file-storage) as a storage backend. - -## Requirements - -This tutorial assumes that you already have a working [OVHcloud Managed Kubernetes](/links/public-cloud/kubernetes) cluster, and some basic knowledge of how to operate it. If you want to know more on those topics, please look at the [deploying a Hello World application](/pages/public_cloud/containers_orchestration/managed_kubernetes/deploying-hello-world) documentation. - -It also assumes you have an OVHcloud Enterprise File Storage already available. If you don't, you can [order one in the OVHcloud Control Panel](/links/manager). - -You also need to have [Helm](https://docs.helm.sh/) installed on your workstation. Please refer to the [How to install Helm on OVHcloud Managed Kubernetes Service](/pages/public_cloud/containers_orchestration/managed_kubernetes/installing-helm) tutorial. - - -## Instructions - -### Step 1 - Creating a volume and granting your Managed Kubernetes Service access to it - -Your Enterprise File Storage service can expose multiple volumes, and supports a variety of protocols. Each volume is accessible only from a specific range of IPs. We will create a new EFS volume and make it accessible from your Kubernetes worker nodes. - -You can find more information about our Enterprise File Storage product by clicking [here](/pages/storage_and_backup/file_storage/enterprise_file_storage/netapp_control_panel). - -Access the UI for OVHcloud Enterprise File Storage by clicking the `Storage and backups`{.action} then `Enterprise File Storage`{.action} menu in the [Bare Metal Cloud section of the OVHcloud Control Panel](/links/manager). - -Click your Enterprise File Storage service, then click the `Volumes`{.action} tab. Click the `Create a volume`{.action} button and create the new Enterprise File Storage volume with the following content: - -![Create an EFS volume](images/create-efs-volume.png){.thumbnail} - -Provide the following parameters to create a volume: - -| Name | Description | Required | -| ------------------- | -------------------------- | ------------- | -| Volume name | Name of the volume | False | -| Volume description | Description of the volume | False | -| Protocol | Protocol used to connect | True | -| Volume size | Size of the volume | True | - -The volume size needs to be adapted to your needs. For this guide, we define a volume size of 100 GiB. - -Once your volume is created, click on its ID and select `Access Control List`{.action}. -Enter your Nodes' public IPs and/or your Public Cloud Gateway public IP into the volume's ACLs. This will ensure your Kubernetes worker nodes can reach the storage service. - -#### Your cluster is installed with Public Network or a private network without using an OVHcloud Internet Gateway or a custom one as your default route - -Once the volume is created, we need to allow our Kubernetes nodes to access it. - -Get our Kubernetes nodes IP: - -```bash -kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -``` - -```console -$ kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -51.128.xx.xx 37.59.xx.xx -``` - -#### Your cluster is installed with Private Network and a default route via your Private Network (OVHcloud Internet Gateway/OpenStack Router or a custom one) - -Because your nodes are configured to be routed by the private network gateway, you need to add the gateway IP address to the ACLs. - -By using Public Cloud Gateway through our Managed Kubernetes Service, public IPs on nodes are only for management purposes: [MKS Known Limits](/pages/public_cloud/containers_orchestration/managed_kubernetes/known-limits) - -You can get your OVHcloud Internet Gateway's public IP by navigating through the OVHcloud Control Panel: - -`Public Cloud`{.action} > Select your tenant > `Network / Gateway`{.action} > `Public IP`{.action} - -You can also get your OVHcloud Internet Gateway's public IP via the following API: - -> [!api] -> -> @api {v1} /cloud GET /cloud/project/{serviceName}/region/{regionName}/gateway/{id} -> - -> [!success] -> If you are not familiar with the OVHcloud API, read our [First Steps with the OVHcloud API](/pages/manage_and_operate/api/first-steps) guide. - -If you want to use your Kubernetes cluster to know your Gateway's public IP, you can run this command: - -```bash -kubectl run get-gateway-ip --image=ubuntu:latest -i --tty --rm -``` - -This command will create a temporary pod and open a console. - -You may have to wait a bit to let the pod be created. Once the shell appears, you can run this command: - -```bash -apt update && apt upgrade -y && apt install -y curl && curl ifconfig.ovh -``` - -The public IP of the Gateway you're using should appear. - -Click on the `Manage IP Access (ACL)`{.action} menu of our newly created volume: - -![Manage Access of the EFS Volume](images/manage-efs-volume-access.png){.thumbnail} - -Add either the nodes' IPs one by one or the Gateway's public IP depending on your configuration: - -![Allow nodes IP to access the EFS Volume](images/manage-efs-volume-access-ip.png){.thumbnail} - -You should now have something similar to this: - -![EFS Configuration](images/manage-efs-volume-acl-list.png){.thumbnail} - -### Step 2 - Configuring Kubernetes to use our newly created EFS volume - -Your Kubernetes cluster needs some additional piece of software to make use of the Enterprise File Storage volume. We will install those and then create a first volume, shared across multiple pods. - -To do so, you can install the [csi-driver-nfs](https://github.com/kubernetes-csi/csi-driver-nfs): - -```bash -helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts -helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set controller.name="csi-nfs2-controller" --set rbac.name=nfs2 -``` - -```console -$ helm install csi-driver-nfs -n kube-system csi-driver-nfs/csi-driver-nfs --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set rbac.name=nfs --set controller.name="csi-nfs2-controller" -NAME: csi-driver-nfs -LAST DEPLOYED: Mon Dec 16 16:13:31 2024 -NAMESPACE: kube-system -STATUS: deployed -REVISION: 1 -TEST SUITE: None -NOTES: -The CSI NFS Driver is getting deployed to your cluster. - -To check CSI NFS Driver pods status, please run: - - kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -``` - -Let's verify our installation: - -```bash -kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" -``` - -```console -$ kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -NAME READY STATUS RESTARTS AGE -csi-nfs-node-7kdwj 0/3 ContainerCreating 0 5s -csi-nfs-node-7smkb 0/3 ContainerCreating 0 5s -csi-nfs2-controller-68d7768f64-pzs74 0/4 ContainerCreating 0 5s -csi-nfs-node-7kdwj 3/3 Running 0 11s -csi-nfs-node-7smkb 3/3 Running 0 20s -csi-nfs2-controller-68d7768f64-pzs74 4/4 Running 0 21s -``` - -### Step 3 - Create the NFS StorageClass Object - -Let's create a `efs-storageclass.yaml` file: - - -> [!primary] -> -> Don't forget to replace `[EFS_IP]`, `[EFS_PATH]` and `[PARTITION_NAME]` with the correct information. -> - -```yaml -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - name: nfs-csi -provisioner: nfs2.csi.k8s.io -parameters: - server: '[EFS_IP]' - share: '[EFS_PATH]' -reclaimPolicy: Delete -volumeBindingMode: Immediate -mountOptions: - - nfsvers=3 - - tcp -``` - -> [!primary] -> -> The `EFS_IP` is the private IP of your Enterprise File Storage and the `EFS_PATH` is the path to access your volume. -> -> The `tcp` parameter instructs the NFS mount to use the TCP protocol. -> - -Then apply the YAML file to create the StorageClass: - -```bash -kubectl apply -f efs-storageclass.yaml -``` - -### Step 4 - Create and use an NFS persistent volume - -Let’s create a `efs-persistent-volume-claim.yaml` file: - -```yaml -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: efs-pvc - namespace: default -spec: - accessModes: - - ReadWriteMany - storageClassName: nfs-csi - resources: - requests: - storage: 1Gi -``` - -And apply this to create the persistent volume claim: - -```bash -kubectl apply -f efs-persistent-volume-claim.yaml -``` - -You can find more information about the PVC by running this command: - -```bash -kubectl describe pvc efs-pvc -``` - -```console -$ kubectl describe pvc efs-pvc -Name: efs-pvc -Namespace: default -StorageClass: nfs-csi -Status: Bound -Volume: pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -Labels: -Annotations: pv.kubernetes.io/bind-completed: yes - pv.kubernetes.io/bound-by-controller: yes - volume.beta.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io - volume.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io -Finalizers: [kubernetes.io/pvc-protection] -Capacity: 1Gi -Access Modes: RWX -VolumeMode: Filesystem -Used By: -Events: - Type Reason Age From Message - ---- ------ ---- ---- ------- - Normal Provisioning 10s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 External provisioner is provisioning volume for claim "default/efs-pvc" - Normal ExternalProvisioning 10s persistentvolume-controller Waiting for a volume to be created either by the external provisioner 'nfs2.csi.k8s.io' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered. - Normal ProvisioningSucceeded 9s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 Successfully provisioned volume pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -``` - -By reading the events on this PersistentVolumeClaim, our PVC has been provisioned from our Enterprise File Storage. - -If you encounter errors such as: - -```console - Warning ProvisioningFailed 2s (x3 over 6s) nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-7f86e647-4632-4188-bfbe-84d11ea03426 -Output: mount.nfs: mounting 10.201.xx.xx:/share_xxx failed, reason given by server: No such file or directory -``` - -or similar to: - -```console - Warning ProvisioningFailed 1s (x3 over 4s) nfs2.csi.k8s.io_nodepool-cc5ad1db-f645-465c-85-node-6f9649_95fd7b5e-94aa-4c90-9ffa-9765beadfbe6 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-ebab8dfa-7ce8-4102-9ef5-5a626638f3b8 -Output: mount.nfs: access denied by server while mounting 10.201.xx.xx:/share_xxx - -``` - -It may indicate an issue with the Enterprise File Storage ACLs configuration. Check the authorized IPs which can access to the wanted partition on the ACLs list. - -> [!warning] -> If the number of __PersistentVolumes__ to schedule simultaneously is too important, some slowness can be encountered and volume creation can be delayed. - - -Let’s now create a DaemonSet of Nginx pods using the persistent volume claim as their webroot folder. - -Using a DaemonSet will create a pod on each deployed node and make troubleshooting easier in case of a misconfiguration or to isolate a node issue. - -Let's create a file named `nginx-daemonset.yaml`: - -```yaml -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: nfs-nginx - namespace: default -spec: - selector: - matchLabels: - name: nginx - template: - metadata: - labels: - name: nginx - spec: - volumes: - - name: nfs-volume - persistentVolumeClaim: - claimName: nfs-pvc - containers: - - name: nginx - image: nginx - ports: - - containerPort: 80 - name: "http-server" - volumeMounts: - - mountPath: "/usr/share/nginx/html" - name: nfs-volume -``` - -And apply this to create the Nginx DaemonSet: - -```bash -kubectl apply -f nginx-daemonset.yaml -``` - -Both pods should be running: - -```bash -kubectl get pods -NAME READY STATUS RESTARTS AGE -nfs-nginx-9z7wk 1/1 Running 0 11s -nfs-nginx-sfthh 1/1 Running 0 11s -``` - -Let’s enter inside the first Nginx pod and container to check if the Enterprise File Storage Volume is properly mounted and create a file on the NFS persistent volume: - -```bash -$ FIRST_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -1) -kubectl exec -it $FIRST_POD -n default -- bash -``` - -```bash -root@nfs-nginx-9z7wk:/# mount -l | grep nfs -10.201.xx.xx:/share_xxx/pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 on /usr/share/nginx/html type nfs (rw,relatime,vers=3,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.201.xx.xx,mountvers=3,mountport=635,mountproto=tcp,local_lock=none,addr=10.201.xx.xx) -``` - -Now, we will check if the EFS volume is properly shared between the deployed pods. - -Create a new `index.html` file: - -```bash -echo "NFS volume!" > /usr/share/nginx/html/index.html -``` - -And exit the Nginx container: - -```bash -exit -``` - -Let’s try to access our new web page: - -```bash -kubectl proxy -``` - -Generate the URL to open in your broswer: - -```bash -URL=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$FIRST_POD:/proxy/") -echo $URL -``` - -You can open the URL which is displayed to access the Nginx Service. - -Now let’s try to see if the data is shared with the second pod (if you have more than one node deployed). - -```bash -$ SECOND_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -2 | tail -1) -URL2=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$SECOND_POD:/proxy/") -echo $URL2 -``` - -You can open the URL which is displayed to access the Nginx Service on the other pod. - -As you can see the data is correctly shared between the two Nginx pods running on two different Kubernetes nodes. - -Congratulations, you have successfully set up a multi-attach persistent volume with OVHcloud Enterprise File Storage! - -## Go further - -To learn more about using your Kubernetes cluster the practical way, we invite you to look at our [OVHcloud Managed Kubernetes doc site](/products/public-cloud-containers-orchestration-managed-kubernetes-k8s). - -If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](/links/professional-services) to get a quote and ask our Professional Services experts for a custom analysis of your project. - -Join our [community of users](/links/community). \ No newline at end of file diff --git a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-sg.md b/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-sg.md deleted file mode 100644 index 6ca429e07ee..00000000000 --- a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-sg.md +++ /dev/null @@ -1,411 +0,0 @@ ---- -title: Configuring multi-attach persistent volumes with Enterprise File Storage -excerpt: 'Find out how to configure a multi-attach persistent volume using our Enterprise File Storage solution' -updated: 2025-01-06 ---- - - - -## Objective - -OVHcloud Managed Kubernetes currently offers Block Storage for persistent volumes by default, but that may not be suited for applications that require a shared file system between multiple nodes. This tutorial shows how to configure a shared [Kubernetes Persistent Volume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) (AccessMode `ReadWriteMany` or `RWX`) using [OVHcloud Enterprise File Storage](/links/storage/enterprise-file-storage) as a storage backend. - -## Requirements - -This tutorial assumes that you already have a working [OVHcloud Managed Kubernetes](/links/public-cloud/kubernetes) cluster, and some basic knowledge of how to operate it. If you want to know more on those topics, please look at the [deploying a Hello World application](/pages/public_cloud/containers_orchestration/managed_kubernetes/deploying-hello-world) documentation. - -It also assumes you have an OVHcloud Enterprise File Storage already available. If you don't, you can [order one in the OVHcloud Control Panel](/links/manager). - -You also need to have [Helm](https://docs.helm.sh/) installed on your workstation. Please refer to the [How to install Helm on OVHcloud Managed Kubernetes Service](/pages/public_cloud/containers_orchestration/managed_kubernetes/installing-helm) tutorial. - - -## Instructions - -### Step 1 - Creating a volume and granting your Managed Kubernetes Service access to it - -Your Enterprise File Storage service can expose multiple volumes, and supports a variety of protocols. Each volume is accessible only from a specific range of IPs. We will create a new EFS volume and make it accessible from your Kubernetes worker nodes. - -You can find more information about our Enterprise File Storage product by clicking [here](/pages/storage_and_backup/file_storage/enterprise_file_storage/netapp_control_panel). - -Access the UI for OVHcloud Enterprise File Storage by clicking the `Storage and backups`{.action} then `Enterprise File Storage`{.action} menu in the [Bare Metal Cloud section of the OVHcloud Control Panel](/links/manager). - -Click your Enterprise File Storage service, then click the `Volumes`{.action} tab. Click the `Create a volume`{.action} button and create the new Enterprise File Storage volume with the following content: - -![Create an EFS volume](images/create-efs-volume.png){.thumbnail} - -Provide the following parameters to create a volume: - -| Name | Description | Required | -| ------------------- | -------------------------- | ------------- | -| Volume name | Name of the volume | False | -| Volume description | Description of the volume | False | -| Protocol | Protocol used to connect | True | -| Volume size | Size of the volume | True | - -The volume size needs to be adapted to your needs. For this guide, we define a volume size of 100 GiB. - -Once your volume is created, click on its ID and select `Access Control List`{.action}. -Enter your Nodes' public IPs and/or your Public Cloud Gateway public IP into the volume's ACLs. This will ensure your Kubernetes worker nodes can reach the storage service. - -#### Your cluster is installed with Public Network or a private network without using an OVHcloud Internet Gateway or a custom one as your default route - -Once the volume is created, we need to allow our Kubernetes nodes to access it. - -Get our Kubernetes nodes IP: - -```bash -kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -``` - -```console -$ kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -51.128.xx.xx 37.59.xx.xx -``` - -#### Your cluster is installed with Private Network and a default route via your Private Network (OVHcloud Internet Gateway/OpenStack Router or a custom one) - -Because your nodes are configured to be routed by the private network gateway, you need to add the gateway IP address to the ACLs. - -By using Public Cloud Gateway through our Managed Kubernetes Service, public IPs on nodes are only for management purposes: [MKS Known Limits](/pages/public_cloud/containers_orchestration/managed_kubernetes/known-limits) - -You can get your OVHcloud Internet Gateway's public IP by navigating through the OVHcloud Control Panel: - -`Public Cloud`{.action} > Select your tenant > `Network / Gateway`{.action} > `Public IP`{.action} - -You can also get your OVHcloud Internet Gateway's public IP via the following API: - -> [!api] -> -> @api {v1} /cloud GET /cloud/project/{serviceName}/region/{regionName}/gateway/{id} -> - -> [!success] -> If you are not familiar with the OVHcloud API, read our [First Steps with the OVHcloud API](/pages/manage_and_operate/api/first-steps) guide. - -If you want to use your Kubernetes cluster to know your Gateway's public IP, you can run this command: - -```bash -kubectl run get-gateway-ip --image=ubuntu:latest -i --tty --rm -``` - -This command will create a temporary pod and open a console. - -You may have to wait a bit to let the pod be created. Once the shell appears, you can run this command: - -```bash -apt update && apt upgrade -y && apt install -y curl && curl ifconfig.ovh -``` - -The public IP of the Gateway you're using should appear. - -Click on the `Manage IP Access (ACL)`{.action} menu of our newly created volume: - -![Manage Access of the EFS Volume](images/manage-efs-volume-access.png){.thumbnail} - -Add either the nodes' IPs one by one or the Gateway's public IP depending on your configuration: - -![Allow nodes IP to access the EFS Volume](images/manage-efs-volume-access-ip.png){.thumbnail} - -You should now have something similar to this: - -![EFS Configuration](images/manage-efs-volume-acl-list.png){.thumbnail} - -### Step 2 - Configuring Kubernetes to use our newly created EFS volume - -Your Kubernetes cluster needs some additional piece of software to make use of the Enterprise File Storage volume. We will install those and then create a first volume, shared across multiple pods. - -To do so, you can install the [csi-driver-nfs](https://github.com/kubernetes-csi/csi-driver-nfs): - -```bash -helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts -helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set controller.name="csi-nfs2-controller" --set rbac.name=nfs2 -``` - -```console -$ helm install csi-driver-nfs -n kube-system csi-driver-nfs/csi-driver-nfs --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set rbac.name=nfs --set controller.name="csi-nfs2-controller" -NAME: csi-driver-nfs -LAST DEPLOYED: Mon Dec 16 16:13:31 2024 -NAMESPACE: kube-system -STATUS: deployed -REVISION: 1 -TEST SUITE: None -NOTES: -The CSI NFS Driver is getting deployed to your cluster. - -To check CSI NFS Driver pods status, please run: - - kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -``` - -Let's verify our installation: - -```bash -kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" -``` - -```console -$ kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -NAME READY STATUS RESTARTS AGE -csi-nfs-node-7kdwj 0/3 ContainerCreating 0 5s -csi-nfs-node-7smkb 0/3 ContainerCreating 0 5s -csi-nfs2-controller-68d7768f64-pzs74 0/4 ContainerCreating 0 5s -csi-nfs-node-7kdwj 3/3 Running 0 11s -csi-nfs-node-7smkb 3/3 Running 0 20s -csi-nfs2-controller-68d7768f64-pzs74 4/4 Running 0 21s -``` - -### Step 3 - Create the NFS StorageClass Object - -Let's create a `efs-storageclass.yaml` file: - - -> [!primary] -> -> Don't forget to replace `[EFS_IP]`, `[EFS_PATH]` and `[PARTITION_NAME]` with the correct information. -> - -```yaml -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - name: nfs-csi -provisioner: nfs2.csi.k8s.io -parameters: - server: '[EFS_IP]' - share: '[EFS_PATH]' -reclaimPolicy: Delete -volumeBindingMode: Immediate -mountOptions: - - nfsvers=3 - - tcp -``` - -> [!primary] -> -> The `EFS_IP` is the private IP of your Enterprise File Storage and the `EFS_PATH` is the path to access your volume. -> -> The `tcp` parameter instructs the NFS mount to use the TCP protocol. -> - -Then apply the YAML file to create the StorageClass: - -```bash -kubectl apply -f efs-storageclass.yaml -``` - -### Step 4 - Create and use an NFS persistent volume - -Let’s create a `efs-persistent-volume-claim.yaml` file: - -```yaml -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: efs-pvc - namespace: default -spec: - accessModes: - - ReadWriteMany - storageClassName: nfs-csi - resources: - requests: - storage: 1Gi -``` - -And apply this to create the persistent volume claim: - -```bash -kubectl apply -f efs-persistent-volume-claim.yaml -``` - -You can find more information about the PVC by running this command: - -```bash -kubectl describe pvc efs-pvc -``` - -```console -$ kubectl describe pvc efs-pvc -Name: efs-pvc -Namespace: default -StorageClass: nfs-csi -Status: Bound -Volume: pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -Labels: -Annotations: pv.kubernetes.io/bind-completed: yes - pv.kubernetes.io/bound-by-controller: yes - volume.beta.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io - volume.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io -Finalizers: [kubernetes.io/pvc-protection] -Capacity: 1Gi -Access Modes: RWX -VolumeMode: Filesystem -Used By: -Events: - Type Reason Age From Message - ---- ------ ---- ---- ------- - Normal Provisioning 10s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 External provisioner is provisioning volume for claim "default/efs-pvc" - Normal ExternalProvisioning 10s persistentvolume-controller Waiting for a volume to be created either by the external provisioner 'nfs2.csi.k8s.io' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered. - Normal ProvisioningSucceeded 9s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 Successfully provisioned volume pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -``` - -By reading the events on this PersistentVolumeClaim, our PVC has been provisioned from our Enterprise File Storage. - -If you encounter errors such as: - -```console - Warning ProvisioningFailed 2s (x3 over 6s) nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-7f86e647-4632-4188-bfbe-84d11ea03426 -Output: mount.nfs: mounting 10.201.xx.xx:/share_xxx failed, reason given by server: No such file or directory -``` - -or similar to: - -```console - Warning ProvisioningFailed 1s (x3 over 4s) nfs2.csi.k8s.io_nodepool-cc5ad1db-f645-465c-85-node-6f9649_95fd7b5e-94aa-4c90-9ffa-9765beadfbe6 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-ebab8dfa-7ce8-4102-9ef5-5a626638f3b8 -Output: mount.nfs: access denied by server while mounting 10.201.xx.xx:/share_xxx - -``` - -It may indicate an issue with the Enterprise File Storage ACLs configuration. Check the authorized IPs which can access to the wanted partition on the ACLs list. - -> [!warning] -> If the number of __PersistentVolumes__ to schedule simultaneously is too important, some slowness can be encountered and volume creation can be delayed. - - -Let’s now create a DaemonSet of Nginx pods using the persistent volume claim as their webroot folder. - -Using a DaemonSet will create a pod on each deployed node and make troubleshooting easier in case of a misconfiguration or to isolate a node issue. - -Let's create a file named `nginx-daemonset.yaml`: - -```yaml -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: nfs-nginx - namespace: default -spec: - selector: - matchLabels: - name: nginx - template: - metadata: - labels: - name: nginx - spec: - volumes: - - name: nfs-volume - persistentVolumeClaim: - claimName: nfs-pvc - containers: - - name: nginx - image: nginx - ports: - - containerPort: 80 - name: "http-server" - volumeMounts: - - mountPath: "/usr/share/nginx/html" - name: nfs-volume -``` - -And apply this to create the Nginx DaemonSet: - -```bash -kubectl apply -f nginx-daemonset.yaml -``` - -Both pods should be running: - -```bash -kubectl get pods -NAME READY STATUS RESTARTS AGE -nfs-nginx-9z7wk 1/1 Running 0 11s -nfs-nginx-sfthh 1/1 Running 0 11s -``` - -Let’s enter inside the first Nginx pod and container to check if the Enterprise File Storage Volume is properly mounted and create a file on the NFS persistent volume: - -```bash -$ FIRST_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -1) -kubectl exec -it $FIRST_POD -n default -- bash -``` - -```bash -root@nfs-nginx-9z7wk:/# mount -l | grep nfs -10.201.xx.xx:/share_xxx/pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 on /usr/share/nginx/html type nfs (rw,relatime,vers=3,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.201.xx.xx,mountvers=3,mountport=635,mountproto=tcp,local_lock=none,addr=10.201.xx.xx) -``` - -Now, we will check if the EFS volume is properly shared between the deployed pods. - -Create a new `index.html` file: - -```bash -echo "NFS volume!" > /usr/share/nginx/html/index.html -``` - -And exit the Nginx container: - -```bash -exit -``` - -Let’s try to access our new web page: - -```bash -kubectl proxy -``` - -Generate the URL to open in your broswer: - -```bash -URL=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$FIRST_POD:/proxy/") -echo $URL -``` - -You can open the URL which is displayed to access the Nginx Service. - -Now let’s try to see if the data is shared with the second pod (if you have more than one node deployed). - -```bash -$ SECOND_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -2 | tail -1) -URL2=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$SECOND_POD:/proxy/") -echo $URL2 -``` - -You can open the URL which is displayed to access the Nginx Service on the other pod. - -As you can see the data is correctly shared between the two Nginx pods running on two different Kubernetes nodes. - -Congratulations, you have successfully set up a multi-attach persistent volume with OVHcloud Enterprise File Storage! - -## Go further - -To learn more about using your Kubernetes cluster the practical way, we invite you to look at our [OVHcloud Managed Kubernetes doc site](/products/public-cloud-containers-orchestration-managed-kubernetes-k8s). - -If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](/links/professional-services) to get a quote and ask our Professional Services experts for a custom analysis of your project. - -Join our [community of users](/links/community). \ No newline at end of file diff --git a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-us.md b/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-us.md deleted file mode 100644 index 6ca429e07ee..00000000000 --- a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.en-us.md +++ /dev/null @@ -1,411 +0,0 @@ ---- -title: Configuring multi-attach persistent volumes with Enterprise File Storage -excerpt: 'Find out how to configure a multi-attach persistent volume using our Enterprise File Storage solution' -updated: 2025-01-06 ---- - - - -## Objective - -OVHcloud Managed Kubernetes currently offers Block Storage for persistent volumes by default, but that may not be suited for applications that require a shared file system between multiple nodes. This tutorial shows how to configure a shared [Kubernetes Persistent Volume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) (AccessMode `ReadWriteMany` or `RWX`) using [OVHcloud Enterprise File Storage](/links/storage/enterprise-file-storage) as a storage backend. - -## Requirements - -This tutorial assumes that you already have a working [OVHcloud Managed Kubernetes](/links/public-cloud/kubernetes) cluster, and some basic knowledge of how to operate it. If you want to know more on those topics, please look at the [deploying a Hello World application](/pages/public_cloud/containers_orchestration/managed_kubernetes/deploying-hello-world) documentation. - -It also assumes you have an OVHcloud Enterprise File Storage already available. If you don't, you can [order one in the OVHcloud Control Panel](/links/manager). - -You also need to have [Helm](https://docs.helm.sh/) installed on your workstation. Please refer to the [How to install Helm on OVHcloud Managed Kubernetes Service](/pages/public_cloud/containers_orchestration/managed_kubernetes/installing-helm) tutorial. - - -## Instructions - -### Step 1 - Creating a volume and granting your Managed Kubernetes Service access to it - -Your Enterprise File Storage service can expose multiple volumes, and supports a variety of protocols. Each volume is accessible only from a specific range of IPs. We will create a new EFS volume and make it accessible from your Kubernetes worker nodes. - -You can find more information about our Enterprise File Storage product by clicking [here](/pages/storage_and_backup/file_storage/enterprise_file_storage/netapp_control_panel). - -Access the UI for OVHcloud Enterprise File Storage by clicking the `Storage and backups`{.action} then `Enterprise File Storage`{.action} menu in the [Bare Metal Cloud section of the OVHcloud Control Panel](/links/manager). - -Click your Enterprise File Storage service, then click the `Volumes`{.action} tab. Click the `Create a volume`{.action} button and create the new Enterprise File Storage volume with the following content: - -![Create an EFS volume](images/create-efs-volume.png){.thumbnail} - -Provide the following parameters to create a volume: - -| Name | Description | Required | -| ------------------- | -------------------------- | ------------- | -| Volume name | Name of the volume | False | -| Volume description | Description of the volume | False | -| Protocol | Protocol used to connect | True | -| Volume size | Size of the volume | True | - -The volume size needs to be adapted to your needs. For this guide, we define a volume size of 100 GiB. - -Once your volume is created, click on its ID and select `Access Control List`{.action}. -Enter your Nodes' public IPs and/or your Public Cloud Gateway public IP into the volume's ACLs. This will ensure your Kubernetes worker nodes can reach the storage service. - -#### Your cluster is installed with Public Network or a private network without using an OVHcloud Internet Gateway or a custom one as your default route - -Once the volume is created, we need to allow our Kubernetes nodes to access it. - -Get our Kubernetes nodes IP: - -```bash -kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -``` - -```console -$ kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -51.128.xx.xx 37.59.xx.xx -``` - -#### Your cluster is installed with Private Network and a default route via your Private Network (OVHcloud Internet Gateway/OpenStack Router or a custom one) - -Because your nodes are configured to be routed by the private network gateway, you need to add the gateway IP address to the ACLs. - -By using Public Cloud Gateway through our Managed Kubernetes Service, public IPs on nodes are only for management purposes: [MKS Known Limits](/pages/public_cloud/containers_orchestration/managed_kubernetes/known-limits) - -You can get your OVHcloud Internet Gateway's public IP by navigating through the OVHcloud Control Panel: - -`Public Cloud`{.action} > Select your tenant > `Network / Gateway`{.action} > `Public IP`{.action} - -You can also get your OVHcloud Internet Gateway's public IP via the following API: - -> [!api] -> -> @api {v1} /cloud GET /cloud/project/{serviceName}/region/{regionName}/gateway/{id} -> - -> [!success] -> If you are not familiar with the OVHcloud API, read our [First Steps with the OVHcloud API](/pages/manage_and_operate/api/first-steps) guide. - -If you want to use your Kubernetes cluster to know your Gateway's public IP, you can run this command: - -```bash -kubectl run get-gateway-ip --image=ubuntu:latest -i --tty --rm -``` - -This command will create a temporary pod and open a console. - -You may have to wait a bit to let the pod be created. Once the shell appears, you can run this command: - -```bash -apt update && apt upgrade -y && apt install -y curl && curl ifconfig.ovh -``` - -The public IP of the Gateway you're using should appear. - -Click on the `Manage IP Access (ACL)`{.action} menu of our newly created volume: - -![Manage Access of the EFS Volume](images/manage-efs-volume-access.png){.thumbnail} - -Add either the nodes' IPs one by one or the Gateway's public IP depending on your configuration: - -![Allow nodes IP to access the EFS Volume](images/manage-efs-volume-access-ip.png){.thumbnail} - -You should now have something similar to this: - -![EFS Configuration](images/manage-efs-volume-acl-list.png){.thumbnail} - -### Step 2 - Configuring Kubernetes to use our newly created EFS volume - -Your Kubernetes cluster needs some additional piece of software to make use of the Enterprise File Storage volume. We will install those and then create a first volume, shared across multiple pods. - -To do so, you can install the [csi-driver-nfs](https://github.com/kubernetes-csi/csi-driver-nfs): - -```bash -helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts -helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set controller.name="csi-nfs2-controller" --set rbac.name=nfs2 -``` - -```console -$ helm install csi-driver-nfs -n kube-system csi-driver-nfs/csi-driver-nfs --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set rbac.name=nfs --set controller.name="csi-nfs2-controller" -NAME: csi-driver-nfs -LAST DEPLOYED: Mon Dec 16 16:13:31 2024 -NAMESPACE: kube-system -STATUS: deployed -REVISION: 1 -TEST SUITE: None -NOTES: -The CSI NFS Driver is getting deployed to your cluster. - -To check CSI NFS Driver pods status, please run: - - kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -``` - -Let's verify our installation: - -```bash -kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" -``` - -```console -$ kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -NAME READY STATUS RESTARTS AGE -csi-nfs-node-7kdwj 0/3 ContainerCreating 0 5s -csi-nfs-node-7smkb 0/3 ContainerCreating 0 5s -csi-nfs2-controller-68d7768f64-pzs74 0/4 ContainerCreating 0 5s -csi-nfs-node-7kdwj 3/3 Running 0 11s -csi-nfs-node-7smkb 3/3 Running 0 20s -csi-nfs2-controller-68d7768f64-pzs74 4/4 Running 0 21s -``` - -### Step 3 - Create the NFS StorageClass Object - -Let's create a `efs-storageclass.yaml` file: - - -> [!primary] -> -> Don't forget to replace `[EFS_IP]`, `[EFS_PATH]` and `[PARTITION_NAME]` with the correct information. -> - -```yaml -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - name: nfs-csi -provisioner: nfs2.csi.k8s.io -parameters: - server: '[EFS_IP]' - share: '[EFS_PATH]' -reclaimPolicy: Delete -volumeBindingMode: Immediate -mountOptions: - - nfsvers=3 - - tcp -``` - -> [!primary] -> -> The `EFS_IP` is the private IP of your Enterprise File Storage and the `EFS_PATH` is the path to access your volume. -> -> The `tcp` parameter instructs the NFS mount to use the TCP protocol. -> - -Then apply the YAML file to create the StorageClass: - -```bash -kubectl apply -f efs-storageclass.yaml -``` - -### Step 4 - Create and use an NFS persistent volume - -Let’s create a `efs-persistent-volume-claim.yaml` file: - -```yaml -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: efs-pvc - namespace: default -spec: - accessModes: - - ReadWriteMany - storageClassName: nfs-csi - resources: - requests: - storage: 1Gi -``` - -And apply this to create the persistent volume claim: - -```bash -kubectl apply -f efs-persistent-volume-claim.yaml -``` - -You can find more information about the PVC by running this command: - -```bash -kubectl describe pvc efs-pvc -``` - -```console -$ kubectl describe pvc efs-pvc -Name: efs-pvc -Namespace: default -StorageClass: nfs-csi -Status: Bound -Volume: pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -Labels: -Annotations: pv.kubernetes.io/bind-completed: yes - pv.kubernetes.io/bound-by-controller: yes - volume.beta.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io - volume.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io -Finalizers: [kubernetes.io/pvc-protection] -Capacity: 1Gi -Access Modes: RWX -VolumeMode: Filesystem -Used By: -Events: - Type Reason Age From Message - ---- ------ ---- ---- ------- - Normal Provisioning 10s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 External provisioner is provisioning volume for claim "default/efs-pvc" - Normal ExternalProvisioning 10s persistentvolume-controller Waiting for a volume to be created either by the external provisioner 'nfs2.csi.k8s.io' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered. - Normal ProvisioningSucceeded 9s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 Successfully provisioned volume pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -``` - -By reading the events on this PersistentVolumeClaim, our PVC has been provisioned from our Enterprise File Storage. - -If you encounter errors such as: - -```console - Warning ProvisioningFailed 2s (x3 over 6s) nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-7f86e647-4632-4188-bfbe-84d11ea03426 -Output: mount.nfs: mounting 10.201.xx.xx:/share_xxx failed, reason given by server: No such file or directory -``` - -or similar to: - -```console - Warning ProvisioningFailed 1s (x3 over 4s) nfs2.csi.k8s.io_nodepool-cc5ad1db-f645-465c-85-node-6f9649_95fd7b5e-94aa-4c90-9ffa-9765beadfbe6 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-ebab8dfa-7ce8-4102-9ef5-5a626638f3b8 -Output: mount.nfs: access denied by server while mounting 10.201.xx.xx:/share_xxx - -``` - -It may indicate an issue with the Enterprise File Storage ACLs configuration. Check the authorized IPs which can access to the wanted partition on the ACLs list. - -> [!warning] -> If the number of __PersistentVolumes__ to schedule simultaneously is too important, some slowness can be encountered and volume creation can be delayed. - - -Let’s now create a DaemonSet of Nginx pods using the persistent volume claim as their webroot folder. - -Using a DaemonSet will create a pod on each deployed node and make troubleshooting easier in case of a misconfiguration or to isolate a node issue. - -Let's create a file named `nginx-daemonset.yaml`: - -```yaml -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: nfs-nginx - namespace: default -spec: - selector: - matchLabels: - name: nginx - template: - metadata: - labels: - name: nginx - spec: - volumes: - - name: nfs-volume - persistentVolumeClaim: - claimName: nfs-pvc - containers: - - name: nginx - image: nginx - ports: - - containerPort: 80 - name: "http-server" - volumeMounts: - - mountPath: "/usr/share/nginx/html" - name: nfs-volume -``` - -And apply this to create the Nginx DaemonSet: - -```bash -kubectl apply -f nginx-daemonset.yaml -``` - -Both pods should be running: - -```bash -kubectl get pods -NAME READY STATUS RESTARTS AGE -nfs-nginx-9z7wk 1/1 Running 0 11s -nfs-nginx-sfthh 1/1 Running 0 11s -``` - -Let’s enter inside the first Nginx pod and container to check if the Enterprise File Storage Volume is properly mounted and create a file on the NFS persistent volume: - -```bash -$ FIRST_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -1) -kubectl exec -it $FIRST_POD -n default -- bash -``` - -```bash -root@nfs-nginx-9z7wk:/# mount -l | grep nfs -10.201.xx.xx:/share_xxx/pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 on /usr/share/nginx/html type nfs (rw,relatime,vers=3,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.201.xx.xx,mountvers=3,mountport=635,mountproto=tcp,local_lock=none,addr=10.201.xx.xx) -``` - -Now, we will check if the EFS volume is properly shared between the deployed pods. - -Create a new `index.html` file: - -```bash -echo "NFS volume!" > /usr/share/nginx/html/index.html -``` - -And exit the Nginx container: - -```bash -exit -``` - -Let’s try to access our new web page: - -```bash -kubectl proxy -``` - -Generate the URL to open in your broswer: - -```bash -URL=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$FIRST_POD:/proxy/") -echo $URL -``` - -You can open the URL which is displayed to access the Nginx Service. - -Now let’s try to see if the data is shared with the second pod (if you have more than one node deployed). - -```bash -$ SECOND_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -2 | tail -1) -URL2=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$SECOND_POD:/proxy/") -echo $URL2 -``` - -You can open the URL which is displayed to access the Nginx Service on the other pod. - -As you can see the data is correctly shared between the two Nginx pods running on two different Kubernetes nodes. - -Congratulations, you have successfully set up a multi-attach persistent volume with OVHcloud Enterprise File Storage! - -## Go further - -To learn more about using your Kubernetes cluster the practical way, we invite you to look at our [OVHcloud Managed Kubernetes doc site](/products/public-cloud-containers-orchestration-managed-kubernetes-k8s). - -If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](/links/professional-services) to get a quote and ask our Professional Services experts for a custom analysis of your project. - -Join our [community of users](/links/community). \ No newline at end of file diff --git a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.es-es.md b/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.es-es.md deleted file mode 100644 index 6ca429e07ee..00000000000 --- a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.es-es.md +++ /dev/null @@ -1,411 +0,0 @@ ---- -title: Configuring multi-attach persistent volumes with Enterprise File Storage -excerpt: 'Find out how to configure a multi-attach persistent volume using our Enterprise File Storage solution' -updated: 2025-01-06 ---- - - - -## Objective - -OVHcloud Managed Kubernetes currently offers Block Storage for persistent volumes by default, but that may not be suited for applications that require a shared file system between multiple nodes. This tutorial shows how to configure a shared [Kubernetes Persistent Volume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) (AccessMode `ReadWriteMany` or `RWX`) using [OVHcloud Enterprise File Storage](/links/storage/enterprise-file-storage) as a storage backend. - -## Requirements - -This tutorial assumes that you already have a working [OVHcloud Managed Kubernetes](/links/public-cloud/kubernetes) cluster, and some basic knowledge of how to operate it. If you want to know more on those topics, please look at the [deploying a Hello World application](/pages/public_cloud/containers_orchestration/managed_kubernetes/deploying-hello-world) documentation. - -It also assumes you have an OVHcloud Enterprise File Storage already available. If you don't, you can [order one in the OVHcloud Control Panel](/links/manager). - -You also need to have [Helm](https://docs.helm.sh/) installed on your workstation. Please refer to the [How to install Helm on OVHcloud Managed Kubernetes Service](/pages/public_cloud/containers_orchestration/managed_kubernetes/installing-helm) tutorial. - - -## Instructions - -### Step 1 - Creating a volume and granting your Managed Kubernetes Service access to it - -Your Enterprise File Storage service can expose multiple volumes, and supports a variety of protocols. Each volume is accessible only from a specific range of IPs. We will create a new EFS volume and make it accessible from your Kubernetes worker nodes. - -You can find more information about our Enterprise File Storage product by clicking [here](/pages/storage_and_backup/file_storage/enterprise_file_storage/netapp_control_panel). - -Access the UI for OVHcloud Enterprise File Storage by clicking the `Storage and backups`{.action} then `Enterprise File Storage`{.action} menu in the [Bare Metal Cloud section of the OVHcloud Control Panel](/links/manager). - -Click your Enterprise File Storage service, then click the `Volumes`{.action} tab. Click the `Create a volume`{.action} button and create the new Enterprise File Storage volume with the following content: - -![Create an EFS volume](images/create-efs-volume.png){.thumbnail} - -Provide the following parameters to create a volume: - -| Name | Description | Required | -| ------------------- | -------------------------- | ------------- | -| Volume name | Name of the volume | False | -| Volume description | Description of the volume | False | -| Protocol | Protocol used to connect | True | -| Volume size | Size of the volume | True | - -The volume size needs to be adapted to your needs. For this guide, we define a volume size of 100 GiB. - -Once your volume is created, click on its ID and select `Access Control List`{.action}. -Enter your Nodes' public IPs and/or your Public Cloud Gateway public IP into the volume's ACLs. This will ensure your Kubernetes worker nodes can reach the storage service. - -#### Your cluster is installed with Public Network or a private network without using an OVHcloud Internet Gateway or a custom one as your default route - -Once the volume is created, we need to allow our Kubernetes nodes to access it. - -Get our Kubernetes nodes IP: - -```bash -kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -``` - -```console -$ kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -51.128.xx.xx 37.59.xx.xx -``` - -#### Your cluster is installed with Private Network and a default route via your Private Network (OVHcloud Internet Gateway/OpenStack Router or a custom one) - -Because your nodes are configured to be routed by the private network gateway, you need to add the gateway IP address to the ACLs. - -By using Public Cloud Gateway through our Managed Kubernetes Service, public IPs on nodes are only for management purposes: [MKS Known Limits](/pages/public_cloud/containers_orchestration/managed_kubernetes/known-limits) - -You can get your OVHcloud Internet Gateway's public IP by navigating through the OVHcloud Control Panel: - -`Public Cloud`{.action} > Select your tenant > `Network / Gateway`{.action} > `Public IP`{.action} - -You can also get your OVHcloud Internet Gateway's public IP via the following API: - -> [!api] -> -> @api {v1} /cloud GET /cloud/project/{serviceName}/region/{regionName}/gateway/{id} -> - -> [!success] -> If you are not familiar with the OVHcloud API, read our [First Steps with the OVHcloud API](/pages/manage_and_operate/api/first-steps) guide. - -If you want to use your Kubernetes cluster to know your Gateway's public IP, you can run this command: - -```bash -kubectl run get-gateway-ip --image=ubuntu:latest -i --tty --rm -``` - -This command will create a temporary pod and open a console. - -You may have to wait a bit to let the pod be created. Once the shell appears, you can run this command: - -```bash -apt update && apt upgrade -y && apt install -y curl && curl ifconfig.ovh -``` - -The public IP of the Gateway you're using should appear. - -Click on the `Manage IP Access (ACL)`{.action} menu of our newly created volume: - -![Manage Access of the EFS Volume](images/manage-efs-volume-access.png){.thumbnail} - -Add either the nodes' IPs one by one or the Gateway's public IP depending on your configuration: - -![Allow nodes IP to access the EFS Volume](images/manage-efs-volume-access-ip.png){.thumbnail} - -You should now have something similar to this: - -![EFS Configuration](images/manage-efs-volume-acl-list.png){.thumbnail} - -### Step 2 - Configuring Kubernetes to use our newly created EFS volume - -Your Kubernetes cluster needs some additional piece of software to make use of the Enterprise File Storage volume. We will install those and then create a first volume, shared across multiple pods. - -To do so, you can install the [csi-driver-nfs](https://github.com/kubernetes-csi/csi-driver-nfs): - -```bash -helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts -helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set controller.name="csi-nfs2-controller" --set rbac.name=nfs2 -``` - -```console -$ helm install csi-driver-nfs -n kube-system csi-driver-nfs/csi-driver-nfs --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set rbac.name=nfs --set controller.name="csi-nfs2-controller" -NAME: csi-driver-nfs -LAST DEPLOYED: Mon Dec 16 16:13:31 2024 -NAMESPACE: kube-system -STATUS: deployed -REVISION: 1 -TEST SUITE: None -NOTES: -The CSI NFS Driver is getting deployed to your cluster. - -To check CSI NFS Driver pods status, please run: - - kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -``` - -Let's verify our installation: - -```bash -kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" -``` - -```console -$ kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -NAME READY STATUS RESTARTS AGE -csi-nfs-node-7kdwj 0/3 ContainerCreating 0 5s -csi-nfs-node-7smkb 0/3 ContainerCreating 0 5s -csi-nfs2-controller-68d7768f64-pzs74 0/4 ContainerCreating 0 5s -csi-nfs-node-7kdwj 3/3 Running 0 11s -csi-nfs-node-7smkb 3/3 Running 0 20s -csi-nfs2-controller-68d7768f64-pzs74 4/4 Running 0 21s -``` - -### Step 3 - Create the NFS StorageClass Object - -Let's create a `efs-storageclass.yaml` file: - - -> [!primary] -> -> Don't forget to replace `[EFS_IP]`, `[EFS_PATH]` and `[PARTITION_NAME]` with the correct information. -> - -```yaml -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - name: nfs-csi -provisioner: nfs2.csi.k8s.io -parameters: - server: '[EFS_IP]' - share: '[EFS_PATH]' -reclaimPolicy: Delete -volumeBindingMode: Immediate -mountOptions: - - nfsvers=3 - - tcp -``` - -> [!primary] -> -> The `EFS_IP` is the private IP of your Enterprise File Storage and the `EFS_PATH` is the path to access your volume. -> -> The `tcp` parameter instructs the NFS mount to use the TCP protocol. -> - -Then apply the YAML file to create the StorageClass: - -```bash -kubectl apply -f efs-storageclass.yaml -``` - -### Step 4 - Create and use an NFS persistent volume - -Let’s create a `efs-persistent-volume-claim.yaml` file: - -```yaml -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: efs-pvc - namespace: default -spec: - accessModes: - - ReadWriteMany - storageClassName: nfs-csi - resources: - requests: - storage: 1Gi -``` - -And apply this to create the persistent volume claim: - -```bash -kubectl apply -f efs-persistent-volume-claim.yaml -``` - -You can find more information about the PVC by running this command: - -```bash -kubectl describe pvc efs-pvc -``` - -```console -$ kubectl describe pvc efs-pvc -Name: efs-pvc -Namespace: default -StorageClass: nfs-csi -Status: Bound -Volume: pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -Labels: -Annotations: pv.kubernetes.io/bind-completed: yes - pv.kubernetes.io/bound-by-controller: yes - volume.beta.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io - volume.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io -Finalizers: [kubernetes.io/pvc-protection] -Capacity: 1Gi -Access Modes: RWX -VolumeMode: Filesystem -Used By: -Events: - Type Reason Age From Message - ---- ------ ---- ---- ------- - Normal Provisioning 10s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 External provisioner is provisioning volume for claim "default/efs-pvc" - Normal ExternalProvisioning 10s persistentvolume-controller Waiting for a volume to be created either by the external provisioner 'nfs2.csi.k8s.io' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered. - Normal ProvisioningSucceeded 9s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 Successfully provisioned volume pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -``` - -By reading the events on this PersistentVolumeClaim, our PVC has been provisioned from our Enterprise File Storage. - -If you encounter errors such as: - -```console - Warning ProvisioningFailed 2s (x3 over 6s) nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-7f86e647-4632-4188-bfbe-84d11ea03426 -Output: mount.nfs: mounting 10.201.xx.xx:/share_xxx failed, reason given by server: No such file or directory -``` - -or similar to: - -```console - Warning ProvisioningFailed 1s (x3 over 4s) nfs2.csi.k8s.io_nodepool-cc5ad1db-f645-465c-85-node-6f9649_95fd7b5e-94aa-4c90-9ffa-9765beadfbe6 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-ebab8dfa-7ce8-4102-9ef5-5a626638f3b8 -Output: mount.nfs: access denied by server while mounting 10.201.xx.xx:/share_xxx - -``` - -It may indicate an issue with the Enterprise File Storage ACLs configuration. Check the authorized IPs which can access to the wanted partition on the ACLs list. - -> [!warning] -> If the number of __PersistentVolumes__ to schedule simultaneously is too important, some slowness can be encountered and volume creation can be delayed. - - -Let’s now create a DaemonSet of Nginx pods using the persistent volume claim as their webroot folder. - -Using a DaemonSet will create a pod on each deployed node and make troubleshooting easier in case of a misconfiguration or to isolate a node issue. - -Let's create a file named `nginx-daemonset.yaml`: - -```yaml -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: nfs-nginx - namespace: default -spec: - selector: - matchLabels: - name: nginx - template: - metadata: - labels: - name: nginx - spec: - volumes: - - name: nfs-volume - persistentVolumeClaim: - claimName: nfs-pvc - containers: - - name: nginx - image: nginx - ports: - - containerPort: 80 - name: "http-server" - volumeMounts: - - mountPath: "/usr/share/nginx/html" - name: nfs-volume -``` - -And apply this to create the Nginx DaemonSet: - -```bash -kubectl apply -f nginx-daemonset.yaml -``` - -Both pods should be running: - -```bash -kubectl get pods -NAME READY STATUS RESTARTS AGE -nfs-nginx-9z7wk 1/1 Running 0 11s -nfs-nginx-sfthh 1/1 Running 0 11s -``` - -Let’s enter inside the first Nginx pod and container to check if the Enterprise File Storage Volume is properly mounted and create a file on the NFS persistent volume: - -```bash -$ FIRST_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -1) -kubectl exec -it $FIRST_POD -n default -- bash -``` - -```bash -root@nfs-nginx-9z7wk:/# mount -l | grep nfs -10.201.xx.xx:/share_xxx/pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 on /usr/share/nginx/html type nfs (rw,relatime,vers=3,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.201.xx.xx,mountvers=3,mountport=635,mountproto=tcp,local_lock=none,addr=10.201.xx.xx) -``` - -Now, we will check if the EFS volume is properly shared between the deployed pods. - -Create a new `index.html` file: - -```bash -echo "NFS volume!" > /usr/share/nginx/html/index.html -``` - -And exit the Nginx container: - -```bash -exit -``` - -Let’s try to access our new web page: - -```bash -kubectl proxy -``` - -Generate the URL to open in your broswer: - -```bash -URL=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$FIRST_POD:/proxy/") -echo $URL -``` - -You can open the URL which is displayed to access the Nginx Service. - -Now let’s try to see if the data is shared with the second pod (if you have more than one node deployed). - -```bash -$ SECOND_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -2 | tail -1) -URL2=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$SECOND_POD:/proxy/") -echo $URL2 -``` - -You can open the URL which is displayed to access the Nginx Service on the other pod. - -As you can see the data is correctly shared between the two Nginx pods running on two different Kubernetes nodes. - -Congratulations, you have successfully set up a multi-attach persistent volume with OVHcloud Enterprise File Storage! - -## Go further - -To learn more about using your Kubernetes cluster the practical way, we invite you to look at our [OVHcloud Managed Kubernetes doc site](/products/public-cloud-containers-orchestration-managed-kubernetes-k8s). - -If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](/links/professional-services) to get a quote and ask our Professional Services experts for a custom analysis of your project. - -Join our [community of users](/links/community). \ No newline at end of file diff --git a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.es-us.md b/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.es-us.md deleted file mode 100644 index 6ca429e07ee..00000000000 --- a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.es-us.md +++ /dev/null @@ -1,411 +0,0 @@ ---- -title: Configuring multi-attach persistent volumes with Enterprise File Storage -excerpt: 'Find out how to configure a multi-attach persistent volume using our Enterprise File Storage solution' -updated: 2025-01-06 ---- - - - -## Objective - -OVHcloud Managed Kubernetes currently offers Block Storage for persistent volumes by default, but that may not be suited for applications that require a shared file system between multiple nodes. This tutorial shows how to configure a shared [Kubernetes Persistent Volume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) (AccessMode `ReadWriteMany` or `RWX`) using [OVHcloud Enterprise File Storage](/links/storage/enterprise-file-storage) as a storage backend. - -## Requirements - -This tutorial assumes that you already have a working [OVHcloud Managed Kubernetes](/links/public-cloud/kubernetes) cluster, and some basic knowledge of how to operate it. If you want to know more on those topics, please look at the [deploying a Hello World application](/pages/public_cloud/containers_orchestration/managed_kubernetes/deploying-hello-world) documentation. - -It also assumes you have an OVHcloud Enterprise File Storage already available. If you don't, you can [order one in the OVHcloud Control Panel](/links/manager). - -You also need to have [Helm](https://docs.helm.sh/) installed on your workstation. Please refer to the [How to install Helm on OVHcloud Managed Kubernetes Service](/pages/public_cloud/containers_orchestration/managed_kubernetes/installing-helm) tutorial. - - -## Instructions - -### Step 1 - Creating a volume and granting your Managed Kubernetes Service access to it - -Your Enterprise File Storage service can expose multiple volumes, and supports a variety of protocols. Each volume is accessible only from a specific range of IPs. We will create a new EFS volume and make it accessible from your Kubernetes worker nodes. - -You can find more information about our Enterprise File Storage product by clicking [here](/pages/storage_and_backup/file_storage/enterprise_file_storage/netapp_control_panel). - -Access the UI for OVHcloud Enterprise File Storage by clicking the `Storage and backups`{.action} then `Enterprise File Storage`{.action} menu in the [Bare Metal Cloud section of the OVHcloud Control Panel](/links/manager). - -Click your Enterprise File Storage service, then click the `Volumes`{.action} tab. Click the `Create a volume`{.action} button and create the new Enterprise File Storage volume with the following content: - -![Create an EFS volume](images/create-efs-volume.png){.thumbnail} - -Provide the following parameters to create a volume: - -| Name | Description | Required | -| ------------------- | -------------------------- | ------------- | -| Volume name | Name of the volume | False | -| Volume description | Description of the volume | False | -| Protocol | Protocol used to connect | True | -| Volume size | Size of the volume | True | - -The volume size needs to be adapted to your needs. For this guide, we define a volume size of 100 GiB. - -Once your volume is created, click on its ID and select `Access Control List`{.action}. -Enter your Nodes' public IPs and/or your Public Cloud Gateway public IP into the volume's ACLs. This will ensure your Kubernetes worker nodes can reach the storage service. - -#### Your cluster is installed with Public Network or a private network without using an OVHcloud Internet Gateway or a custom one as your default route - -Once the volume is created, we need to allow our Kubernetes nodes to access it. - -Get our Kubernetes nodes IP: - -```bash -kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -``` - -```console -$ kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -51.128.xx.xx 37.59.xx.xx -``` - -#### Your cluster is installed with Private Network and a default route via your Private Network (OVHcloud Internet Gateway/OpenStack Router or a custom one) - -Because your nodes are configured to be routed by the private network gateway, you need to add the gateway IP address to the ACLs. - -By using Public Cloud Gateway through our Managed Kubernetes Service, public IPs on nodes are only for management purposes: [MKS Known Limits](/pages/public_cloud/containers_orchestration/managed_kubernetes/known-limits) - -You can get your OVHcloud Internet Gateway's public IP by navigating through the OVHcloud Control Panel: - -`Public Cloud`{.action} > Select your tenant > `Network / Gateway`{.action} > `Public IP`{.action} - -You can also get your OVHcloud Internet Gateway's public IP via the following API: - -> [!api] -> -> @api {v1} /cloud GET /cloud/project/{serviceName}/region/{regionName}/gateway/{id} -> - -> [!success] -> If you are not familiar with the OVHcloud API, read our [First Steps with the OVHcloud API](/pages/manage_and_operate/api/first-steps) guide. - -If you want to use your Kubernetes cluster to know your Gateway's public IP, you can run this command: - -```bash -kubectl run get-gateway-ip --image=ubuntu:latest -i --tty --rm -``` - -This command will create a temporary pod and open a console. - -You may have to wait a bit to let the pod be created. Once the shell appears, you can run this command: - -```bash -apt update && apt upgrade -y && apt install -y curl && curl ifconfig.ovh -``` - -The public IP of the Gateway you're using should appear. - -Click on the `Manage IP Access (ACL)`{.action} menu of our newly created volume: - -![Manage Access of the EFS Volume](images/manage-efs-volume-access.png){.thumbnail} - -Add either the nodes' IPs one by one or the Gateway's public IP depending on your configuration: - -![Allow nodes IP to access the EFS Volume](images/manage-efs-volume-access-ip.png){.thumbnail} - -You should now have something similar to this: - -![EFS Configuration](images/manage-efs-volume-acl-list.png){.thumbnail} - -### Step 2 - Configuring Kubernetes to use our newly created EFS volume - -Your Kubernetes cluster needs some additional piece of software to make use of the Enterprise File Storage volume. We will install those and then create a first volume, shared across multiple pods. - -To do so, you can install the [csi-driver-nfs](https://github.com/kubernetes-csi/csi-driver-nfs): - -```bash -helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts -helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set controller.name="csi-nfs2-controller" --set rbac.name=nfs2 -``` - -```console -$ helm install csi-driver-nfs -n kube-system csi-driver-nfs/csi-driver-nfs --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set rbac.name=nfs --set controller.name="csi-nfs2-controller" -NAME: csi-driver-nfs -LAST DEPLOYED: Mon Dec 16 16:13:31 2024 -NAMESPACE: kube-system -STATUS: deployed -REVISION: 1 -TEST SUITE: None -NOTES: -The CSI NFS Driver is getting deployed to your cluster. - -To check CSI NFS Driver pods status, please run: - - kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -``` - -Let's verify our installation: - -```bash -kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" -``` - -```console -$ kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -NAME READY STATUS RESTARTS AGE -csi-nfs-node-7kdwj 0/3 ContainerCreating 0 5s -csi-nfs-node-7smkb 0/3 ContainerCreating 0 5s -csi-nfs2-controller-68d7768f64-pzs74 0/4 ContainerCreating 0 5s -csi-nfs-node-7kdwj 3/3 Running 0 11s -csi-nfs-node-7smkb 3/3 Running 0 20s -csi-nfs2-controller-68d7768f64-pzs74 4/4 Running 0 21s -``` - -### Step 3 - Create the NFS StorageClass Object - -Let's create a `efs-storageclass.yaml` file: - - -> [!primary] -> -> Don't forget to replace `[EFS_IP]`, `[EFS_PATH]` and `[PARTITION_NAME]` with the correct information. -> - -```yaml -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - name: nfs-csi -provisioner: nfs2.csi.k8s.io -parameters: - server: '[EFS_IP]' - share: '[EFS_PATH]' -reclaimPolicy: Delete -volumeBindingMode: Immediate -mountOptions: - - nfsvers=3 - - tcp -``` - -> [!primary] -> -> The `EFS_IP` is the private IP of your Enterprise File Storage and the `EFS_PATH` is the path to access your volume. -> -> The `tcp` parameter instructs the NFS mount to use the TCP protocol. -> - -Then apply the YAML file to create the StorageClass: - -```bash -kubectl apply -f efs-storageclass.yaml -``` - -### Step 4 - Create and use an NFS persistent volume - -Let’s create a `efs-persistent-volume-claim.yaml` file: - -```yaml -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: efs-pvc - namespace: default -spec: - accessModes: - - ReadWriteMany - storageClassName: nfs-csi - resources: - requests: - storage: 1Gi -``` - -And apply this to create the persistent volume claim: - -```bash -kubectl apply -f efs-persistent-volume-claim.yaml -``` - -You can find more information about the PVC by running this command: - -```bash -kubectl describe pvc efs-pvc -``` - -```console -$ kubectl describe pvc efs-pvc -Name: efs-pvc -Namespace: default -StorageClass: nfs-csi -Status: Bound -Volume: pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -Labels: -Annotations: pv.kubernetes.io/bind-completed: yes - pv.kubernetes.io/bound-by-controller: yes - volume.beta.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io - volume.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io -Finalizers: [kubernetes.io/pvc-protection] -Capacity: 1Gi -Access Modes: RWX -VolumeMode: Filesystem -Used By: -Events: - Type Reason Age From Message - ---- ------ ---- ---- ------- - Normal Provisioning 10s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 External provisioner is provisioning volume for claim "default/efs-pvc" - Normal ExternalProvisioning 10s persistentvolume-controller Waiting for a volume to be created either by the external provisioner 'nfs2.csi.k8s.io' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered. - Normal ProvisioningSucceeded 9s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 Successfully provisioned volume pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -``` - -By reading the events on this PersistentVolumeClaim, our PVC has been provisioned from our Enterprise File Storage. - -If you encounter errors such as: - -```console - Warning ProvisioningFailed 2s (x3 over 6s) nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-7f86e647-4632-4188-bfbe-84d11ea03426 -Output: mount.nfs: mounting 10.201.xx.xx:/share_xxx failed, reason given by server: No such file or directory -``` - -or similar to: - -```console - Warning ProvisioningFailed 1s (x3 over 4s) nfs2.csi.k8s.io_nodepool-cc5ad1db-f645-465c-85-node-6f9649_95fd7b5e-94aa-4c90-9ffa-9765beadfbe6 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-ebab8dfa-7ce8-4102-9ef5-5a626638f3b8 -Output: mount.nfs: access denied by server while mounting 10.201.xx.xx:/share_xxx - -``` - -It may indicate an issue with the Enterprise File Storage ACLs configuration. Check the authorized IPs which can access to the wanted partition on the ACLs list. - -> [!warning] -> If the number of __PersistentVolumes__ to schedule simultaneously is too important, some slowness can be encountered and volume creation can be delayed. - - -Let’s now create a DaemonSet of Nginx pods using the persistent volume claim as their webroot folder. - -Using a DaemonSet will create a pod on each deployed node and make troubleshooting easier in case of a misconfiguration or to isolate a node issue. - -Let's create a file named `nginx-daemonset.yaml`: - -```yaml -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: nfs-nginx - namespace: default -spec: - selector: - matchLabels: - name: nginx - template: - metadata: - labels: - name: nginx - spec: - volumes: - - name: nfs-volume - persistentVolumeClaim: - claimName: nfs-pvc - containers: - - name: nginx - image: nginx - ports: - - containerPort: 80 - name: "http-server" - volumeMounts: - - mountPath: "/usr/share/nginx/html" - name: nfs-volume -``` - -And apply this to create the Nginx DaemonSet: - -```bash -kubectl apply -f nginx-daemonset.yaml -``` - -Both pods should be running: - -```bash -kubectl get pods -NAME READY STATUS RESTARTS AGE -nfs-nginx-9z7wk 1/1 Running 0 11s -nfs-nginx-sfthh 1/1 Running 0 11s -``` - -Let’s enter inside the first Nginx pod and container to check if the Enterprise File Storage Volume is properly mounted and create a file on the NFS persistent volume: - -```bash -$ FIRST_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -1) -kubectl exec -it $FIRST_POD -n default -- bash -``` - -```bash -root@nfs-nginx-9z7wk:/# mount -l | grep nfs -10.201.xx.xx:/share_xxx/pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 on /usr/share/nginx/html type nfs (rw,relatime,vers=3,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.201.xx.xx,mountvers=3,mountport=635,mountproto=tcp,local_lock=none,addr=10.201.xx.xx) -``` - -Now, we will check if the EFS volume is properly shared between the deployed pods. - -Create a new `index.html` file: - -```bash -echo "NFS volume!" > /usr/share/nginx/html/index.html -``` - -And exit the Nginx container: - -```bash -exit -``` - -Let’s try to access our new web page: - -```bash -kubectl proxy -``` - -Generate the URL to open in your broswer: - -```bash -URL=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$FIRST_POD:/proxy/") -echo $URL -``` - -You can open the URL which is displayed to access the Nginx Service. - -Now let’s try to see if the data is shared with the second pod (if you have more than one node deployed). - -```bash -$ SECOND_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -2 | tail -1) -URL2=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$SECOND_POD:/proxy/") -echo $URL2 -``` - -You can open the URL which is displayed to access the Nginx Service on the other pod. - -As you can see the data is correctly shared between the two Nginx pods running on two different Kubernetes nodes. - -Congratulations, you have successfully set up a multi-attach persistent volume with OVHcloud Enterprise File Storage! - -## Go further - -To learn more about using your Kubernetes cluster the practical way, we invite you to look at our [OVHcloud Managed Kubernetes doc site](/products/public-cloud-containers-orchestration-managed-kubernetes-k8s). - -If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](/links/professional-services) to get a quote and ask our Professional Services experts for a custom analysis of your project. - -Join our [community of users](/links/community). \ No newline at end of file diff --git a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.fr-ca.md b/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.fr-ca.md deleted file mode 100644 index 6ca429e07ee..00000000000 --- a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.fr-ca.md +++ /dev/null @@ -1,411 +0,0 @@ ---- -title: Configuring multi-attach persistent volumes with Enterprise File Storage -excerpt: 'Find out how to configure a multi-attach persistent volume using our Enterprise File Storage solution' -updated: 2025-01-06 ---- - - - -## Objective - -OVHcloud Managed Kubernetes currently offers Block Storage for persistent volumes by default, but that may not be suited for applications that require a shared file system between multiple nodes. This tutorial shows how to configure a shared [Kubernetes Persistent Volume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) (AccessMode `ReadWriteMany` or `RWX`) using [OVHcloud Enterprise File Storage](/links/storage/enterprise-file-storage) as a storage backend. - -## Requirements - -This tutorial assumes that you already have a working [OVHcloud Managed Kubernetes](/links/public-cloud/kubernetes) cluster, and some basic knowledge of how to operate it. If you want to know more on those topics, please look at the [deploying a Hello World application](/pages/public_cloud/containers_orchestration/managed_kubernetes/deploying-hello-world) documentation. - -It also assumes you have an OVHcloud Enterprise File Storage already available. If you don't, you can [order one in the OVHcloud Control Panel](/links/manager). - -You also need to have [Helm](https://docs.helm.sh/) installed on your workstation. Please refer to the [How to install Helm on OVHcloud Managed Kubernetes Service](/pages/public_cloud/containers_orchestration/managed_kubernetes/installing-helm) tutorial. - - -## Instructions - -### Step 1 - Creating a volume and granting your Managed Kubernetes Service access to it - -Your Enterprise File Storage service can expose multiple volumes, and supports a variety of protocols. Each volume is accessible only from a specific range of IPs. We will create a new EFS volume and make it accessible from your Kubernetes worker nodes. - -You can find more information about our Enterprise File Storage product by clicking [here](/pages/storage_and_backup/file_storage/enterprise_file_storage/netapp_control_panel). - -Access the UI for OVHcloud Enterprise File Storage by clicking the `Storage and backups`{.action} then `Enterprise File Storage`{.action} menu in the [Bare Metal Cloud section of the OVHcloud Control Panel](/links/manager). - -Click your Enterprise File Storage service, then click the `Volumes`{.action} tab. Click the `Create a volume`{.action} button and create the new Enterprise File Storage volume with the following content: - -![Create an EFS volume](images/create-efs-volume.png){.thumbnail} - -Provide the following parameters to create a volume: - -| Name | Description | Required | -| ------------------- | -------------------------- | ------------- | -| Volume name | Name of the volume | False | -| Volume description | Description of the volume | False | -| Protocol | Protocol used to connect | True | -| Volume size | Size of the volume | True | - -The volume size needs to be adapted to your needs. For this guide, we define a volume size of 100 GiB. - -Once your volume is created, click on its ID and select `Access Control List`{.action}. -Enter your Nodes' public IPs and/or your Public Cloud Gateway public IP into the volume's ACLs. This will ensure your Kubernetes worker nodes can reach the storage service. - -#### Your cluster is installed with Public Network or a private network without using an OVHcloud Internet Gateway or a custom one as your default route - -Once the volume is created, we need to allow our Kubernetes nodes to access it. - -Get our Kubernetes nodes IP: - -```bash -kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -``` - -```console -$ kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -51.128.xx.xx 37.59.xx.xx -``` - -#### Your cluster is installed with Private Network and a default route via your Private Network (OVHcloud Internet Gateway/OpenStack Router or a custom one) - -Because your nodes are configured to be routed by the private network gateway, you need to add the gateway IP address to the ACLs. - -By using Public Cloud Gateway through our Managed Kubernetes Service, public IPs on nodes are only for management purposes: [MKS Known Limits](/pages/public_cloud/containers_orchestration/managed_kubernetes/known-limits) - -You can get your OVHcloud Internet Gateway's public IP by navigating through the OVHcloud Control Panel: - -`Public Cloud`{.action} > Select your tenant > `Network / Gateway`{.action} > `Public IP`{.action} - -You can also get your OVHcloud Internet Gateway's public IP via the following API: - -> [!api] -> -> @api {v1} /cloud GET /cloud/project/{serviceName}/region/{regionName}/gateway/{id} -> - -> [!success] -> If you are not familiar with the OVHcloud API, read our [First Steps with the OVHcloud API](/pages/manage_and_operate/api/first-steps) guide. - -If you want to use your Kubernetes cluster to know your Gateway's public IP, you can run this command: - -```bash -kubectl run get-gateway-ip --image=ubuntu:latest -i --tty --rm -``` - -This command will create a temporary pod and open a console. - -You may have to wait a bit to let the pod be created. Once the shell appears, you can run this command: - -```bash -apt update && apt upgrade -y && apt install -y curl && curl ifconfig.ovh -``` - -The public IP of the Gateway you're using should appear. - -Click on the `Manage IP Access (ACL)`{.action} menu of our newly created volume: - -![Manage Access of the EFS Volume](images/manage-efs-volume-access.png){.thumbnail} - -Add either the nodes' IPs one by one or the Gateway's public IP depending on your configuration: - -![Allow nodes IP to access the EFS Volume](images/manage-efs-volume-access-ip.png){.thumbnail} - -You should now have something similar to this: - -![EFS Configuration](images/manage-efs-volume-acl-list.png){.thumbnail} - -### Step 2 - Configuring Kubernetes to use our newly created EFS volume - -Your Kubernetes cluster needs some additional piece of software to make use of the Enterprise File Storage volume. We will install those and then create a first volume, shared across multiple pods. - -To do so, you can install the [csi-driver-nfs](https://github.com/kubernetes-csi/csi-driver-nfs): - -```bash -helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts -helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set controller.name="csi-nfs2-controller" --set rbac.name=nfs2 -``` - -```console -$ helm install csi-driver-nfs -n kube-system csi-driver-nfs/csi-driver-nfs --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set rbac.name=nfs --set controller.name="csi-nfs2-controller" -NAME: csi-driver-nfs -LAST DEPLOYED: Mon Dec 16 16:13:31 2024 -NAMESPACE: kube-system -STATUS: deployed -REVISION: 1 -TEST SUITE: None -NOTES: -The CSI NFS Driver is getting deployed to your cluster. - -To check CSI NFS Driver pods status, please run: - - kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -``` - -Let's verify our installation: - -```bash -kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" -``` - -```console -$ kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -NAME READY STATUS RESTARTS AGE -csi-nfs-node-7kdwj 0/3 ContainerCreating 0 5s -csi-nfs-node-7smkb 0/3 ContainerCreating 0 5s -csi-nfs2-controller-68d7768f64-pzs74 0/4 ContainerCreating 0 5s -csi-nfs-node-7kdwj 3/3 Running 0 11s -csi-nfs-node-7smkb 3/3 Running 0 20s -csi-nfs2-controller-68d7768f64-pzs74 4/4 Running 0 21s -``` - -### Step 3 - Create the NFS StorageClass Object - -Let's create a `efs-storageclass.yaml` file: - - -> [!primary] -> -> Don't forget to replace `[EFS_IP]`, `[EFS_PATH]` and `[PARTITION_NAME]` with the correct information. -> - -```yaml -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - name: nfs-csi -provisioner: nfs2.csi.k8s.io -parameters: - server: '[EFS_IP]' - share: '[EFS_PATH]' -reclaimPolicy: Delete -volumeBindingMode: Immediate -mountOptions: - - nfsvers=3 - - tcp -``` - -> [!primary] -> -> The `EFS_IP` is the private IP of your Enterprise File Storage and the `EFS_PATH` is the path to access your volume. -> -> The `tcp` parameter instructs the NFS mount to use the TCP protocol. -> - -Then apply the YAML file to create the StorageClass: - -```bash -kubectl apply -f efs-storageclass.yaml -``` - -### Step 4 - Create and use an NFS persistent volume - -Let’s create a `efs-persistent-volume-claim.yaml` file: - -```yaml -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: efs-pvc - namespace: default -spec: - accessModes: - - ReadWriteMany - storageClassName: nfs-csi - resources: - requests: - storage: 1Gi -``` - -And apply this to create the persistent volume claim: - -```bash -kubectl apply -f efs-persistent-volume-claim.yaml -``` - -You can find more information about the PVC by running this command: - -```bash -kubectl describe pvc efs-pvc -``` - -```console -$ kubectl describe pvc efs-pvc -Name: efs-pvc -Namespace: default -StorageClass: nfs-csi -Status: Bound -Volume: pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -Labels: -Annotations: pv.kubernetes.io/bind-completed: yes - pv.kubernetes.io/bound-by-controller: yes - volume.beta.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io - volume.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io -Finalizers: [kubernetes.io/pvc-protection] -Capacity: 1Gi -Access Modes: RWX -VolumeMode: Filesystem -Used By: -Events: - Type Reason Age From Message - ---- ------ ---- ---- ------- - Normal Provisioning 10s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 External provisioner is provisioning volume for claim "default/efs-pvc" - Normal ExternalProvisioning 10s persistentvolume-controller Waiting for a volume to be created either by the external provisioner 'nfs2.csi.k8s.io' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered. - Normal ProvisioningSucceeded 9s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 Successfully provisioned volume pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -``` - -By reading the events on this PersistentVolumeClaim, our PVC has been provisioned from our Enterprise File Storage. - -If you encounter errors such as: - -```console - Warning ProvisioningFailed 2s (x3 over 6s) nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-7f86e647-4632-4188-bfbe-84d11ea03426 -Output: mount.nfs: mounting 10.201.xx.xx:/share_xxx failed, reason given by server: No such file or directory -``` - -or similar to: - -```console - Warning ProvisioningFailed 1s (x3 over 4s) nfs2.csi.k8s.io_nodepool-cc5ad1db-f645-465c-85-node-6f9649_95fd7b5e-94aa-4c90-9ffa-9765beadfbe6 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-ebab8dfa-7ce8-4102-9ef5-5a626638f3b8 -Output: mount.nfs: access denied by server while mounting 10.201.xx.xx:/share_xxx - -``` - -It may indicate an issue with the Enterprise File Storage ACLs configuration. Check the authorized IPs which can access to the wanted partition on the ACLs list. - -> [!warning] -> If the number of __PersistentVolumes__ to schedule simultaneously is too important, some slowness can be encountered and volume creation can be delayed. - - -Let’s now create a DaemonSet of Nginx pods using the persistent volume claim as their webroot folder. - -Using a DaemonSet will create a pod on each deployed node and make troubleshooting easier in case of a misconfiguration or to isolate a node issue. - -Let's create a file named `nginx-daemonset.yaml`: - -```yaml -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: nfs-nginx - namespace: default -spec: - selector: - matchLabels: - name: nginx - template: - metadata: - labels: - name: nginx - spec: - volumes: - - name: nfs-volume - persistentVolumeClaim: - claimName: nfs-pvc - containers: - - name: nginx - image: nginx - ports: - - containerPort: 80 - name: "http-server" - volumeMounts: - - mountPath: "/usr/share/nginx/html" - name: nfs-volume -``` - -And apply this to create the Nginx DaemonSet: - -```bash -kubectl apply -f nginx-daemonset.yaml -``` - -Both pods should be running: - -```bash -kubectl get pods -NAME READY STATUS RESTARTS AGE -nfs-nginx-9z7wk 1/1 Running 0 11s -nfs-nginx-sfthh 1/1 Running 0 11s -``` - -Let’s enter inside the first Nginx pod and container to check if the Enterprise File Storage Volume is properly mounted and create a file on the NFS persistent volume: - -```bash -$ FIRST_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -1) -kubectl exec -it $FIRST_POD -n default -- bash -``` - -```bash -root@nfs-nginx-9z7wk:/# mount -l | grep nfs -10.201.xx.xx:/share_xxx/pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 on /usr/share/nginx/html type nfs (rw,relatime,vers=3,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.201.xx.xx,mountvers=3,mountport=635,mountproto=tcp,local_lock=none,addr=10.201.xx.xx) -``` - -Now, we will check if the EFS volume is properly shared between the deployed pods. - -Create a new `index.html` file: - -```bash -echo "NFS volume!" > /usr/share/nginx/html/index.html -``` - -And exit the Nginx container: - -```bash -exit -``` - -Let’s try to access our new web page: - -```bash -kubectl proxy -``` - -Generate the URL to open in your broswer: - -```bash -URL=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$FIRST_POD:/proxy/") -echo $URL -``` - -You can open the URL which is displayed to access the Nginx Service. - -Now let’s try to see if the data is shared with the second pod (if you have more than one node deployed). - -```bash -$ SECOND_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -2 | tail -1) -URL2=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$SECOND_POD:/proxy/") -echo $URL2 -``` - -You can open the URL which is displayed to access the Nginx Service on the other pod. - -As you can see the data is correctly shared between the two Nginx pods running on two different Kubernetes nodes. - -Congratulations, you have successfully set up a multi-attach persistent volume with OVHcloud Enterprise File Storage! - -## Go further - -To learn more about using your Kubernetes cluster the practical way, we invite you to look at our [OVHcloud Managed Kubernetes doc site](/products/public-cloud-containers-orchestration-managed-kubernetes-k8s). - -If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](/links/professional-services) to get a quote and ask our Professional Services experts for a custom analysis of your project. - -Join our [community of users](/links/community). \ No newline at end of file diff --git a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.fr-fr.md b/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.fr-fr.md deleted file mode 100644 index 6ca429e07ee..00000000000 --- a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.fr-fr.md +++ /dev/null @@ -1,411 +0,0 @@ ---- -title: Configuring multi-attach persistent volumes with Enterprise File Storage -excerpt: 'Find out how to configure a multi-attach persistent volume using our Enterprise File Storage solution' -updated: 2025-01-06 ---- - - - -## Objective - -OVHcloud Managed Kubernetes currently offers Block Storage for persistent volumes by default, but that may not be suited for applications that require a shared file system between multiple nodes. This tutorial shows how to configure a shared [Kubernetes Persistent Volume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) (AccessMode `ReadWriteMany` or `RWX`) using [OVHcloud Enterprise File Storage](/links/storage/enterprise-file-storage) as a storage backend. - -## Requirements - -This tutorial assumes that you already have a working [OVHcloud Managed Kubernetes](/links/public-cloud/kubernetes) cluster, and some basic knowledge of how to operate it. If you want to know more on those topics, please look at the [deploying a Hello World application](/pages/public_cloud/containers_orchestration/managed_kubernetes/deploying-hello-world) documentation. - -It also assumes you have an OVHcloud Enterprise File Storage already available. If you don't, you can [order one in the OVHcloud Control Panel](/links/manager). - -You also need to have [Helm](https://docs.helm.sh/) installed on your workstation. Please refer to the [How to install Helm on OVHcloud Managed Kubernetes Service](/pages/public_cloud/containers_orchestration/managed_kubernetes/installing-helm) tutorial. - - -## Instructions - -### Step 1 - Creating a volume and granting your Managed Kubernetes Service access to it - -Your Enterprise File Storage service can expose multiple volumes, and supports a variety of protocols. Each volume is accessible only from a specific range of IPs. We will create a new EFS volume and make it accessible from your Kubernetes worker nodes. - -You can find more information about our Enterprise File Storage product by clicking [here](/pages/storage_and_backup/file_storage/enterprise_file_storage/netapp_control_panel). - -Access the UI for OVHcloud Enterprise File Storage by clicking the `Storage and backups`{.action} then `Enterprise File Storage`{.action} menu in the [Bare Metal Cloud section of the OVHcloud Control Panel](/links/manager). - -Click your Enterprise File Storage service, then click the `Volumes`{.action} tab. Click the `Create a volume`{.action} button and create the new Enterprise File Storage volume with the following content: - -![Create an EFS volume](images/create-efs-volume.png){.thumbnail} - -Provide the following parameters to create a volume: - -| Name | Description | Required | -| ------------------- | -------------------------- | ------------- | -| Volume name | Name of the volume | False | -| Volume description | Description of the volume | False | -| Protocol | Protocol used to connect | True | -| Volume size | Size of the volume | True | - -The volume size needs to be adapted to your needs. For this guide, we define a volume size of 100 GiB. - -Once your volume is created, click on its ID and select `Access Control List`{.action}. -Enter your Nodes' public IPs and/or your Public Cloud Gateway public IP into the volume's ACLs. This will ensure your Kubernetes worker nodes can reach the storage service. - -#### Your cluster is installed with Public Network or a private network without using an OVHcloud Internet Gateway or a custom one as your default route - -Once the volume is created, we need to allow our Kubernetes nodes to access it. - -Get our Kubernetes nodes IP: - -```bash -kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -``` - -```console -$ kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -51.128.xx.xx 37.59.xx.xx -``` - -#### Your cluster is installed with Private Network and a default route via your Private Network (OVHcloud Internet Gateway/OpenStack Router or a custom one) - -Because your nodes are configured to be routed by the private network gateway, you need to add the gateway IP address to the ACLs. - -By using Public Cloud Gateway through our Managed Kubernetes Service, public IPs on nodes are only for management purposes: [MKS Known Limits](/pages/public_cloud/containers_orchestration/managed_kubernetes/known-limits) - -You can get your OVHcloud Internet Gateway's public IP by navigating through the OVHcloud Control Panel: - -`Public Cloud`{.action} > Select your tenant > `Network / Gateway`{.action} > `Public IP`{.action} - -You can also get your OVHcloud Internet Gateway's public IP via the following API: - -> [!api] -> -> @api {v1} /cloud GET /cloud/project/{serviceName}/region/{regionName}/gateway/{id} -> - -> [!success] -> If you are not familiar with the OVHcloud API, read our [First Steps with the OVHcloud API](/pages/manage_and_operate/api/first-steps) guide. - -If you want to use your Kubernetes cluster to know your Gateway's public IP, you can run this command: - -```bash -kubectl run get-gateway-ip --image=ubuntu:latest -i --tty --rm -``` - -This command will create a temporary pod and open a console. - -You may have to wait a bit to let the pod be created. Once the shell appears, you can run this command: - -```bash -apt update && apt upgrade -y && apt install -y curl && curl ifconfig.ovh -``` - -The public IP of the Gateway you're using should appear. - -Click on the `Manage IP Access (ACL)`{.action} menu of our newly created volume: - -![Manage Access of the EFS Volume](images/manage-efs-volume-access.png){.thumbnail} - -Add either the nodes' IPs one by one or the Gateway's public IP depending on your configuration: - -![Allow nodes IP to access the EFS Volume](images/manage-efs-volume-access-ip.png){.thumbnail} - -You should now have something similar to this: - -![EFS Configuration](images/manage-efs-volume-acl-list.png){.thumbnail} - -### Step 2 - Configuring Kubernetes to use our newly created EFS volume - -Your Kubernetes cluster needs some additional piece of software to make use of the Enterprise File Storage volume. We will install those and then create a first volume, shared across multiple pods. - -To do so, you can install the [csi-driver-nfs](https://github.com/kubernetes-csi/csi-driver-nfs): - -```bash -helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts -helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set controller.name="csi-nfs2-controller" --set rbac.name=nfs2 -``` - -```console -$ helm install csi-driver-nfs -n kube-system csi-driver-nfs/csi-driver-nfs --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set rbac.name=nfs --set controller.name="csi-nfs2-controller" -NAME: csi-driver-nfs -LAST DEPLOYED: Mon Dec 16 16:13:31 2024 -NAMESPACE: kube-system -STATUS: deployed -REVISION: 1 -TEST SUITE: None -NOTES: -The CSI NFS Driver is getting deployed to your cluster. - -To check CSI NFS Driver pods status, please run: - - kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -``` - -Let's verify our installation: - -```bash -kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" -``` - -```console -$ kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -NAME READY STATUS RESTARTS AGE -csi-nfs-node-7kdwj 0/3 ContainerCreating 0 5s -csi-nfs-node-7smkb 0/3 ContainerCreating 0 5s -csi-nfs2-controller-68d7768f64-pzs74 0/4 ContainerCreating 0 5s -csi-nfs-node-7kdwj 3/3 Running 0 11s -csi-nfs-node-7smkb 3/3 Running 0 20s -csi-nfs2-controller-68d7768f64-pzs74 4/4 Running 0 21s -``` - -### Step 3 - Create the NFS StorageClass Object - -Let's create a `efs-storageclass.yaml` file: - - -> [!primary] -> -> Don't forget to replace `[EFS_IP]`, `[EFS_PATH]` and `[PARTITION_NAME]` with the correct information. -> - -```yaml -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - name: nfs-csi -provisioner: nfs2.csi.k8s.io -parameters: - server: '[EFS_IP]' - share: '[EFS_PATH]' -reclaimPolicy: Delete -volumeBindingMode: Immediate -mountOptions: - - nfsvers=3 - - tcp -``` - -> [!primary] -> -> The `EFS_IP` is the private IP of your Enterprise File Storage and the `EFS_PATH` is the path to access your volume. -> -> The `tcp` parameter instructs the NFS mount to use the TCP protocol. -> - -Then apply the YAML file to create the StorageClass: - -```bash -kubectl apply -f efs-storageclass.yaml -``` - -### Step 4 - Create and use an NFS persistent volume - -Let’s create a `efs-persistent-volume-claim.yaml` file: - -```yaml -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: efs-pvc - namespace: default -spec: - accessModes: - - ReadWriteMany - storageClassName: nfs-csi - resources: - requests: - storage: 1Gi -``` - -And apply this to create the persistent volume claim: - -```bash -kubectl apply -f efs-persistent-volume-claim.yaml -``` - -You can find more information about the PVC by running this command: - -```bash -kubectl describe pvc efs-pvc -``` - -```console -$ kubectl describe pvc efs-pvc -Name: efs-pvc -Namespace: default -StorageClass: nfs-csi -Status: Bound -Volume: pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -Labels: -Annotations: pv.kubernetes.io/bind-completed: yes - pv.kubernetes.io/bound-by-controller: yes - volume.beta.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io - volume.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io -Finalizers: [kubernetes.io/pvc-protection] -Capacity: 1Gi -Access Modes: RWX -VolumeMode: Filesystem -Used By: -Events: - Type Reason Age From Message - ---- ------ ---- ---- ------- - Normal Provisioning 10s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 External provisioner is provisioning volume for claim "default/efs-pvc" - Normal ExternalProvisioning 10s persistentvolume-controller Waiting for a volume to be created either by the external provisioner 'nfs2.csi.k8s.io' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered. - Normal ProvisioningSucceeded 9s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 Successfully provisioned volume pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -``` - -By reading the events on this PersistentVolumeClaim, our PVC has been provisioned from our Enterprise File Storage. - -If you encounter errors such as: - -```console - Warning ProvisioningFailed 2s (x3 over 6s) nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-7f86e647-4632-4188-bfbe-84d11ea03426 -Output: mount.nfs: mounting 10.201.xx.xx:/share_xxx failed, reason given by server: No such file or directory -``` - -or similar to: - -```console - Warning ProvisioningFailed 1s (x3 over 4s) nfs2.csi.k8s.io_nodepool-cc5ad1db-f645-465c-85-node-6f9649_95fd7b5e-94aa-4c90-9ffa-9765beadfbe6 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-ebab8dfa-7ce8-4102-9ef5-5a626638f3b8 -Output: mount.nfs: access denied by server while mounting 10.201.xx.xx:/share_xxx - -``` - -It may indicate an issue with the Enterprise File Storage ACLs configuration. Check the authorized IPs which can access to the wanted partition on the ACLs list. - -> [!warning] -> If the number of __PersistentVolumes__ to schedule simultaneously is too important, some slowness can be encountered and volume creation can be delayed. - - -Let’s now create a DaemonSet of Nginx pods using the persistent volume claim as their webroot folder. - -Using a DaemonSet will create a pod on each deployed node and make troubleshooting easier in case of a misconfiguration or to isolate a node issue. - -Let's create a file named `nginx-daemonset.yaml`: - -```yaml -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: nfs-nginx - namespace: default -spec: - selector: - matchLabels: - name: nginx - template: - metadata: - labels: - name: nginx - spec: - volumes: - - name: nfs-volume - persistentVolumeClaim: - claimName: nfs-pvc - containers: - - name: nginx - image: nginx - ports: - - containerPort: 80 - name: "http-server" - volumeMounts: - - mountPath: "/usr/share/nginx/html" - name: nfs-volume -``` - -And apply this to create the Nginx DaemonSet: - -```bash -kubectl apply -f nginx-daemonset.yaml -``` - -Both pods should be running: - -```bash -kubectl get pods -NAME READY STATUS RESTARTS AGE -nfs-nginx-9z7wk 1/1 Running 0 11s -nfs-nginx-sfthh 1/1 Running 0 11s -``` - -Let’s enter inside the first Nginx pod and container to check if the Enterprise File Storage Volume is properly mounted and create a file on the NFS persistent volume: - -```bash -$ FIRST_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -1) -kubectl exec -it $FIRST_POD -n default -- bash -``` - -```bash -root@nfs-nginx-9z7wk:/# mount -l | grep nfs -10.201.xx.xx:/share_xxx/pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 on /usr/share/nginx/html type nfs (rw,relatime,vers=3,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.201.xx.xx,mountvers=3,mountport=635,mountproto=tcp,local_lock=none,addr=10.201.xx.xx) -``` - -Now, we will check if the EFS volume is properly shared between the deployed pods. - -Create a new `index.html` file: - -```bash -echo "NFS volume!" > /usr/share/nginx/html/index.html -``` - -And exit the Nginx container: - -```bash -exit -``` - -Let’s try to access our new web page: - -```bash -kubectl proxy -``` - -Generate the URL to open in your broswer: - -```bash -URL=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$FIRST_POD:/proxy/") -echo $URL -``` - -You can open the URL which is displayed to access the Nginx Service. - -Now let’s try to see if the data is shared with the second pod (if you have more than one node deployed). - -```bash -$ SECOND_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -2 | tail -1) -URL2=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$SECOND_POD:/proxy/") -echo $URL2 -``` - -You can open the URL which is displayed to access the Nginx Service on the other pod. - -As you can see the data is correctly shared between the two Nginx pods running on two different Kubernetes nodes. - -Congratulations, you have successfully set up a multi-attach persistent volume with OVHcloud Enterprise File Storage! - -## Go further - -To learn more about using your Kubernetes cluster the practical way, we invite you to look at our [OVHcloud Managed Kubernetes doc site](/products/public-cloud-containers-orchestration-managed-kubernetes-k8s). - -If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](/links/professional-services) to get a quote and ask our Professional Services experts for a custom analysis of your project. - -Join our [community of users](/links/community). \ No newline at end of file diff --git a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.it-it.md b/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.it-it.md deleted file mode 100644 index 6ca429e07ee..00000000000 --- a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.it-it.md +++ /dev/null @@ -1,411 +0,0 @@ ---- -title: Configuring multi-attach persistent volumes with Enterprise File Storage -excerpt: 'Find out how to configure a multi-attach persistent volume using our Enterprise File Storage solution' -updated: 2025-01-06 ---- - - - -## Objective - -OVHcloud Managed Kubernetes currently offers Block Storage for persistent volumes by default, but that may not be suited for applications that require a shared file system between multiple nodes. This tutorial shows how to configure a shared [Kubernetes Persistent Volume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) (AccessMode `ReadWriteMany` or `RWX`) using [OVHcloud Enterprise File Storage](/links/storage/enterprise-file-storage) as a storage backend. - -## Requirements - -This tutorial assumes that you already have a working [OVHcloud Managed Kubernetes](/links/public-cloud/kubernetes) cluster, and some basic knowledge of how to operate it. If you want to know more on those topics, please look at the [deploying a Hello World application](/pages/public_cloud/containers_orchestration/managed_kubernetes/deploying-hello-world) documentation. - -It also assumes you have an OVHcloud Enterprise File Storage already available. If you don't, you can [order one in the OVHcloud Control Panel](/links/manager). - -You also need to have [Helm](https://docs.helm.sh/) installed on your workstation. Please refer to the [How to install Helm on OVHcloud Managed Kubernetes Service](/pages/public_cloud/containers_orchestration/managed_kubernetes/installing-helm) tutorial. - - -## Instructions - -### Step 1 - Creating a volume and granting your Managed Kubernetes Service access to it - -Your Enterprise File Storage service can expose multiple volumes, and supports a variety of protocols. Each volume is accessible only from a specific range of IPs. We will create a new EFS volume and make it accessible from your Kubernetes worker nodes. - -You can find more information about our Enterprise File Storage product by clicking [here](/pages/storage_and_backup/file_storage/enterprise_file_storage/netapp_control_panel). - -Access the UI for OVHcloud Enterprise File Storage by clicking the `Storage and backups`{.action} then `Enterprise File Storage`{.action} menu in the [Bare Metal Cloud section of the OVHcloud Control Panel](/links/manager). - -Click your Enterprise File Storage service, then click the `Volumes`{.action} tab. Click the `Create a volume`{.action} button and create the new Enterprise File Storage volume with the following content: - -![Create an EFS volume](images/create-efs-volume.png){.thumbnail} - -Provide the following parameters to create a volume: - -| Name | Description | Required | -| ------------------- | -------------------------- | ------------- | -| Volume name | Name of the volume | False | -| Volume description | Description of the volume | False | -| Protocol | Protocol used to connect | True | -| Volume size | Size of the volume | True | - -The volume size needs to be adapted to your needs. For this guide, we define a volume size of 100 GiB. - -Once your volume is created, click on its ID and select `Access Control List`{.action}. -Enter your Nodes' public IPs and/or your Public Cloud Gateway public IP into the volume's ACLs. This will ensure your Kubernetes worker nodes can reach the storage service. - -#### Your cluster is installed with Public Network or a private network without using an OVHcloud Internet Gateway or a custom one as your default route - -Once the volume is created, we need to allow our Kubernetes nodes to access it. - -Get our Kubernetes nodes IP: - -```bash -kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -``` - -```console -$ kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -51.128.xx.xx 37.59.xx.xx -``` - -#### Your cluster is installed with Private Network and a default route via your Private Network (OVHcloud Internet Gateway/OpenStack Router or a custom one) - -Because your nodes are configured to be routed by the private network gateway, you need to add the gateway IP address to the ACLs. - -By using Public Cloud Gateway through our Managed Kubernetes Service, public IPs on nodes are only for management purposes: [MKS Known Limits](/pages/public_cloud/containers_orchestration/managed_kubernetes/known-limits) - -You can get your OVHcloud Internet Gateway's public IP by navigating through the OVHcloud Control Panel: - -`Public Cloud`{.action} > Select your tenant > `Network / Gateway`{.action} > `Public IP`{.action} - -You can also get your OVHcloud Internet Gateway's public IP via the following API: - -> [!api] -> -> @api {v1} /cloud GET /cloud/project/{serviceName}/region/{regionName}/gateway/{id} -> - -> [!success] -> If you are not familiar with the OVHcloud API, read our [First Steps with the OVHcloud API](/pages/manage_and_operate/api/first-steps) guide. - -If you want to use your Kubernetes cluster to know your Gateway's public IP, you can run this command: - -```bash -kubectl run get-gateway-ip --image=ubuntu:latest -i --tty --rm -``` - -This command will create a temporary pod and open a console. - -You may have to wait a bit to let the pod be created. Once the shell appears, you can run this command: - -```bash -apt update && apt upgrade -y && apt install -y curl && curl ifconfig.ovh -``` - -The public IP of the Gateway you're using should appear. - -Click on the `Manage IP Access (ACL)`{.action} menu of our newly created volume: - -![Manage Access of the EFS Volume](images/manage-efs-volume-access.png){.thumbnail} - -Add either the nodes' IPs one by one or the Gateway's public IP depending on your configuration: - -![Allow nodes IP to access the EFS Volume](images/manage-efs-volume-access-ip.png){.thumbnail} - -You should now have something similar to this: - -![EFS Configuration](images/manage-efs-volume-acl-list.png){.thumbnail} - -### Step 2 - Configuring Kubernetes to use our newly created EFS volume - -Your Kubernetes cluster needs some additional piece of software to make use of the Enterprise File Storage volume. We will install those and then create a first volume, shared across multiple pods. - -To do so, you can install the [csi-driver-nfs](https://github.com/kubernetes-csi/csi-driver-nfs): - -```bash -helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts -helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set controller.name="csi-nfs2-controller" --set rbac.name=nfs2 -``` - -```console -$ helm install csi-driver-nfs -n kube-system csi-driver-nfs/csi-driver-nfs --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set rbac.name=nfs --set controller.name="csi-nfs2-controller" -NAME: csi-driver-nfs -LAST DEPLOYED: Mon Dec 16 16:13:31 2024 -NAMESPACE: kube-system -STATUS: deployed -REVISION: 1 -TEST SUITE: None -NOTES: -The CSI NFS Driver is getting deployed to your cluster. - -To check CSI NFS Driver pods status, please run: - - kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -``` - -Let's verify our installation: - -```bash -kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" -``` - -```console -$ kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -NAME READY STATUS RESTARTS AGE -csi-nfs-node-7kdwj 0/3 ContainerCreating 0 5s -csi-nfs-node-7smkb 0/3 ContainerCreating 0 5s -csi-nfs2-controller-68d7768f64-pzs74 0/4 ContainerCreating 0 5s -csi-nfs-node-7kdwj 3/3 Running 0 11s -csi-nfs-node-7smkb 3/3 Running 0 20s -csi-nfs2-controller-68d7768f64-pzs74 4/4 Running 0 21s -``` - -### Step 3 - Create the NFS StorageClass Object - -Let's create a `efs-storageclass.yaml` file: - - -> [!primary] -> -> Don't forget to replace `[EFS_IP]`, `[EFS_PATH]` and `[PARTITION_NAME]` with the correct information. -> - -```yaml -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - name: nfs-csi -provisioner: nfs2.csi.k8s.io -parameters: - server: '[EFS_IP]' - share: '[EFS_PATH]' -reclaimPolicy: Delete -volumeBindingMode: Immediate -mountOptions: - - nfsvers=3 - - tcp -``` - -> [!primary] -> -> The `EFS_IP` is the private IP of your Enterprise File Storage and the `EFS_PATH` is the path to access your volume. -> -> The `tcp` parameter instructs the NFS mount to use the TCP protocol. -> - -Then apply the YAML file to create the StorageClass: - -```bash -kubectl apply -f efs-storageclass.yaml -``` - -### Step 4 - Create and use an NFS persistent volume - -Let’s create a `efs-persistent-volume-claim.yaml` file: - -```yaml -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: efs-pvc - namespace: default -spec: - accessModes: - - ReadWriteMany - storageClassName: nfs-csi - resources: - requests: - storage: 1Gi -``` - -And apply this to create the persistent volume claim: - -```bash -kubectl apply -f efs-persistent-volume-claim.yaml -``` - -You can find more information about the PVC by running this command: - -```bash -kubectl describe pvc efs-pvc -``` - -```console -$ kubectl describe pvc efs-pvc -Name: efs-pvc -Namespace: default -StorageClass: nfs-csi -Status: Bound -Volume: pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -Labels: -Annotations: pv.kubernetes.io/bind-completed: yes - pv.kubernetes.io/bound-by-controller: yes - volume.beta.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io - volume.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io -Finalizers: [kubernetes.io/pvc-protection] -Capacity: 1Gi -Access Modes: RWX -VolumeMode: Filesystem -Used By: -Events: - Type Reason Age From Message - ---- ------ ---- ---- ------- - Normal Provisioning 10s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 External provisioner is provisioning volume for claim "default/efs-pvc" - Normal ExternalProvisioning 10s persistentvolume-controller Waiting for a volume to be created either by the external provisioner 'nfs2.csi.k8s.io' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered. - Normal ProvisioningSucceeded 9s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 Successfully provisioned volume pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -``` - -By reading the events on this PersistentVolumeClaim, our PVC has been provisioned from our Enterprise File Storage. - -If you encounter errors such as: - -```console - Warning ProvisioningFailed 2s (x3 over 6s) nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-7f86e647-4632-4188-bfbe-84d11ea03426 -Output: mount.nfs: mounting 10.201.xx.xx:/share_xxx failed, reason given by server: No such file or directory -``` - -or similar to: - -```console - Warning ProvisioningFailed 1s (x3 over 4s) nfs2.csi.k8s.io_nodepool-cc5ad1db-f645-465c-85-node-6f9649_95fd7b5e-94aa-4c90-9ffa-9765beadfbe6 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-ebab8dfa-7ce8-4102-9ef5-5a626638f3b8 -Output: mount.nfs: access denied by server while mounting 10.201.xx.xx:/share_xxx - -``` - -It may indicate an issue with the Enterprise File Storage ACLs configuration. Check the authorized IPs which can access to the wanted partition on the ACLs list. - -> [!warning] -> If the number of __PersistentVolumes__ to schedule simultaneously is too important, some slowness can be encountered and volume creation can be delayed. - - -Let’s now create a DaemonSet of Nginx pods using the persistent volume claim as their webroot folder. - -Using a DaemonSet will create a pod on each deployed node and make troubleshooting easier in case of a misconfiguration or to isolate a node issue. - -Let's create a file named `nginx-daemonset.yaml`: - -```yaml -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: nfs-nginx - namespace: default -spec: - selector: - matchLabels: - name: nginx - template: - metadata: - labels: - name: nginx - spec: - volumes: - - name: nfs-volume - persistentVolumeClaim: - claimName: nfs-pvc - containers: - - name: nginx - image: nginx - ports: - - containerPort: 80 - name: "http-server" - volumeMounts: - - mountPath: "/usr/share/nginx/html" - name: nfs-volume -``` - -And apply this to create the Nginx DaemonSet: - -```bash -kubectl apply -f nginx-daemonset.yaml -``` - -Both pods should be running: - -```bash -kubectl get pods -NAME READY STATUS RESTARTS AGE -nfs-nginx-9z7wk 1/1 Running 0 11s -nfs-nginx-sfthh 1/1 Running 0 11s -``` - -Let’s enter inside the first Nginx pod and container to check if the Enterprise File Storage Volume is properly mounted and create a file on the NFS persistent volume: - -```bash -$ FIRST_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -1) -kubectl exec -it $FIRST_POD -n default -- bash -``` - -```bash -root@nfs-nginx-9z7wk:/# mount -l | grep nfs -10.201.xx.xx:/share_xxx/pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 on /usr/share/nginx/html type nfs (rw,relatime,vers=3,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.201.xx.xx,mountvers=3,mountport=635,mountproto=tcp,local_lock=none,addr=10.201.xx.xx) -``` - -Now, we will check if the EFS volume is properly shared between the deployed pods. - -Create a new `index.html` file: - -```bash -echo "NFS volume!" > /usr/share/nginx/html/index.html -``` - -And exit the Nginx container: - -```bash -exit -``` - -Let’s try to access our new web page: - -```bash -kubectl proxy -``` - -Generate the URL to open in your broswer: - -```bash -URL=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$FIRST_POD:/proxy/") -echo $URL -``` - -You can open the URL which is displayed to access the Nginx Service. - -Now let’s try to see if the data is shared with the second pod (if you have more than one node deployed). - -```bash -$ SECOND_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -2 | tail -1) -URL2=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$SECOND_POD:/proxy/") -echo $URL2 -``` - -You can open the URL which is displayed to access the Nginx Service on the other pod. - -As you can see the data is correctly shared between the two Nginx pods running on two different Kubernetes nodes. - -Congratulations, you have successfully set up a multi-attach persistent volume with OVHcloud Enterprise File Storage! - -## Go further - -To learn more about using your Kubernetes cluster the practical way, we invite you to look at our [OVHcloud Managed Kubernetes doc site](/products/public-cloud-containers-orchestration-managed-kubernetes-k8s). - -If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](/links/professional-services) to get a quote and ask our Professional Services experts for a custom analysis of your project. - -Join our [community of users](/links/community). \ No newline at end of file diff --git a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.pl-pl.md b/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.pl-pl.md deleted file mode 100644 index 6ca429e07ee..00000000000 --- a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.pl-pl.md +++ /dev/null @@ -1,411 +0,0 @@ ---- -title: Configuring multi-attach persistent volumes with Enterprise File Storage -excerpt: 'Find out how to configure a multi-attach persistent volume using our Enterprise File Storage solution' -updated: 2025-01-06 ---- - - - -## Objective - -OVHcloud Managed Kubernetes currently offers Block Storage for persistent volumes by default, but that may not be suited for applications that require a shared file system between multiple nodes. This tutorial shows how to configure a shared [Kubernetes Persistent Volume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) (AccessMode `ReadWriteMany` or `RWX`) using [OVHcloud Enterprise File Storage](/links/storage/enterprise-file-storage) as a storage backend. - -## Requirements - -This tutorial assumes that you already have a working [OVHcloud Managed Kubernetes](/links/public-cloud/kubernetes) cluster, and some basic knowledge of how to operate it. If you want to know more on those topics, please look at the [deploying a Hello World application](/pages/public_cloud/containers_orchestration/managed_kubernetes/deploying-hello-world) documentation. - -It also assumes you have an OVHcloud Enterprise File Storage already available. If you don't, you can [order one in the OVHcloud Control Panel](/links/manager). - -You also need to have [Helm](https://docs.helm.sh/) installed on your workstation. Please refer to the [How to install Helm on OVHcloud Managed Kubernetes Service](/pages/public_cloud/containers_orchestration/managed_kubernetes/installing-helm) tutorial. - - -## Instructions - -### Step 1 - Creating a volume and granting your Managed Kubernetes Service access to it - -Your Enterprise File Storage service can expose multiple volumes, and supports a variety of protocols. Each volume is accessible only from a specific range of IPs. We will create a new EFS volume and make it accessible from your Kubernetes worker nodes. - -You can find more information about our Enterprise File Storage product by clicking [here](/pages/storage_and_backup/file_storage/enterprise_file_storage/netapp_control_panel). - -Access the UI for OVHcloud Enterprise File Storage by clicking the `Storage and backups`{.action} then `Enterprise File Storage`{.action} menu in the [Bare Metal Cloud section of the OVHcloud Control Panel](/links/manager). - -Click your Enterprise File Storage service, then click the `Volumes`{.action} tab. Click the `Create a volume`{.action} button and create the new Enterprise File Storage volume with the following content: - -![Create an EFS volume](images/create-efs-volume.png){.thumbnail} - -Provide the following parameters to create a volume: - -| Name | Description | Required | -| ------------------- | -------------------------- | ------------- | -| Volume name | Name of the volume | False | -| Volume description | Description of the volume | False | -| Protocol | Protocol used to connect | True | -| Volume size | Size of the volume | True | - -The volume size needs to be adapted to your needs. For this guide, we define a volume size of 100 GiB. - -Once your volume is created, click on its ID and select `Access Control List`{.action}. -Enter your Nodes' public IPs and/or your Public Cloud Gateway public IP into the volume's ACLs. This will ensure your Kubernetes worker nodes can reach the storage service. - -#### Your cluster is installed with Public Network or a private network without using an OVHcloud Internet Gateway or a custom one as your default route - -Once the volume is created, we need to allow our Kubernetes nodes to access it. - -Get our Kubernetes nodes IP: - -```bash -kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -``` - -```console -$ kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -51.128.xx.xx 37.59.xx.xx -``` - -#### Your cluster is installed with Private Network and a default route via your Private Network (OVHcloud Internet Gateway/OpenStack Router or a custom one) - -Because your nodes are configured to be routed by the private network gateway, you need to add the gateway IP address to the ACLs. - -By using Public Cloud Gateway through our Managed Kubernetes Service, public IPs on nodes are only for management purposes: [MKS Known Limits](/pages/public_cloud/containers_orchestration/managed_kubernetes/known-limits) - -You can get your OVHcloud Internet Gateway's public IP by navigating through the OVHcloud Control Panel: - -`Public Cloud`{.action} > Select your tenant > `Network / Gateway`{.action} > `Public IP`{.action} - -You can also get your OVHcloud Internet Gateway's public IP via the following API: - -> [!api] -> -> @api {v1} /cloud GET /cloud/project/{serviceName}/region/{regionName}/gateway/{id} -> - -> [!success] -> If you are not familiar with the OVHcloud API, read our [First Steps with the OVHcloud API](/pages/manage_and_operate/api/first-steps) guide. - -If you want to use your Kubernetes cluster to know your Gateway's public IP, you can run this command: - -```bash -kubectl run get-gateway-ip --image=ubuntu:latest -i --tty --rm -``` - -This command will create a temporary pod and open a console. - -You may have to wait a bit to let the pod be created. Once the shell appears, you can run this command: - -```bash -apt update && apt upgrade -y && apt install -y curl && curl ifconfig.ovh -``` - -The public IP of the Gateway you're using should appear. - -Click on the `Manage IP Access (ACL)`{.action} menu of our newly created volume: - -![Manage Access of the EFS Volume](images/manage-efs-volume-access.png){.thumbnail} - -Add either the nodes' IPs one by one or the Gateway's public IP depending on your configuration: - -![Allow nodes IP to access the EFS Volume](images/manage-efs-volume-access-ip.png){.thumbnail} - -You should now have something similar to this: - -![EFS Configuration](images/manage-efs-volume-acl-list.png){.thumbnail} - -### Step 2 - Configuring Kubernetes to use our newly created EFS volume - -Your Kubernetes cluster needs some additional piece of software to make use of the Enterprise File Storage volume. We will install those and then create a first volume, shared across multiple pods. - -To do so, you can install the [csi-driver-nfs](https://github.com/kubernetes-csi/csi-driver-nfs): - -```bash -helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts -helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set controller.name="csi-nfs2-controller" --set rbac.name=nfs2 -``` - -```console -$ helm install csi-driver-nfs -n kube-system csi-driver-nfs/csi-driver-nfs --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set rbac.name=nfs --set controller.name="csi-nfs2-controller" -NAME: csi-driver-nfs -LAST DEPLOYED: Mon Dec 16 16:13:31 2024 -NAMESPACE: kube-system -STATUS: deployed -REVISION: 1 -TEST SUITE: None -NOTES: -The CSI NFS Driver is getting deployed to your cluster. - -To check CSI NFS Driver pods status, please run: - - kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -``` - -Let's verify our installation: - -```bash -kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" -``` - -```console -$ kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -NAME READY STATUS RESTARTS AGE -csi-nfs-node-7kdwj 0/3 ContainerCreating 0 5s -csi-nfs-node-7smkb 0/3 ContainerCreating 0 5s -csi-nfs2-controller-68d7768f64-pzs74 0/4 ContainerCreating 0 5s -csi-nfs-node-7kdwj 3/3 Running 0 11s -csi-nfs-node-7smkb 3/3 Running 0 20s -csi-nfs2-controller-68d7768f64-pzs74 4/4 Running 0 21s -``` - -### Step 3 - Create the NFS StorageClass Object - -Let's create a `efs-storageclass.yaml` file: - - -> [!primary] -> -> Don't forget to replace `[EFS_IP]`, `[EFS_PATH]` and `[PARTITION_NAME]` with the correct information. -> - -```yaml -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - name: nfs-csi -provisioner: nfs2.csi.k8s.io -parameters: - server: '[EFS_IP]' - share: '[EFS_PATH]' -reclaimPolicy: Delete -volumeBindingMode: Immediate -mountOptions: - - nfsvers=3 - - tcp -``` - -> [!primary] -> -> The `EFS_IP` is the private IP of your Enterprise File Storage and the `EFS_PATH` is the path to access your volume. -> -> The `tcp` parameter instructs the NFS mount to use the TCP protocol. -> - -Then apply the YAML file to create the StorageClass: - -```bash -kubectl apply -f efs-storageclass.yaml -``` - -### Step 4 - Create and use an NFS persistent volume - -Let’s create a `efs-persistent-volume-claim.yaml` file: - -```yaml -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: efs-pvc - namespace: default -spec: - accessModes: - - ReadWriteMany - storageClassName: nfs-csi - resources: - requests: - storage: 1Gi -``` - -And apply this to create the persistent volume claim: - -```bash -kubectl apply -f efs-persistent-volume-claim.yaml -``` - -You can find more information about the PVC by running this command: - -```bash -kubectl describe pvc efs-pvc -``` - -```console -$ kubectl describe pvc efs-pvc -Name: efs-pvc -Namespace: default -StorageClass: nfs-csi -Status: Bound -Volume: pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -Labels: -Annotations: pv.kubernetes.io/bind-completed: yes - pv.kubernetes.io/bound-by-controller: yes - volume.beta.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io - volume.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io -Finalizers: [kubernetes.io/pvc-protection] -Capacity: 1Gi -Access Modes: RWX -VolumeMode: Filesystem -Used By: -Events: - Type Reason Age From Message - ---- ------ ---- ---- ------- - Normal Provisioning 10s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 External provisioner is provisioning volume for claim "default/efs-pvc" - Normal ExternalProvisioning 10s persistentvolume-controller Waiting for a volume to be created either by the external provisioner 'nfs2.csi.k8s.io' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered. - Normal ProvisioningSucceeded 9s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 Successfully provisioned volume pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -``` - -By reading the events on this PersistentVolumeClaim, our PVC has been provisioned from our Enterprise File Storage. - -If you encounter errors such as: - -```console - Warning ProvisioningFailed 2s (x3 over 6s) nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-7f86e647-4632-4188-bfbe-84d11ea03426 -Output: mount.nfs: mounting 10.201.xx.xx:/share_xxx failed, reason given by server: No such file or directory -``` - -or similar to: - -```console - Warning ProvisioningFailed 1s (x3 over 4s) nfs2.csi.k8s.io_nodepool-cc5ad1db-f645-465c-85-node-6f9649_95fd7b5e-94aa-4c90-9ffa-9765beadfbe6 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-ebab8dfa-7ce8-4102-9ef5-5a626638f3b8 -Output: mount.nfs: access denied by server while mounting 10.201.xx.xx:/share_xxx - -``` - -It may indicate an issue with the Enterprise File Storage ACLs configuration. Check the authorized IPs which can access to the wanted partition on the ACLs list. - -> [!warning] -> If the number of __PersistentVolumes__ to schedule simultaneously is too important, some slowness can be encountered and volume creation can be delayed. - - -Let’s now create a DaemonSet of Nginx pods using the persistent volume claim as their webroot folder. - -Using a DaemonSet will create a pod on each deployed node and make troubleshooting easier in case of a misconfiguration or to isolate a node issue. - -Let's create a file named `nginx-daemonset.yaml`: - -```yaml -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: nfs-nginx - namespace: default -spec: - selector: - matchLabels: - name: nginx - template: - metadata: - labels: - name: nginx - spec: - volumes: - - name: nfs-volume - persistentVolumeClaim: - claimName: nfs-pvc - containers: - - name: nginx - image: nginx - ports: - - containerPort: 80 - name: "http-server" - volumeMounts: - - mountPath: "/usr/share/nginx/html" - name: nfs-volume -``` - -And apply this to create the Nginx DaemonSet: - -```bash -kubectl apply -f nginx-daemonset.yaml -``` - -Both pods should be running: - -```bash -kubectl get pods -NAME READY STATUS RESTARTS AGE -nfs-nginx-9z7wk 1/1 Running 0 11s -nfs-nginx-sfthh 1/1 Running 0 11s -``` - -Let’s enter inside the first Nginx pod and container to check if the Enterprise File Storage Volume is properly mounted and create a file on the NFS persistent volume: - -```bash -$ FIRST_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -1) -kubectl exec -it $FIRST_POD -n default -- bash -``` - -```bash -root@nfs-nginx-9z7wk:/# mount -l | grep nfs -10.201.xx.xx:/share_xxx/pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 on /usr/share/nginx/html type nfs (rw,relatime,vers=3,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.201.xx.xx,mountvers=3,mountport=635,mountproto=tcp,local_lock=none,addr=10.201.xx.xx) -``` - -Now, we will check if the EFS volume is properly shared between the deployed pods. - -Create a new `index.html` file: - -```bash -echo "NFS volume!" > /usr/share/nginx/html/index.html -``` - -And exit the Nginx container: - -```bash -exit -``` - -Let’s try to access our new web page: - -```bash -kubectl proxy -``` - -Generate the URL to open in your broswer: - -```bash -URL=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$FIRST_POD:/proxy/") -echo $URL -``` - -You can open the URL which is displayed to access the Nginx Service. - -Now let’s try to see if the data is shared with the second pod (if you have more than one node deployed). - -```bash -$ SECOND_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -2 | tail -1) -URL2=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$SECOND_POD:/proxy/") -echo $URL2 -``` - -You can open the URL which is displayed to access the Nginx Service on the other pod. - -As you can see the data is correctly shared between the two Nginx pods running on two different Kubernetes nodes. - -Congratulations, you have successfully set up a multi-attach persistent volume with OVHcloud Enterprise File Storage! - -## Go further - -To learn more about using your Kubernetes cluster the practical way, we invite you to look at our [OVHcloud Managed Kubernetes doc site](/products/public-cloud-containers-orchestration-managed-kubernetes-k8s). - -If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](/links/professional-services) to get a quote and ask our Professional Services experts for a custom analysis of your project. - -Join our [community of users](/links/community). \ No newline at end of file diff --git a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.pt-pt.md b/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.pt-pt.md deleted file mode 100644 index 6ca429e07ee..00000000000 --- a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/guide.pt-pt.md +++ /dev/null @@ -1,411 +0,0 @@ ---- -title: Configuring multi-attach persistent volumes with Enterprise File Storage -excerpt: 'Find out how to configure a multi-attach persistent volume using our Enterprise File Storage solution' -updated: 2025-01-06 ---- - - - -## Objective - -OVHcloud Managed Kubernetes currently offers Block Storage for persistent volumes by default, but that may not be suited for applications that require a shared file system between multiple nodes. This tutorial shows how to configure a shared [Kubernetes Persistent Volume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#access-modes) (AccessMode `ReadWriteMany` or `RWX`) using [OVHcloud Enterprise File Storage](/links/storage/enterprise-file-storage) as a storage backend. - -## Requirements - -This tutorial assumes that you already have a working [OVHcloud Managed Kubernetes](/links/public-cloud/kubernetes) cluster, and some basic knowledge of how to operate it. If you want to know more on those topics, please look at the [deploying a Hello World application](/pages/public_cloud/containers_orchestration/managed_kubernetes/deploying-hello-world) documentation. - -It also assumes you have an OVHcloud Enterprise File Storage already available. If you don't, you can [order one in the OVHcloud Control Panel](/links/manager). - -You also need to have [Helm](https://docs.helm.sh/) installed on your workstation. Please refer to the [How to install Helm on OVHcloud Managed Kubernetes Service](/pages/public_cloud/containers_orchestration/managed_kubernetes/installing-helm) tutorial. - - -## Instructions - -### Step 1 - Creating a volume and granting your Managed Kubernetes Service access to it - -Your Enterprise File Storage service can expose multiple volumes, and supports a variety of protocols. Each volume is accessible only from a specific range of IPs. We will create a new EFS volume and make it accessible from your Kubernetes worker nodes. - -You can find more information about our Enterprise File Storage product by clicking [here](/pages/storage_and_backup/file_storage/enterprise_file_storage/netapp_control_panel). - -Access the UI for OVHcloud Enterprise File Storage by clicking the `Storage and backups`{.action} then `Enterprise File Storage`{.action} menu in the [Bare Metal Cloud section of the OVHcloud Control Panel](/links/manager). - -Click your Enterprise File Storage service, then click the `Volumes`{.action} tab. Click the `Create a volume`{.action} button and create the new Enterprise File Storage volume with the following content: - -![Create an EFS volume](images/create-efs-volume.png){.thumbnail} - -Provide the following parameters to create a volume: - -| Name | Description | Required | -| ------------------- | -------------------------- | ------------- | -| Volume name | Name of the volume | False | -| Volume description | Description of the volume | False | -| Protocol | Protocol used to connect | True | -| Volume size | Size of the volume | True | - -The volume size needs to be adapted to your needs. For this guide, we define a volume size of 100 GiB. - -Once your volume is created, click on its ID and select `Access Control List`{.action}. -Enter your Nodes' public IPs and/or your Public Cloud Gateway public IP into the volume's ACLs. This will ensure your Kubernetes worker nodes can reach the storage service. - -#### Your cluster is installed with Public Network or a private network without using an OVHcloud Internet Gateway or a custom one as your default route - -Once the volume is created, we need to allow our Kubernetes nodes to access it. - -Get our Kubernetes nodes IP: - -```bash -kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -``` - -```console -$ kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }' -51.128.xx.xx 37.59.xx.xx -``` - -#### Your cluster is installed with Private Network and a default route via your Private Network (OVHcloud Internet Gateway/OpenStack Router or a custom one) - -Because your nodes are configured to be routed by the private network gateway, you need to add the gateway IP address to the ACLs. - -By using Public Cloud Gateway through our Managed Kubernetes Service, public IPs on nodes are only for management purposes: [MKS Known Limits](/pages/public_cloud/containers_orchestration/managed_kubernetes/known-limits) - -You can get your OVHcloud Internet Gateway's public IP by navigating through the OVHcloud Control Panel: - -`Public Cloud`{.action} > Select your tenant > `Network / Gateway`{.action} > `Public IP`{.action} - -You can also get your OVHcloud Internet Gateway's public IP via the following API: - -> [!api] -> -> @api {v1} /cloud GET /cloud/project/{serviceName}/region/{regionName}/gateway/{id} -> - -> [!success] -> If you are not familiar with the OVHcloud API, read our [First Steps with the OVHcloud API](/pages/manage_and_operate/api/first-steps) guide. - -If you want to use your Kubernetes cluster to know your Gateway's public IP, you can run this command: - -```bash -kubectl run get-gateway-ip --image=ubuntu:latest -i --tty --rm -``` - -This command will create a temporary pod and open a console. - -You may have to wait a bit to let the pod be created. Once the shell appears, you can run this command: - -```bash -apt update && apt upgrade -y && apt install -y curl && curl ifconfig.ovh -``` - -The public IP of the Gateway you're using should appear. - -Click on the `Manage IP Access (ACL)`{.action} menu of our newly created volume: - -![Manage Access of the EFS Volume](images/manage-efs-volume-access.png){.thumbnail} - -Add either the nodes' IPs one by one or the Gateway's public IP depending on your configuration: - -![Allow nodes IP to access the EFS Volume](images/manage-efs-volume-access-ip.png){.thumbnail} - -You should now have something similar to this: - -![EFS Configuration](images/manage-efs-volume-acl-list.png){.thumbnail} - -### Step 2 - Configuring Kubernetes to use our newly created EFS volume - -Your Kubernetes cluster needs some additional piece of software to make use of the Enterprise File Storage volume. We will install those and then create a first volume, shared across multiple pods. - -To do so, you can install the [csi-driver-nfs](https://github.com/kubernetes-csi/csi-driver-nfs): - -```bash -helm repo add csi-driver-nfs https://raw.githubusercontent.com/kubernetes-csi/csi-driver-nfs/master/charts -helm install csi-driver-nfs csi-driver-nfs/csi-driver-nfs --namespace kube-system --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set controller.name="csi-nfs2-controller" --set rbac.name=nfs2 -``` - -```console -$ helm install csi-driver-nfs -n kube-system csi-driver-nfs/csi-driver-nfs --version v4.7.0 --set driver.name="nfs2.csi.k8s.io" --set rbac.name=nfs --set controller.name="csi-nfs2-controller" -NAME: csi-driver-nfs -LAST DEPLOYED: Mon Dec 16 16:13:31 2024 -NAMESPACE: kube-system -STATUS: deployed -REVISION: 1 -TEST SUITE: None -NOTES: -The CSI NFS Driver is getting deployed to your cluster. - -To check CSI NFS Driver pods status, please run: - - kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -``` - -Let's verify our installation: - -```bash -kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" -``` - -```console -$ kubectl --namespace=kube-system get pods --selector="app.kubernetes.io/instance=csi-driver-nfs" --watch -NAME READY STATUS RESTARTS AGE -csi-nfs-node-7kdwj 0/3 ContainerCreating 0 5s -csi-nfs-node-7smkb 0/3 ContainerCreating 0 5s -csi-nfs2-controller-68d7768f64-pzs74 0/4 ContainerCreating 0 5s -csi-nfs-node-7kdwj 3/3 Running 0 11s -csi-nfs-node-7smkb 3/3 Running 0 20s -csi-nfs2-controller-68d7768f64-pzs74 4/4 Running 0 21s -``` - -### Step 3 - Create the NFS StorageClass Object - -Let's create a `efs-storageclass.yaml` file: - - -> [!primary] -> -> Don't forget to replace `[EFS_IP]`, `[EFS_PATH]` and `[PARTITION_NAME]` with the correct information. -> - -```yaml -apiVersion: storage.k8s.io/v1 -kind: StorageClass -metadata: - name: nfs-csi -provisioner: nfs2.csi.k8s.io -parameters: - server: '[EFS_IP]' - share: '[EFS_PATH]' -reclaimPolicy: Delete -volumeBindingMode: Immediate -mountOptions: - - nfsvers=3 - - tcp -``` - -> [!primary] -> -> The `EFS_IP` is the private IP of your Enterprise File Storage and the `EFS_PATH` is the path to access your volume. -> -> The `tcp` parameter instructs the NFS mount to use the TCP protocol. -> - -Then apply the YAML file to create the StorageClass: - -```bash -kubectl apply -f efs-storageclass.yaml -``` - -### Step 4 - Create and use an NFS persistent volume - -Let’s create a `efs-persistent-volume-claim.yaml` file: - -```yaml -kind: PersistentVolumeClaim -apiVersion: v1 -metadata: - name: efs-pvc - namespace: default -spec: - accessModes: - - ReadWriteMany - storageClassName: nfs-csi - resources: - requests: - storage: 1Gi -``` - -And apply this to create the persistent volume claim: - -```bash -kubectl apply -f efs-persistent-volume-claim.yaml -``` - -You can find more information about the PVC by running this command: - -```bash -kubectl describe pvc efs-pvc -``` - -```console -$ kubectl describe pvc efs-pvc -Name: efs-pvc -Namespace: default -StorageClass: nfs-csi -Status: Bound -Volume: pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -Labels: -Annotations: pv.kubernetes.io/bind-completed: yes - pv.kubernetes.io/bound-by-controller: yes - volume.beta.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io - volume.kubernetes.io/storage-provisioner: nfs2.csi.k8s.io -Finalizers: [kubernetes.io/pvc-protection] -Capacity: 1Gi -Access Modes: RWX -VolumeMode: Filesystem -Used By: -Events: - Type Reason Age From Message - ---- ------ ---- ---- ------- - Normal Provisioning 10s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 External provisioner is provisioning volume for claim "default/efs-pvc" - Normal ExternalProvisioning 10s persistentvolume-controller Waiting for a volume to be created either by the external provisioner 'nfs2.csi.k8s.io' or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered. - Normal ProvisioningSucceeded 9s nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 Successfully provisioned volume pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 -``` - -By reading the events on this PersistentVolumeClaim, our PVC has been provisioned from our Enterprise File Storage. - -If you encounter errors such as: - -```console - Warning ProvisioningFailed 2s (x3 over 6s) nfs2.csi.k8s.io_nodepool-452e0669-d9dd-4ecf-a7-node-6a9890_04dc0447-d875-4d29-883d-b91bb89ef053 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-7f86e647-4632-4188-bfbe-84d11ea03426 -Output: mount.nfs: mounting 10.201.xx.xx:/share_xxx failed, reason given by server: No such file or directory -``` - -or similar to: - -```console - Warning ProvisioningFailed 1s (x3 over 4s) nfs2.csi.k8s.io_nodepool-cc5ad1db-f645-465c-85-node-6f9649_95fd7b5e-94aa-4c90-9ffa-9765beadfbe6 failed to provision volume with StorageClass "nfs-csi": rpc error: code = Internal desc = failed to mount nfs server: rpc error: code = Internal desc = mount failed: exit status 32 -Mounting command: mount -Mounting arguments: -t nfs -o nfsvers=3,tcp 10.201.xx.xx:/share_xxx /tmp/pvc-ebab8dfa-7ce8-4102-9ef5-5a626638f3b8 -Output: mount.nfs: access denied by server while mounting 10.201.xx.xx:/share_xxx - -``` - -It may indicate an issue with the Enterprise File Storage ACLs configuration. Check the authorized IPs which can access to the wanted partition on the ACLs list. - -> [!warning] -> If the number of __PersistentVolumes__ to schedule simultaneously is too important, some slowness can be encountered and volume creation can be delayed. - - -Let’s now create a DaemonSet of Nginx pods using the persistent volume claim as their webroot folder. - -Using a DaemonSet will create a pod on each deployed node and make troubleshooting easier in case of a misconfiguration or to isolate a node issue. - -Let's create a file named `nginx-daemonset.yaml`: - -```yaml -apiVersion: apps/v1 -kind: DaemonSet -metadata: - name: nfs-nginx - namespace: default -spec: - selector: - matchLabels: - name: nginx - template: - metadata: - labels: - name: nginx - spec: - volumes: - - name: nfs-volume - persistentVolumeClaim: - claimName: nfs-pvc - containers: - - name: nginx - image: nginx - ports: - - containerPort: 80 - name: "http-server" - volumeMounts: - - mountPath: "/usr/share/nginx/html" - name: nfs-volume -``` - -And apply this to create the Nginx DaemonSet: - -```bash -kubectl apply -f nginx-daemonset.yaml -``` - -Both pods should be running: - -```bash -kubectl get pods -NAME READY STATUS RESTARTS AGE -nfs-nginx-9z7wk 1/1 Running 0 11s -nfs-nginx-sfthh 1/1 Running 0 11s -``` - -Let’s enter inside the first Nginx pod and container to check if the Enterprise File Storage Volume is properly mounted and create a file on the NFS persistent volume: - -```bash -$ FIRST_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -1) -kubectl exec -it $FIRST_POD -n default -- bash -``` - -```bash -root@nfs-nginx-9z7wk:/# mount -l | grep nfs -10.201.xx.xx:/share_xxx/pvc-8217340a-d2f0-42b3-80f6-bbeff5b61153 on /usr/share/nginx/html type nfs (rw,relatime,vers=3,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.201.xx.xx,mountvers=3,mountport=635,mountproto=tcp,local_lock=none,addr=10.201.xx.xx) -``` - -Now, we will check if the EFS volume is properly shared between the deployed pods. - -Create a new `index.html` file: - -```bash -echo "NFS volume!" > /usr/share/nginx/html/index.html -``` - -And exit the Nginx container: - -```bash -exit -``` - -Let’s try to access our new web page: - -```bash -kubectl proxy -``` - -Generate the URL to open in your broswer: - -```bash -URL=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$FIRST_POD:/proxy/") -echo $URL -``` - -You can open the URL which is displayed to access the Nginx Service. - -Now let’s try to see if the data is shared with the second pod (if you have more than one node deployed). - -```bash -$ SECOND_POD=$(kubectl get pod -l name=nginx --no-headers=true -o custom-columns=:metadata.name | head -2 | tail -1) -URL2=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$SECOND_POD:/proxy/") -echo $URL2 -``` - -You can open the URL which is displayed to access the Nginx Service on the other pod. - -As you can see the data is correctly shared between the two Nginx pods running on two different Kubernetes nodes. - -Congratulations, you have successfully set up a multi-attach persistent volume with OVHcloud Enterprise File Storage! - -## Go further - -To learn more about using your Kubernetes cluster the practical way, we invite you to look at our [OVHcloud Managed Kubernetes doc site](/products/public-cloud-containers-orchestration-managed-kubernetes-k8s). - -If you need training or technical assistance to implement our solutions, contact your sales representative or click on [this link](/links/professional-services) to get a quote and ask our Professional Services experts for a custom analysis of your project. - -Join our [community of users](/links/community). \ No newline at end of file diff --git a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/images/create-efs-volume.png b/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/images/create-efs-volume.png deleted file mode 100644 index adfd038cdff1e8ac3e92832d4af3b6eaaaaa97ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24547 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 c+GdnJ?>F_YRgSl*UexAedkAi0|8IYH2?qr diff --git a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/images/manage-efs-volume-access-ip.png b/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/images/manage-efs-volume-access-ip.png deleted file mode 100644 index 009cff0f1e0a0a799f0a8664c600ba1bede7b2d7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 146288 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 diff --git a/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/images/manage-efs-volume-access.png b/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-efs/images/manage-efs-volume-access.png deleted file mode 100644 index 76408b4117b9c5b5650e04d9e44aae43125820fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 131429 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

#UvMl5LXk?tLxv9%nzw>3A$z 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%0DtIATIEC*`v=8x?EEX);E|3LiB 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 nC* Date: Wed, 15 Apr 2026 13:35:48 +0200 Subject: [PATCH 2/2] Fix --- .../understanding-mks-architecture/guide.en-gb.md | 2 +- .../understanding-mks-architecture/guide.fr-fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pages/public_cloud/containers_orchestration/managed_kubernetes/understanding-mks-architecture/guide.en-gb.md b/pages/public_cloud/containers_orchestration/managed_kubernetes/understanding-mks-architecture/guide.en-gb.md index 9157adb67a6..c81aeb4d62f 100644 --- a/pages/public_cloud/containers_orchestration/managed_kubernetes/understanding-mks-architecture/guide.en-gb.md +++ b/pages/public_cloud/containers_orchestration/managed_kubernetes/understanding-mks-architecture/guide.en-gb.md @@ -680,7 +680,7 @@ MKS uses the OpenStack Cinder CSI driver for persistent storage: | Solution | Protocol | Documentation | |----------|----------|---------------| | **File Storage** (Public Cloud) | NFS | [File Storage documentation](/products/public-cloud-storage-file-storage) | -| **Enterprise File Storage** | NFS | [EFS with MKS](/pages/public_cloud/containers_orchestration/managed_kubernetes/netapp_trident_csi) | +| **Enterprise File Storage** | NFS | [EFS with MKS](/pages/storage_and_backup/file_storage/enterprise_file_storage/netapp_trident_csi) | | **NAS-HA** | NFS | [NAS-HA with MKS](/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-nas-ha) | | **Cloud Disk Array** | CephFS | [CDA with MKS](/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-cloud-disk-array) | diff --git a/pages/public_cloud/containers_orchestration/managed_kubernetes/understanding-mks-architecture/guide.fr-fr.md b/pages/public_cloud/containers_orchestration/managed_kubernetes/understanding-mks-architecture/guide.fr-fr.md index ec39edc7e91..4fce95da465 100644 --- a/pages/public_cloud/containers_orchestration/managed_kubernetes/understanding-mks-architecture/guide.fr-fr.md +++ b/pages/public_cloud/containers_orchestration/managed_kubernetes/understanding-mks-architecture/guide.fr-fr.md @@ -681,7 +681,7 @@ MKS utilise le driver OpenStack Cinder CSI pour le stockage persistant : | Solution | Protocole | Documentation | |----------|----------|---------------| | **File Storage** (Public Cloud) | NFS | [Documentation File Storage](/products/public-cloud-storage-file-storage) | -| **Enterprise File Storage** | NFS | [EFS avec MKS](/pages/public_cloud/containers_orchestration/managed_kubernetes/netapp_trident_csi) | +| **Enterprise File Storage** | NFS | [EFS avec MKS](/pages/storage_and_backup/file_storage/enterprise_file_storage/netapp_trident_csi) | | **NAS-HA** | NFS | [NAS-HA avec MKS](/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-nas-ha) | | **Cloud Disk Array** | CephFS | [CDA avec MKS](/pages/public_cloud/containers_orchestration/managed_kubernetes/configuring-multi-attach-persistent-volumes-with-ovh-cloud-disk-array) |