For AI agents: the complete documentation index is available at https://docs.ovhcloud.com/fr/llms.txt, the full documentation bundle is available at https://docs.ovhcloud.com/fr/llms-full.txt, and this page is available as Markdown at https://docs.ovhcloud.com/fr/guides/public-cloud/containers-orchestration/managed-kubernetes/configure-multi-attach-persistent-volumes-cloud-disk-array.md.

Configurer des volumes persistants en accès multiple avec OVHcloud Cloud Disk Array

Voir en Markdown

Découvrez comment configurer un volume persistant en accès multiple à l'aide d'OVHcloud Cloud Disk Array

Objectif

OVHcloud Managed Kubernetes intègre nativement le Block Storage en tant que volumes persistants. Cette technologie peut cependant ne pas convenir à certaines applications historiques ou non conçues pour le cloud natif, qui nécessitent souvent de partager ces données persistantes entre différents pods sur plusieurs worker nodes (ReadWriteMany ou RWX). Si vous devez procéder ainsi pour certains de vos workloads, une solution consiste à utiliser des volumes CephFS.
OVHcloud Cloud Disk Array est une solution managée qui vous permet de configurer facilement un cluster Ceph et plusieurs volumes CephFS. Dans ce tutoriel, nous allons voir comment configurer votre cluster OVHcloud Managed Kubernetes pour utiliser OVHcloud Cloud Disk Array comme fournisseur CephFS pour les volumes persistants Kubernetes.

Prérequis

Ce tutoriel suppose que vous disposez déjà d'un cluster OVHcloud Managed Kubernetes fonctionnel, ainsi que de connaissances de base sur son utilisation. Pour en savoir plus sur ces sujets, consultez la documentation Déployer une application Hello World.

Il suppose également que vous disposez déjà d'un OVHcloud Cloud Disk Array. Si ce n'est pas le cas, vous pouvez .

Vous devez également avoir installé Helm sur votre poste de travail ; reportez-vous au tutoriel Comment installer Helm sur OVHcloud Managed Kubernetes Service.


Accès à l'espace client OVHcloud

  • Lien direct :
  • Pour accéder à vos services : Public Cloud > Sélectionnez votre projet > Gateway

En pratique

Pour configurer OVHcloud Cloud Disk Array, vous devez utiliser l'. Si vous ne l'avez jamais utilisée, vous trouverez les bases ici : Premiers pas avec l'API OVHcloud.

Étape 1 - Créer une partition et donner à votre Managed Kubernetes Service l'accès à celle-ci

  • Listez votre cluster Cloud Disk Array disponible :
GET/dedicated/ceph

La réponse renvoie la liste des noms de service de vos Cloud Disk Array. Notez la valeur serviceName que vous souhaitez utiliser pour les étapes suivantes.

  • Créez un système de fichiers sur votre Cloud Disk Array :

Renseignez serviceName avec le nom de service de votre Cloud Disk Array, et choisissez un nom pour fsName (par exemple fs-default). Un appel réussi renvoie une réponse vide avec un code HTTP 200.

  • Créez un utilisateur pour le CephFS CSI qui sera utilisé par votre cluster Kubernetes :

Définissez userName avec une valeur telle que ceph-csi. Notez le nom d'utilisateur pour les étapes suivantes.

  • Ajoutez les permissions sur fs-default pour l'utilisateur Ceph CSI :

Utilisez le userName que vous avez créé à l'étape précédente et définissez le nom du pool pour qu'il corresponde à votre système de fichiers (par exemple fs-default). Accordez les permissions read et write.

Étape 2 - Autoriser les IP des nœuds Kubernetes et/ou l'IP de la Public Cloud Gateway sur le service Cloud Disk Array

Votre cluster est installé avec un réseau public ou un réseau privé sans utiliser une OVHcloud Internet Gateway ou une passerelle personnalisée comme route par défaut

Une fois la partition créée, nous devons autoriser nos nœuds Kubernetes à accéder à notre partition nouvellement créée.

