Provisionnement de PVC sur le stockage de fichiers avec le service Lustre

Découvrez comment provisionner des revendications de volume persistant pour les grappes que vous avez créées à l'aide de Kubernetes Engine (OKE) en montant des systèmes de fichiers à partir du service File Storage avec Lustre.

Le service de stockage de fichiers avec Lustre d'Oracle Cloud Infrastructure est un service de stockage entièrement géré conçu pour répondre aux exigences de formation et d'inférence en IA/apprentissage automatique, ainsi qu'aux besoins de calcul de haute performance. Vous utilisez le plugiciel CSI Lustre pour connecter des grappes aux systèmes de fichiers du service de stockage de fichiers avec Lustre.

Vous pouvez utiliser le service de stockage de fichiers avec Lustre pour provisionner des revendications de volume persistant en créant manuellement un système de fichiers dans le service de stockage de fichiers avec Lustre, en définissant et en créant un volume persistant soutenu par le nouveau système de fichiers, puis en définissant une nouvelle revendication de volume persistant. Lorsque vous créez la revendication de volume persistant, le moteur Kubernetes la lie à la revendication de volume persistant soutenue par le service de stockage de fichiers avec Lustre.

Le pilote CSI Lustre est le logiciel global qui permet d'utiliser les systèmes de fichiers Lustre avec Kubernetes au moyen de l'interface de stockage de conteneurs (CSI). Le plugin Lustre CSI est un composant spécifique au sein du pilote, responsable de l'interaction avec le serveur d'API Kubernetes et de la gestion du cycle de vie des volumes Lustre.

Notez ce qui suit :

  • Le pilote CSI Lustre est pris en charge sur les grappes créées par Kubernetes Engine qui exécutent Kubernetes version 1.29 ou ultérieure.
  • Le pilote CSI Lustre est pris en charge sur Oracle Linux 8 x86 et sur Ubuntu x86 22.04.
  • Pour utiliser un système de fichiers Lustre avec une grappe créée par Kubernetes Engine, l'ensemble client Lustre doit être installé sur les noeuds de travail qui doivent monter le système de fichiers. Pour plus d'informations sur les clients Lustre, voir Montage et accès à un système de fichiers Lustre File System.

Provisionnement d'une revendication de volume persistant sur un système de fichiers existant

