Lavorare con archivi di dati persistenti

È possibile montare un bucket IBM Cloud Object Storage (COS) sull'applicazione o sul lavoro IBM Cloud® Code Engine utilizzando un archivio dati persistente. Questa funzione consente ai carichi di lavoro di accedere al contenuto di un bucket COS attraverso il file system locale, utilizzando operazioni di file standard.

Un archivio dati persistente in Code Engine è un riferimento a un archivio dati esistente che Code Engine non gestisce. Attualmente, IBM Cloud Object Storage è l'unico tipo di archivio dati supportato. Creando un riferimento al bucket COS, è possibile montarlo direttamente nel file system dell'applicazione o del job container.

Prima di iniziare

Prima di poter lavorare con gli archivi di dati persistenti, assicuratevi che siano soddisfatti i seguenti prerequisiti.

  • È necessario disporre di un' istanza di IBM Cloud Object Storage.
  • È necessario creare una credenziale di servizio per l'istanza Object Storage con credenziali HMAC abilitate. La credenziale HMAC richiede almeno il ruolo di accesso al servizio Writer per leggere e scrivere sul bucket. Se si necessita solo dell'accesso in lettura, scegliere invece il ruolo di accesso al servizio Lettore di contenuti.
  • È necessario avere un bucket disponibile nell'istanza Object Storage. Per ulteriori informazioni, vedere Creare un nuovo bucket.
  • È necessario disporre di un progetto Code Engine e selezionarlo come contesto corrente.

Passo 1: Creare un segreto HMAC in Code Engine utilizzando la console

Per accedere in modo sicuro al vostro bucket COS, Code Engine richiede le credenziali HMAC associate alla vostra istanza Object Storage. Queste credenziali vengono memorizzate in un segreto all'interno del progetto Code Engine.

Seguire Creazione di un segreto HMAC dalla console per creare un segreto del formato HMAC.

Quando viene richiesto, fornire i valori corrispondenti alla credenziale del servizio COS.

Passo 2: creare un archivio dati persistente utilizzando la console

Ora, creare la risorsa dell'archivio dati persistente in Code Engine. Questa risorsa funge da riferimento al bucket COS e lo collega al segreto HMAC creato.

  1. Fare clic sul nome del progetto nella pagina Code Engine Projects.
  2. Dalla pagina Componenti, fare clic su Archivi dati persistenti.
  3. Dalla pagina Archivi di dati persistenti, fare clic su Crea.
  4. Dalla pagina Creare un archivio dati persistente, completare i seguenti passaggi:
    1. Fornire un nome; ad esempio, mysecret-hmac.
    2. Specificare se selezionare la specifica del bucket COS esistente o se si desidera aggiungerla manualmente.
    3. Selezionare un'istanza COS o specificarne il nome manualmente.
    4. Selezionare un bucket o specificarne il nome manualmente.
    5. Selezionare il segreto di accesso HMAC necessario per l'autenticazione all'istanza COS.
    6. Fare clic su Crea per creare l'archivio dati persistente.

Passo 3: Montare l'archivio dati in un carico di lavoro utilizzando la console

Dopo aver creato l'archivio dati persistente, è possibile montarlo come Volume mount quando si crea o si aggiorna un'applicazione o un lavoro.

Montaggio in un'applicazione

  1. Andare alla propria applicazione.

    • Dalla pagina Code Engine Progetti, fare clic sul nome del progetto. Fare clic su Applicazioni per lavorare con le applicazioni.
    • Dalla pagina Applicazioni, fare clic sul nome dell'applicazione che si desidera aggiornare o crearne una nuova facendo clic su Crea.
  2. Selezionare la scheda " Configurazione ".

  3. Dalla scheda Montaggi di volume, fare clic su Aggiungi.

  4. Selezionare il tipo di volume come Archivi dati persistenti.

  5. Selezionare un archivio dati persistente.

  6. Specificare un sottopercorso relativo del bucket (facoltativo) se l'applicazione deve accedere agli oggetti nel bucket solo con quel prefisso del sottopercorso, ad esempio path/in/bucket. È utile quando si vuole isolare l'accesso a una cartella specifica all'interno del bucket. Il sottopercorso deve essere un prefisso valido nel bucket COS. Solo i contenuti di quel percorso saranno accessibili dalla directory montata.

  7. Specificare il percorso di montaggio. Questa è la directory all'interno del contenitore dell'applicazione in cui è possibile accedere ai dati del volume montato, ad esempio /mnt/bucket.

  8. Selezionare un valore per le autorizzazioni di accesso, ovvero Lettura-scrittura o Solo lettura.

  9. Fare clic su Aggiungi per creare il montaggio del volume.

  10. Fare clic su Deploy per salvare le modifiche e distribuire la revisione dell'applicazione.