Récupérez l'IP de nos nœuds Kubernetes :

kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }'
$ kubectl get nodes -o jsonpath='{ $.items[*].status.addresses[?(@.type=="InternalIP")].address }'
51.77.204.175 51.77.205.79

Votre cluster est installé avec un réseau privé et une route par défaut via votre réseau privé (OVHcloud Internet Gateway/routeur OpenStack ou une passerelle personnalisée)

Comme vos nœuds sont configurés pour être routés par la passerelle du réseau privé, vous devez ajouter l'adresse IP de la passerelle aux ACL.

En utilisant la Public Cloud Gateway via notre Managed Kubernetes Service, les IP publiques sur les nœuds ne servent qu'à des fins de gestion : Limites connues de MKS

Vous pouvez récupérer l'IP publique de votre OVHcloud Internet Gateway en naviguant dans l' :

Public Cloud > Sélectionnez votre tenant > Network / Gateway > Public IP

Vous pouvez également utiliser le point de terminaison d'API suivant pour récupérer l'IP publique de votre OVHcloud Internet Gateway :

Si vous souhaitez utiliser votre cluster Kubernetes pour récupérer l'IP publique de votre Gateway, exécutez cette commande :

kubectl run get-gateway-ip --image=ubuntu:latest -i --tty --rm 

Cela va créer un pod temporaire et ouvrir une console.

Vous devrez peut-être attendre un peu que le pod soit créé. Une fois le shell affiché, vous pouvez exécuter cette commande :

apt update && apt upgrade -y && apt install -y curl && curl ifconfig.ovh

Cette commande affichera l'IP publique de la Gateway de votre cluster Kubernetes.

  • Ajoutez la liste des IP des nœuds ou l'IP de la Gateway pour autoriser l'accès au cluster Cloud Disk Array :

Répétez cet appel pour chaque IP de nœud (ou votre IP de Gateway) récupérée ci-dessus. Chaque appel ajoute une adresse IP à la liste d'autorisation.

  • Récupérez la clé de l'utilisateur CephFS CSI :

La réponse contient un champ key. Copiez cette valeur : vous l'utiliserez en tant que <your_ceph_csi_user_key> dans les étapes de configuration ci-dessous.

  • Récupérez l'IP des moniteurs Ceph :

La réponse contient un tableau monitors listant les adresses IP de vos nœuds moniteurs Ceph. Notez ces valeurs : vous les utiliserez en tant que <your_ceph_monitor_ip_1>, <your_ceph_monitor_ip_2> et <your_ceph_monitor_ip_3> dans les étapes de configuration ci-dessous.

  • Créez un pod Ubuntu sur votre cluster Kubernetes
kubectl run -it ubuntu --image=ubuntu
  • Installez le client Ceph et vim dans le pod Ubuntu :
apt-get update
apt-get install ceph-common vim
  • Configurez le client Ceph avec l'IP des moniteurs et la clé :
vim ceph.conf

[global]
mon_host = <your_ceph_monitor_ip_1>,<your_ceph_monitor_ip_2>,<your_ceph_monitor_ip_3>
keyring = /root/ceph.client.ceph-csi.keyring
vim /root/ceph.client.ceph-csi.keyring

[client.ceph-csi]
key = <your_ceph_csi_user_key>
  • Testez la configuration du client Ceph :
ceph --conf ceph.conf --id ceph-csi fs ls
ceph --conf ceph.conf --id ceph-csi fs ls
name: fs-default, metadata pool: cephfs.fs-default.meta, data pools: [cephfs.fs-default.data ]
  • Ajoutez un subvolumegroup à fs-default :
ceph --conf ceph.conf --id ceph-csi fs subvolumegroup create fs-default csi
  • Quittez le pod Ubuntu :
exit
  • Détruisez le pod Ubuntu :
kubectl delete pod ubuntu

Étape 2 - Configurer Kubernetes pour utiliser notre partition CephFS nouvellement créée

  • Installez le repository helmchart Ceph CSI :