Pour créer une revendication de volume persistant sur un système de fichiers existant dans le service de stockage de fichiers avec Lustre (à l'aide de clés de chiffrement gérées par Oracle pour chiffrer les données au repos) :

  1. Créez un système de fichiers dans le service File Storage avec Lustre, en sélectionnant l'option de chiffrement Chiffrer à l'aide des clés gérées par Oracle. Voir Création d'un système de fichiers Lustre File System.
  2. Créez des règles de sécurité dans un groupe de sécurité de réseau (recommandé) ou une liste de sécurité pour le système de fichiers Lustre et pour le sous-réseau de noeuds de travail de la grappe.
    Les règles de sécurité à créer dépendent des emplacements réseau relatifs du système de fichiers Lustre et des noeuds de travail qui agissent en tant que client, selon les scénarios suivants :

    Ces scénarios, les règles de sécurité à créer et l'endroit où les créer sont décrits en détail dans la documentation du service File Storage with Lustre (voir Règles de sécurité de réseau VCN requises).

  3. Créez une valeur actualisée soutenue par le système de fichiers dans le service de stockage de fichiers avec Lustre comme suit :
    1. Créez un fichier manifeste pour définir une valeur actualisée et, dans la section csi:, définissez les éléments suivants :

      • driver à lustre.csi.oraclecloud.com
      • volumeHandle à <MGSAddress>@<LNetName>:/<MountName>

        où :

        • <MGSAddress> est l'adresse du service de gestion pour le système de fichiers du service de stockage de fichiers avec Lustre
        • <LNetName> est le nom de réseau LNet pour le système de fichiers dans le service de stockage de fichiers avec Lustre.
        • <MountName> est le nom de montage utilisé lors de la création du système de fichiers dans le service de stockage de fichiers avec Lustre.

        Par exemple : 10.0.2.6@tcp:/testlustrefs

      • fsType à lustre
      • (facultatif, mais recommandé) volumeAttributes.setupLnet à "true" si vous voulez que le pilote CSI Lustre effectue la configuration lnet (Lustre Network) avant de monter le système de fichiers.
      • (Facultatif) volumeAttributes.lustreSubnetCidr pour le bloc CIDR du sous-réseau où se trouve la carte VNIC secondaire du noeud de travail, afin de s'assurer que le noeud de travail a une connectivité réseau au système de fichiers Lustre. Par exemple : 10.0.2.0/24.

        Note

        Ne spécifiez pas volumeAttributes.lustreSubnetCidr si vous utilisez l'interface par défaut du noeud de travail (la carte VNIC principale) pour vous connecter au système de fichiers Lustre.
      • (Facultatif) volumeAttributes.lustrePostMountParameters pour définir les paramètres Lustre. Par exemple :
        ...
            volumeAttributes:
              lustrePostMountParameters: '[{"*.*.*MDT*.lru_size": 11200},{"at_history" :
            600}]'

      Par exemple, le fichier manifeste suivant (nommé lustre-PV-example.yaml) définit un PV appelé lustre-pv-example soutenu par un système de fichiers Lustre :

      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: lustre-pv-example
      spec:
        capacity:
          storage: 31Ti
        volumeMode: Filesystem
        accessModes:
          - ReadWriteMany
        persistentVolumeReclaimPolicy: Retain
        csi:
          driver: lustre.csi.oraclecloud.com
          volumeHandle: "10.0.2.6@tcp:/testlustrefs"
          fsType: lustre
          volumeAttributes:
            setupLnet: "true"
    2. Créez le PV à partir du fichier manifeste en entrant :
      kubectl apply -f <filename>

      Par exemple :

      kubectl apply -f lustre-pv-example.yaml
    3. Vérifiez que le PV a été créé avec succès en entrant :

      kubectl get pv <pv-name>

      Par exemple :

      kubectl get pv lustre-pv-example

      Exemple de sortie :

      NAME                   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                           STORAGECLASS   REASON   AGE
      lustre-pv-example      m31Ti      RWX            Retain           Bound                                                            56m
      
  4. Créez une revendication de volume persistant provisionnée par la revendication de volume persistant que vous avez créée, comme suit :
    1. Créez un fichier manifeste pour définir la revendication de volume persistant et définissez les éléments suivants :
      • storageClassName à "" Notez que vous devez spécifier une valeur vide pour storageClassName, même si la classe de stockage n'est pas applicable dans le cas du provisionnement statique du stockage persistant. Si vous ne spécifiez pas de valeur vide pour storageClassName, la classe de stockage par défaut (oci-bv) est utilisée, ce qui entraîne une erreur.
      • volumeName au nom de la valeur actualisée que vous avez créée (par exemple, lustre-pv-example)

      Par exemple, le fichier manifeste suivant (nommé lustre-PVC-example.yaml) définit une revendication de volume persistant nommée lustre-pvc-example qui sera liée à une revendication de volume persistant nommée lustre-pv-example :

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: lustre-pvc-example
      spec:
        accessModes:
          - ReadWriteMany
        storageClassName: ""
        volumeName: lustre-pv-example
        resources:
          requests:
            storage:  31Ti

      Notez que l'élément requests: storage: doit être présent dans le fichier manifeste de la revendication de volume persistant et que sa valeur doit correspondre à la valeur spécifiée pour l'élément capacity: storage: dans le fichier manifeste de la revendication de volume persistant. En dehors de cela, la valeur de l'élément requests: storage: est ignorée.

    2. Créez la revendication de volume persistant à partir du fichier manifeste en entrant :
      kubectl apply -f <filename>
      Par exemple :
      kubectl apply -f lustre-pvc-example.yaml
    3. Vérifiez que la PVC a bien été créée et liée au PV en entrant :

      kubectl get pvc <pvc-name>

      Par exemple :

      kubectl get pvc lustre-pvc-example

      Exemple de sortie :

      NAME                    STATUS   VOLUME                 CAPACITY   ACCESS MODES   STORAGECLASS   AGE
      lustre-pvc-example      Bound    lustre-pv-example       31Ti      RWX                           57m

    La revendication de volume persistant est liée à la valeur actualisée soutenue par le stockage de fichiers avec le système de fichiers du service Lustre. Les données sont chiffrées au repos à l'aide de clés de chiffrement gérées par Oracle.

  5. Utilisez la nouvelle revendication de volume persistant lors de la création d'autres objets, tels que des déploiements. Par exemple :
    1. Créez un manifeste nommé lustre-app-example-deployment.yaml pour définir un déploiement nommé lustre-app-example-deployment qui utilise la revendication de volume persistant lustre-pvc-example, comme suit :
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: lustre-app-example-deployment
      spec:
        selector:
          matchLabels:
            app: lustre-app-example
        replicas: 2
        template:
          metadata:
            labels:
              app: lustre-app-example
          spec:
            containers:
            - args:
              - -c
              - while true; do echo $(date -u) >> /lustre/data/out.txt; sleep 60; done
              command:
              - /bin/sh
              image: busybox:latest
              imagePullPolicy: Always
              name: lustre-app-example
              volumeMounts:
              - mountPath: /lustre/data
                name: lustre-volume
            restartPolicy: Always
            volumes:
            - name: lustre-volume
              persistentVolumeClaim:
                claimName: lustre-pvc-example
    2. Créez le déploiement à partir du fichier manifeste en entrant :
      kubectl apply -f lustre-app-example-deployment.yaml
    3. Vérifiez que les pods de déploiement ont été créés et s'exécutent en entrant :
      kubectl get pods

      Exemple de sortie :

      NAME                                             READY   STATUS              RESTARTS   AGE
      lustre-app-example-deployment-7767fdff86-nd75n   1/1     Running             0          8h
      lustre-app-example-deployment-7767fdff86-wmxlh   1/1     Running             0          8h