Quando si aggiorna l'applicazione, questa crea una nuova revisione e instrada il traffico verso tale istanza.

Montaggio in un lavoro

  1. Andate alla pagina del vostro lavoro.

    • Dalla pagina Code Engine Progetti, fare clic sul nome del progetto. Fare clic su Lavori per lavorare con i lavori e le esecuzioni.
    • Dalla pagina Lavori, fare clic sulla scheda Lavori e fare clic sul nome del lavoro che si desidera aggiornare o crearne uno nuovo facendo clic su Crea.
  2. Selezionare la scheda " Configurazione ".

  3. Dalla scheda Montaggi di volume, fare clic su Aggiungi.

  4. Selezionare il tipo di volume come Archivi dati persistenti.

  5. Selezionare un archivio dati persistente.

  6. Specificare un sottopercorso relativo del bucket (facoltativo) se l'esecuzione del processo deve accedere agli oggetti nel bucket solo con quel prefisso del sottopercorso, ad esempio path/in/bucket. È utile quando si vuole isolare l'accesso a una cartella specifica all'interno del bucket. Il sottopercorso deve essere un prefisso valido nel bucket COS. Solo i contenuti di quel percorso saranno accessibili dalla directory montata.

  7. Specificare il percorso di montaggio. È la directory all'interno del contenitore di esecuzione del lavoro in cui è possibile accedere ai dati del montaggio del volume, ad esempio /mnt/bucket.

  8. Selezionare un valore per le autorizzazioni di accesso, ovvero Lettura-scrittura o Solo lettura.

  9. Fare clic su Aggiungi per creare il montaggio del volume.

  10. Fare clic su Distribuisci per salvare le modifiche e distribuire il lavoro.

  11. Fare clic su Invia lavoro.

Prima di iniziare

Prima di poter lavorare con gli archivi di dati persistenti, assicuratevi che siano soddisfatti i seguenti prerequisiti.

  • È necessario disporre di un' istanza di IBM Cloud Object Storage.
  • È necessario creare una credenziale di servizio per l'istanza Object Storage con credenziali HMAC abilitate. La credenziale HMAC richiede almeno il ruolo di accesso al servizio Writer per leggere e scrivere sul bucket. Se si necessita solo dell'accesso in lettura, scegliere invece il ruolo di accesso al servizio Lettore di contenuti.
  • È necessario installare il plugin IBM Cloud Object Storage eseguendo il seguente comando:
    ibmcloud plugin install cloud-object-storage
    
  • È necessario avere un bucket disponibile nell'istanza Object Storage. Per ulteriori informazioni, vedere Creare un nuovo bucket.
  • È necessario disporre di un progetto Code Engine e selezionarlo come contesto corrente.

Passo 1: creare un segreto HMAC in Code Engine utilizzando la CLI

Per accedere in modo sicuro al vostro bucket COS, Code Engine richiede le credenziali HMAC associate alla vostra istanza Object Storage. Queste credenziali vengono memorizzate in un segreto all'interno del progetto Code Engine.

Per creare un segreto di formato hmac, utilizzare il comando secret create il comando.

ibmcloud ce secret create --name my-hmac-secret --format hmac --secret-access-key-prompt --access-key-id-prompt

Fornire i valori corrispondenti alla credenziale del servizio COS quando viene richiesto dal comando secret create comando.

Passo 2: creare un archivio dati persistente utilizzando la CLI

Ora, creare la risorsa dell'archivio dati persistente in Code Engine. Questa risorsa funge da riferimento al bucket COS e lo collega al segreto HMAC creato.

ibmcloud ce persistentdatastore create --name my-cos-bucket-pds --cos-bucket-name my-cos-bucket --cos-access-secret my-hmac-secret
  • Sostituire my-cos-bucket-pds con un nome univoco per l'archivio dati.
  • Sostituire my-cos-bucket con il nome esatto del bucket COS.
  • Sostituire my-hmac-secret con il nome del segreto HMAC.

Passo 3: montare l'archivio dati in un carico di lavoro utilizzando la CLI

Dopo aver creato l'archivio dati persistente, è possibile montarlo quando si crea o si aggiorna un'applicazione o un lavoro. Utilizzare l'opzione --mount-data-store con il formato MOUNT_PATH=PDS_NAME.

Montaggio in un'applicazione

Il comando seguente crea un'applicazione denominata myapp e monta l'archivio dati my-cos-bucket-pds nella directory /mnt/bucket all'interno del contenitore dell'applicazione.

