Provisioning dei PVC nello storage di file con Lustre Service

Scopri come eseguire il provisioning delle richieste di volume persistenti per i cluster creati utilizzando Kubernetes Engine (OKE) eseguendo il MOUNT dei file system dallo storage di file con il servizio Lustre.

Il servizio Oracle Cloud Infrastructure File Storage with Lustre è un servizio di storage completamente gestito progettato per soddisfare le esigenze di formazione e inferenza AI/ML e di elaborazione ad alte prestazioni. Il plugin Lustre CSI consente di connettere i cluster ai file system nello storage di file con il servizio Lustre.

Puoi utilizzare il servizio Storage di file con Lustre per eseguire il provisioning delle richieste di volume persistenti (PVC) creando manualmente un file system nello storage di file con il servizio Lustre, quindi definendo e creando un volume persistente (PV) supportato dal nuovo file system e infine definendo un nuovo PVC. Quando crei il PVC, Kubernetes Engine lega il PVC al PV supportato dallo storage di file con il servizio Lustre.

Il driver Lustre CSI è il software complessivo che consente di utilizzare i file system Lustre con Kubernetes tramite l'interfaccia CSI (Container Storage Interface). Il plugin Lustre CSI è un componente specifico all'interno del driver, responsabile dell'interazione con il server API Kubernetes e della gestione del ciclo di vita dei volumi Lustre.

Tenere presente quanto riportato di seguito.

  • Il driver CSI Lustre è supportato nei cluster creati da Kubernetes Engine che eseguono Kubernetes versione 1.29 o successiva.
  • Il driver Lustre CSI è supportato su Oracle Linux 8 x86 e su Ubuntu x86 22.04.
  • Per utilizzare un file system Lustre con un cluster creato da Kubernetes Engine, il pacchetto client Lustre deve essere installato sui nodi di lavoro che devono eseguire il MOUNT del file system. Per maggiori informazioni sui client Lustre, vedere Mounting and Accessing a Lustre File System.

Provisioning di un PVC su un file system esistente