Provisionnement d'une revendication de volume persistant sur un système de fichiers existant avec des options de montage

Vous pouvez optimiser les performances et contrôler l'accès à un système de fichiers Lustre existant en spécifiant les options de montage pour le PV. La spécification des options de montage vous permet d'affiner l'interaction des pods avec le système de fichiers.

Pour inclure des options de montage :

  1. Commencez par suivre les instructions sous Provisionnement d'une revendication de volume persistant sur un système de fichiers existant.
  2. Dans le manifeste PV décrit sous Provisionnement d'une revendication de volume persistant sur un système de fichiers existant, ajoutez le champ spec.mountOptions, qui vous permet de spécifier comment la revendication de volume persistant doit être montée par des pods.

    Par exemple, dans le fichier manifeste lustre-pv-example.yaml affiché sous Provisionnement d'une revendication de volume persistant sur un système de fichiers existant, vous pouvez inclure le champ mountOptions comme suit :

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: lustre-pv-example
    spec:
      capacity:
        storage: 31Ti
      volumeMode: Filesystem
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      mountOptions:
        - ro 
      csi:
        driver: lustre.csi.oraclecloud.com
        volumeHandle: "10.0.2.6@tcp:/testlustrefs"
        fsType: lustre
        volumeAttributes:
          setupLnet: "true"

    Dans cet exemple, le champ mountOptions est réglé à ro, ce qui indique que les pods doivent avoir un accès en lecture seule au système de fichiers. Pour plus d'informations sur les options de montage PV, voir Volumes persistants dans la documentation sur Kubernetes.

Chiffrement des données au repos dans un système de fichiers existant

Le service File Storage avec Lustre chiffre toujours les données au repos à l'aide de clés de chiffrement gérées par Oracle par défaut. Toutefois, vous avez la possibilité de spécifier le chiffrement au repos à l'aide de vos propres clés de chiffrement principales que vous gérez vous-même dans le service de chambre forte.

Pour plus d'informations sur la création du service de stockage de fichiers avec des systèmes de fichiers Lustre qui utilisent des clés de chiffrement gérées par Oracle ou vos propres clés de chiffrement principales que vous gérez vous-même, voir Mise à jour du chiffrement du système de fichiers.