helm repo add ceph-csi https://ceph.github.io/csi-charts
  • Créez un fichier de configuration pour le helmchart Ceph CSI :
vim values.yaml

csiConfig:
  - clusterID: "abcd123456789" # You can change this, but it needs to have at least one letter character
    monitors:
      - "<your_ceph_monitor_ip_1>:6789"
      - "<your_ceph_monitor_ip_2>:6789"
      - "<your_ceph_monitor_ip_3>:6789"
storageClass:
  create: true
  name: "cephfs"
  clusterID: "abcd123456789" # This should be the ID you chose above
  fsName: "fs-default"
secret:
  create: true
  adminID: "ceph-csi"
  adminKey: "<your_ceph_csi_user_key>"
  • Installez le Ceph CSI sur le cluster Managed Kubernetes :
helm install --namespace "ceph-csi-cephfs" "ceph-csi-cephfs" ceph-csi/ceph-csi-cephfs --create-namespace -f ./values.yaml

Étape 3 - Créer et utiliser un volume persistant CephFS

Créons un fichier cephfs-persistent-volume-claim.yaml :

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: cephfs-pvc
  namespace: default
spec:
  accessModes:
  - ReadWriteMany
  storageClassName: cephfs
  resources:
    requests:
      storage: 1Gi

Et appliquez-le pour créer la demande de volume persistant :

kubectl apply -f cephfs-persistent-volume-claim.yaml

Créons à présent un DaemonSet, qui va créer des pods sur tous les nœuds disponibles afin d'utiliser notre volume CephFS simultanément sur plusieurs nœuds. Créons un fichier cephfs-nginx-daemonset.yaml :

apiVersion: apps/v1
kind: DaemonSet
metadata:
    name: cephfs-nginx
    namespace: default
spec:
    selector:
      matchLabels:
        name: nginx
    template:
        metadata:
          labels:
            name: nginx
        spec:
          volumes:
          - name: cephfs-volume
            persistentVolumeClaim:
              claimName: cephfs-pvc
          containers:
          - name: nginx
            image: nginx
            ports:
            - containerPort: 80
              name: "http-server"
            volumeMounts:
            - mountPath: "/usr/share/nginx/html"
              name: cephfs-volume

Et appliquez-le pour créer les pods Nginx :

kubectl apply -f cephfs-nginx-pods.yaml

Entrons à présent dans le premier conteneur Nginx pour créer un fichier sur le volume persistant NFS :

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

Créez un nouveau fichier index.html :

echo "CEPHFS volume!" > /usr/share/nginx/html/index.html

Et quittez le conteneur Nginx :

exit

Générez l'URL à ouvrir dans votre navigateur :

$ URL=$(echo "http://localhost:8001/api/v1/namespaces/default/pods/http:$FIRST_POD:/proxy/")
echo $URL

Vous pouvez ouvrir l'URL affichée pour accéder au Service Nginx.

Utilisez la commande suivante pour vérifier que le système de fichiers est bien partagé avec le second pod (à condition d'avoir déployé plus d'un nœud).

$ 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

Essayons à présent d'accéder à notre nouvelle page web :

kubectl proxy

Ouvrez les deux URL générées par les commandes ci-dessus pour vérifier que les données sont bien partagées entre tous les pods connectés au volume Ceph.

Comme vous pouvez le constater, les données sont correctement partagées entre les deux pods Nginx exécutés sur deux nœuds Kubernetes différents. Félicitations, vous avez configuré avec succès un volume persistant en accès multiple avec OVHcloud Cloud Disk Array !

Aller plus loin

Pour en savoir plus sur l'utilisation pratique de votre cluster Kubernetes, consultez notre documentation OVHcloud Managed Kubernetes.

  • Pour une formation ou une assistance technique sur la mise en œuvre de nos solutions, contactez votre commercial ou consultez la page Professional Services pour obtenir un devis et faire analyser votre projet par nos experts.

  • Échangez avec notre communauté d'utilisateurs.

Cette page vous a-t-elle aidé ?