Per creare un PVC su un file system esistente nello storage di file con il servizio Lustre (utilizzando chiavi di cifratura gestite da Oracle per cifrare i dati in archivio):

  1. Creare un file system nello storage di file con il servizio Lustre, selezionando l'opzione di cifratura Encrypt using Oracle-managed keys. Vedere Creating a Lustre File System.
  2. Creare regole di sicurezza in un gruppo di sicurezza di rete (consigliato) o in una lista di sicurezza sia per il file system Lustre che per la subnet dei nodi di lavoro del cluster.
    Le regole di sicurezza da creare dipendono dalle posizioni di rete relative del file system Lustre e dai nodi di lavoro che fungono da client, in base agli scenari riportati di seguito.

    Questi scenari, le regole di sicurezza da creare e la posizione in cui crearli, sono descritti completamente nella documentazione del servizio Storage di file con Lustre (vedere Regole di sicurezza VCN obbligatorie).

  3. Creare un PV supportato dal file system nello storage di file con il servizio Lustre come indicato di seguito.
    1. Creare un file manifesto per definire un PV e, nella sezione csi:, impostare:

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

        Dove:

        • <MGSAddress> è l'indirizzo del servizio di gestione per il file system nello storage di file con il servizio Lustre
        • <LNetName> è il nome di rete LNet per il file system nello storage di file con il servizio Lustre.
        • <MountName> è il nome di accesso utilizzato durante la creazione del file system nello storage di file con il servizio Lustre.

        Ad esempio: 10.0.2.6@tcp:/testlustrefs

      • Da fsType a lustre
      • (facoltativo, ma consigliato) da volumeAttributes.setupLnet a "true" se si desidera che il driver Lustre CSI esegua l'impostazione lnet (Lustre Network) prima di eseguire il MOUNT del file system.
      • (facoltativo) volumeAttributes.lustreSubnetCidr al blocco CIDR della subnet in cui si trova la VNIC secondaria del nodo di lavoro, per garantire che il nodo di lavoro disponga della connettività di rete al file system Lustre. ad esempio 10.0.2.0/24.

        Nota

        Non specificare volumeAttributes.lustreSubnetCidr se si utilizza l'interfaccia predefinita del nodo di lavoro (la VNIC primaria) per connettersi al file system Lustre.
      • (facoltativo) volumeAttributes.lustrePostMountParameters per impostare i parametri di Lustre. Ad esempio:
        ...
            volumeAttributes:
              lustrePostMountParameters: '[{"*.*.*MDT*.lru_size": 11200},{"at_history" :
            600}]'

      Ad esempio, il seguente file manifesto (denominato lustre-PV-example.yaml) definisce un PV denominato lustre-pv-example supportato da un file system 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. Creare il PV dal file manifesto immettendo:
      kubectl apply -f <filename>

      Ad esempio:

      kubectl apply -f lustre-pv-example.yaml
    3. Verificare che il PV sia stato creato correttamente immettendo:

      kubectl get pv <pv-name>

      Ad esempio:

      kubectl get pv lustre-pv-example

      Output di esempio:

      NAME                   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                           STORAGECLASS   REASON   AGE
      lustre-pv-example      m31Ti      RWX            Retain           Bound                                                            56m
      
  4. Creare un PVC fornito dal PV creato, come segue:
    1. Creare un file manifesto per definire il PVC e impostare:
      • Da storageClassName a "" Si noti che è necessario specificare un valore vuoto per storageClassName, anche se la classe di memorizzazione non è applicabile in caso di provisioning statico dello storage persistente. Se non si specifica un valore vuoto per storageClassName, viene utilizzata la classe di memorizzazione predefinita (oci-bv), che causa un errore.
      • volumeName al nome del PV creato (ad esempio, lustre-pv-example)

      Ad esempio, il seguente file manifesto (denominato lustre-PVC-example.yaml) definisce un PVC denominato lustre-pvc-example che verrà associato a un PV denominato lustre-pv-example:

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

      Si noti che l'elemento requests: storage: deve essere presente nel file manifesto del PVC e che il relativo valore deve corrispondere al valore specificato per l'elemento capacity: storage: nel file manifesto del PV. A parte questo, il valore dell'elemento requests: storage: viene ignorato.

    2. Creare il PVC dal file manifesto inserendo:
      kubectl apply -f <filename>
      Ad esempio:
      kubectl apply -f lustre-pvc-example.yaml
    3. Verificare che il PVC sia stato creato e associato al PV inserendo:

      kubectl get pvc <pvc-name>

      Ad esempio:

      kubectl get pvc lustre-pvc-example

      Output di esempio:

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

    Il PVC è legato al PV supportato dallo storage di file con il file system di servizio Lustre. I dati vengono cifrati in archivio utilizzando le chiavi di cifratura gestite da Oracle.

  5. Utilizzare il nuovo PVC quando si creano altri oggetti, ad esempio le distribuzioni. Ad esempio:
    1. Creare un file manifesto denominato lustre-app-example-deployment.yaml per definire una distribuzione denominata lustre-app-example-deployment che utilizza il PVC lustre-pvc-example, come indicato di seguito.
      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. Creare la distribuzione dal file manifest immettendo:
      kubectl apply -f lustre-app-example-deployment.yaml
    3. Verificare che i pod di distribuzione siano stati creati correttamente e siano in esecuzione immettendo:
      kubectl get pods

      Output di esempio:

      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

Provisioning di un PVC su un file system esistente con opzioni di attivazione

È possibile ottimizzare le prestazioni e controllare l'accesso a un file system Lustre esistente specificando le opzioni di montaggio per il PV. La specifica delle opzioni di attivazione consente di ottimizzare le modalità di interazione dei pod con il file system.

Per includere le opzioni di attivazione, procedere come segue.

  1. Seguire le istruzioni in Provisioning a PVC on an Existing File System.
  2. Nel file manifesto PV descritto in Provisioning di un PVC su un file system esistente, aggiungere il campo spec.mountOptions, che consente di specificare il modo in cui il PV deve essere montato dai pod.

    Ad esempio, nel file manifesto lustre-pv-example.yaml mostrato in Provisioning di un PVC su un file system esistente, è possibile includere il campo mountOptions come indicato di seguito.

    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"

    In questo esempio, il campo mountOptions viene impostato su ro, a indicare che i pod devono disporre dell'accesso in sola lettura al file system. Per ulteriori informazioni sulle opzioni di montaggio PV, vedere Volumi persistenti nella documentazione di Kubernetes.

Cifratura dei dati in archivio su un file system esistente

Lo storage di file con il servizio Lustre esegue sempre la cifratura dei dati in archivio, utilizzando le chiavi di cifratura gestite da Oracle per impostazione predefinita. Tuttavia, hai la possibilità di specificare la cifratura in archivio utilizzando le tue chiavi di cifratura master che gestisci tu stesso nel servizio Vault.

Per ulteriori informazioni sulla creazione dello storage di file con file system Lustre che utilizzano chiavi di cifratura gestite da Oracle o le proprie chiavi di cifratura master gestite personalmente, vedere Aggiornamento della cifratura del file system.