ibmcloud ce application create --name myapp --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds

Montaggio in un lavoro

Allo stesso modo, questo comando crea un lavoro denominato myjob e monta lo stesso archivio dati nella directory /mnt/bucket.

ibmcloud ce job create --name myjob --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds

Montaggio di un sottopercorso all'interno del bucket

È anche possibile montare un sottopercorso specifico all'interno del bucket COS aggiungendo il percorso relativo alla definizione di montaggio con i due punti (:). Questo è utile quando si vuole isolare l'accesso a una cartella specifica all'interno del bucket.

Ad esempio, per montare solo la directory path/in/bucket dall'archivio dati my-cos-bucket-pds in /mnt/bucket:

ibmcloud ce application create --name myapp --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds:path/in/bucket

O per un lavoro:

ibmcloud ce job create --name myjob --image icr.io/codeengine/helloworld --mount-data-store /mnt/bucket=my-cos-bucket-pds:path/in/bucket

Nota: path/in/bucket deve essere un prefisso valido nel bucket COS. Solo i contenuti di quel percorso saranno accessibili dalla directory montata.

Passo 4: Accesso ai file nell'archivio dati montato

Una volta che l'applicazione o il lavoro è in esecuzione, il codice può interagire con il bucket COS montato come se fosse una directory locale. Sono supportate tutte le operazioni standard del file system.

Ad esempio, all'interno del contenitore è possibile elencare i file, leggere il contenuto e scrivere nuovi file:

# List files in the bucket
ls -l /mnt/bucket
# Read a file from the bucket
cat /mnt/bucket/my-document.txt
# Write a new file to the bucket
echo "Hello from Code Engine" > /mnt/bucket/new-file.txt

Limitazioni

Il montaggio è implementato utilizzando s3fsche fornisce un'interfaccia per file system basata su FUSE allo storage S3-compatible. Tenere presente le seguenti limitazioni:

  • Numero di archivi dati persistenti:
    • Esiste una restrizione che consente un massimo di due mount di data store persistenti per applicazione o lavoro.
  • Prestazioni:
    • Object Storage ha una latenza elevata per il time-to-first-byte, che li rende più lenti dei file system locali per le operazioni che richiedono un accesso immediato.
    • Le operazioni che modificano i file, come le scritture o le aggiunte casuali, richiedono la riscrittura dell'intero oggetto nel backend, il che può essere lento e inefficiente, poiché non c'è accesso casuale alla scrittura.
    • Le operazioni sui metadati, come l'elenco delle directory, possono avere prestazioni scarse.
  • Coerenza:
    • IBM Cloud Object Storage fornisce una forte coerenza in lettura e scrittura per i nuovi oggetti, ma una coerenza eventuale per le sovrascritture e le cancellazioni degli oggetti. Ciò significa che dopo un aggiornamento o una cancellazione, le operazioni di lettura potrebbero temporaneamente restituire dati non aggiornati.
    • Le modifiche apportate al bucket dall'esterno del mount (ad esempio, direttamente tramite l'API COS o un altro client) non vengono rilevate immediatamente e potrebbero non essere visibili per qualche tempo.
  • Semantica del file system:
    • Le funzioni standard del file system POSIX non sono completamente supportate. In particolare, non ci sono rinominazioni atomiche di file o directory e non ci sono hard link.
  • Concorrenza:
    • Non c'è coordinamento tra più client (ad esempio, più istanze di app) che montano lo stesso bucket. Le scritture simultanee sullo stesso file da istanze diverse possono causare la perdita o il danneggiamento dei dati.
  • Abbonamenti agli eventi:
    • Se è stata configurata una sottoscrizione agli eventi per il bucket Object Storage, si tenga presente che le operazioni di creazione dei file eseguite tramite il montaggio possono generare più eventi di aggiornamento. Questo può far sì che l'applicazione o il lavoro di Code Engine venga attivato più di una volta per una singola operazione su file, con possibili ripercussioni sull'elaborazione a valle o sui flussi di lavoro basati su eventi.

A causa di queste limitazioni, questa funzione non è adatta a tutti i carichi di lavoro. È più adatto ai carichi di lavoro che leggono principalmente file di grandi dimensioni, come nel deep learning o nell'analisi dei dati, dove è possibile ottenere un buon throughput. Non è consigliata per carichi di lavoro che richiedono bassa latenza, piccole scritture frequenti o operazioni transazionali sui file.

Passi successivi

Ora che avete capito come lavorare con gli archivi di dati persistenti, esplorate gli argomenti più avanzati: