Installazione del componente aggiuntivo del cluster IBM Cloud Object Storage

È possibile abilitare il componente aggiuntivo " IBM Cloud Object Storage " dalla console IBM Cloud o tramite la CLI.

Prerequisiti

  • Il componente aggiuntivo IBM Cloud Object Storage richiede almeno 0.3 vCPU e 360 MB di memoria.
  • Il componente aggiuntivo è disponibile per i nodi worker Red Hat CoreOS (RHCOS) e Ubuntu. Se il cluster ha sia nodi RHEL che RHCOS, il componente aggiuntivo viene distribuito solo sui nodi RHCOS.
  • Impostare un' istanza di IBM Cloud Object Storage.
  • Opzionale Se si intende usare il versioning del bucket, le credenziali del servizio devono avere le autorizzazioni di Manager o Writer per abilitare o disabilitare il versioning del bucket sul bucket. Per ulteriori informazioni, consultare il sito Introduzione al controllo delle versioni.

Comprendere la creazione e la rimozione dei bucket

  • È possibile utilizzare un bucket esistente specificando il nome del bucket nel PVC.
  • Se si fornisce il nome di un bucket e questo non esiste, viene creato un bucket con quel nome.
  • Se non si specifica il nome di un bucket, verrà creato un bucket con la convenzione di denominazione s3fs-<timestamp>-xxx o rclone-<timestamp>-xxx, a seconda del tipo di mounter.
  • I bucket vengono eliminati in base ai criteri di recupero definiti nella classe di archiviazione.
    • Se è impostato reclaimPolicy: Delete, il bucket viene eliminato quando il PVC viene cancellato.
    • Se viene impostato reclaimPolicy: Retain, il bucket viene mantenuto anche dopo la cancellazione del PVC.

Attivazione del componente aggiuntivo “ IBM Cloud Object Storage ” dalla console

  1. Dalla dashboard dei cluster di Red Hat OpenShift on IBM Cloud, seleziona il cluster in cui desideri abilitare il componente aggiuntivo.
  2. Nella sezione " Componenti aggiuntivi ", individua il Cloud Object Storage componente aggiuntivo e fare clic su Installa.
  3. Nel pannello "Installa componente aggiuntivo": Cloud Object Storage, selezionare una versione dal menu a tendina " Versione".
  4. Facoltativo: configurare i seguenti parametri.
maxVolumesPerNode
Imposta il numero massimo di volumi " IBM Cloud Object Storage " che possono essere montati su un singolo nodo. Il valore predefinito è 0, il che significa che non viene applicato alcun limite.
restrictNodeServerScheduling
Impostare il valore su true per limitare l'esecuzione dei pod del nodeserver esclusivamente sui nodi contrassegnati con l'etichetta cos.csi.ibm.io/csi-node=true. Il valore predefinito è ` `false, il che significa che i pod nodeserver vengono pianificati su tutti i nodi.
  1. Fai clic su Install. Potrebbero essere necessari diversi minuti prima che il componente aggiuntivo sia distribuito e pronto per l'utilizzo.
  2. Verificare l'installazione. Nella sezione " Componenti aggiuntivi ", verifica che il Cloud Object Storage componente aggiuntivo presenti uno stato di integrità " Normale ".

Abilitazione del componente aggiuntivo IBM Cloud Object Storage dalla CLI

Prima di iniziare: accedi al tuo cluster Red Hat OpenShift.

  1. Aggiorna il plug-in " container-service " alla versione più recente.
    ibmcloud update && ibmcloud plugin update container-service
    
  2. Elencare i componenti aggiuntivi e trovare la versione che si desidera installare.
    ibmcloud oc cluster addon versions
    
  3. Esaminare le opzioni aggiuntive.
    ibmcloud oc cluster addon options --addon ibm-object-csi-driver [--version VERSION]
    
  4. Installare il componente aggiuntivo.
    ibmcloud oc cluster addon enable ibm-object-csi-driver --cluster CLUSTER [--version VERSION]
    
  5. Verificare l'installazione.
    ibmcloud oc cluster addon ls --cluster CLUSTER
    
    OK
    Name                    Version   Health State   Health Status
    ibm-object-csi-driver   1.0       normal         Addon Ready. For more info: http://ibm.biz/addon-state (H1500)
    
  6. Elenca le classi di archiviazione disponibili. Il driver supporta sia le classi di archiviazione regionali che quelle interregionali per i programmi di montaggio s3fs e rclone.
    oc get sc | grep object
    
    ibm-object-storage-smart-cross-region-rclone             cos.s3.csi.ibm.io   Delete          Immediate           false                  17h
    ibm-object-storage-smart-cross-region-rclone-retain      cos.s3.csi.ibm.io   Retain          Immediate           false                  17h
    ibm-object-storage-smart-cross-region-s3fs               cos.s3.csi.ibm.io   Delete          Immediate           false                  17h
    ibm-object-storage-smart-cross-region-s3fs-retain        cos.s3.csi.ibm.io   Retain          Immediate           false                  17h
    ibm-object-storage-smart-rclone                          cos.s3.csi.ibm.io   Delete          Immediate           false                  17h
    ibm-object-storage-smart-rclone-retain                   cos.s3.csi.ibm.io   Retain          Immediate           false                  17h
    ibm-object-storage-smart-s3fs                            cos.s3.csi.ibm.io   Delete          Immediate           false                  17h
    ibm-object-storage-smart-s3fs-retain                     cos.s3.csi.ibm.io   Retain          Immediate           false                  17h
    ibm-object-storage-standard-cross-region-rclone          cos.s3.csi.ibm.io   Delete          Immediate           false                  17h
    ibm-object-storage-standard-cross-region-rclone-retain   cos.s3.csi.ibm.io   Retain          Immediate           false                  17h
    ibm-object-storage-standard-cross-region-s3fs            cos.s3.csi.ibm.io   Delete          Immediate           false                  17h
    ibm-object-storage-standard-cross-region-s3fs-retain     cos.s3.csi.ibm.io   Retain          Immediate           false                  17h
    ibm-object-storage-standard-rclone                       cos.s3.csi.ibm.io   Delete          Immediate           false                  17h
    ibm-object-storage-standard-rclone-retain                cos.s3.csi.ibm.io   Retain          Immediate           false                  17h
    ibm-object-storage-standard-s3fs                         cos.s3.csi.ibm.io   Delete          Immediate           false                  17h
    ibm-object-storage-standard-s3fs-retain                  cos.s3.csi.ibm.io   Retain          Immediate           false                  17h
    

Limitazione della pianificazione dei pod del nodeserver

Per impostazione predefinita, i pod del driver COS CSI nodeserver vengono pianificati su tutti i nodi del cluster. È possibile utilizzare il parametro restrictNodeServerScheduling per limitare la pianificazione dei pod del nodeserver esclusivamente ai nodi contrassegnati con l'etichetta cos.csi.ibm.io/csi-node=true``.

È possibile configurare l' restrictNodeServerScheduling e al momento dell'attivazione del componente aggiuntivo oppure aggiornarla in un secondo momento applicando una patch all' ConfigMap.

  • Per impostare restrictNodeServerScheduling all'attivazione del componente aggiuntivo, includere il flag --param nel comando di abilitazione.
    ibmcloud oc cluster addon enable ibm-object-csi-driver --cluster CLUSTER --param "restrictNodeServerScheduling=true"
    
  • Per aggiornare restrictNodeServerScheduling dopo che l'estensione è già stata abilitata, segui questi passaggi.
  1. Elenca i nodi del tuo cluster e stabilisci dove desideri che vengano eseguiti i pod del driver COS.
    oc get nodes
    
    Output di esempio
    NAME            STATUS   ROLES    AGE    VERSION
    10.241.0.11     Ready    <none>   5d2h   v1.35.5+IKS
    10.241.0.12     Ready    <none>   5d2h   v1.35.5+IKS
    10.241.0.13     Ready    <none>   5d2h   v1.35.5+IKS
    10.241.128.10   Ready    <none>   5d2h   v1.35.5+IKS
    10.241.128.11   Ready    <none>   5d2h   v1.35.5+IKS
    10.241.128.9    Ready    <none>   5d2h   v1.35.5+IKS
    10.241.65.12    Ready    <none>   5d2h   v1.35.5+IKS
    10.241.65.13    Ready    <none>   5d2h   v1.35.5+IKS
    10.241.65.14    Ready    <none>   5d2h   v1.35.5+IKS
    
  2. Verificare che i pod di nodeserver siano attualmente in esecuzione su tutti i nodi.
    oc get pods -n ibm-object-csi-operator -l app.kubernetes.io/component=node -o wide
    
    Output di esempio
    NAME                        READY   STATUS    RESTARTS   AGE    IP              NODE            NOMINATED NODE   READINESS GATES
    ibm-object-csi-node-2pj2j   3/3     Running   0          145m   172.17.14.10    10.241.0.12     <none>           <none>
    ibm-object-csi-node-7bhwh   3/3     Running   0          145m   172.17.1.72     10.241.65.12    <none>           <none>
    ibm-object-csi-node-7l9hc   3/3     Running   0          145m   172.17.17.6     10.241.128.9    <none>           <none>
    ibm-object-csi-node-cxzt7   3/3     Running   0          145m   172.17.39.72    10.241.0.11     <none>           <none>
    ibm-object-csi-node-dw6qs   3/3     Running   0          145m   172.17.46.77    10.241.128.10   <none>           <none>
    ibm-object-csi-node-rpcvr   3/3     Running   0          145m   172.17.32.198   10.241.65.13    <none>           <none>
    ibm-object-csi-node-swqtg   3/3     Running   0          145m   172.17.16.69    10.241.0.13     <none>           <none>
    ibm-object-csi-node-sxbbs   3/3     Running   0          145m   172.17.26.7     10.241.65.14    <none>           <none>
    ibm-object-csi-node-xm8bt   3/3     Running   0          145m   172.17.20.200   10.241.128.11   <none>           <none>
    
  3. Contrassegna i nodi su cui desideri che vengano pianificati i pod di nodeserver.
    oc label nodes NODE-NAME-1 NODE-NAME-2 cos.csi.ibm.io/csi-node=true
    
    Output di esempio
    node/10.241.0.11 labeled
    node/10.241.0.12 labeled
    
  4. Per attivare la restrizione, aggiorna il file ConfigMap.
    oc patch cm managed-addon-ibm-object-csi-driver -n kube-system \
      --type merge -p '{"data":{"restrictNodeServerScheduling":"true"}}'
    
    Output di esempio
    configmap/managed-addon-ibm-object-csi-driver patched
    
  5. Verificare che i pod dei nodi server vengano pianificati esclusivamente su nodi contrassegnati.
    oc get pods -n ibm-object-csi-operator -l app.kubernetes.io/component=node -o wide
    
    Output di esempio
    NAME                        READY   STATUS    RESTARTS   AGE    IP             NODE           NOMINATED NODE   READINESS GATES
    ibm-object-csi-node-cxzt7   3/3     Running   0          145m   172.17.39.72   10.241.0.11    <none>           <none>
    ibm-object-csi-node-7bhwh   3/3     Running   0          145m   172.17.1.72    10.241.65.12   <none>           <none>
    
restrictNodeServerScheduling opzioni
Impostazione Modalità di funzionamento
restrictNodeServerScheduling: "false" (predefinito) I pod di Nodeserver vengono pianificati su tutti i nodi.
restrictNodeServerScheduling: "true" I pod dei server di nodo vengono pianificati solo sui nodi contrassegnati con l'etichetta " cos.csi.ibm.io/csi-node=true".

Impostazione dei volumi massimi per nodo

Per impostazione predefinita, il driver COS CSI non limita il numero di volumi che possono essere montati su un singolo nodo. È possibile utilizzare il parametro maxVolumesPerNode per impostare il numero massimo di volumi per nodo.

È possibile configurare l' maxVolumesPerNode e al momento dell'attivazione del componente aggiuntivo oppure aggiornarla in un secondo momento applicando una patch all' ConfigMap.

  • Per impostare maxVolumesPerNode all'attivazione del componente aggiuntivo, includere il flag --param nel comando di abilitazione.
    ibmcloud oc cluster addon enable ibm-object-csi-driver --cluster CLUSTER --param "maxVolumesPerNode=VALUE"
    
  • Per aggiornare maxVolumesPerNode dopo che l'add-on è già stato abilitato, applicare la patch all'add-on gestito ConfigMap.
    oc patch cm managed-addon-ibm-object-csi-driver -n kube-system --type merge -p '{"data":{"maxVolumesPerNode":"VALUE"}}'
    
    Output di esempio
    configmap/managed-addon-ibm-object-csi-driver patched
    
maxVolumesPerNode opzioni
Impostazione Modalità di funzionamento
maxVolumesPerNode: "0" (predefinito) Non vi è alcun limite al numero di volumi che possono essere montati per ogni nodo.
maxVolumesPerNode: "VALUE" Limita il numero di volumi che possono essere montati su un singolo nodo al valore specificato.

Distribuzione di un'applicazione che utilizza IBM Cloud Object Storage

Creare un segreto Kubernetes che contenga le credenziali COS.

  1. Accedi al tuo cluster Red Hat OpenShift.

  2. Salvate la seguente configurazione in un file chiamato secret.yaml. Fornire le credenziali IAM oppure quelle HMAC, ma non entrambe.

    • Per le credenziali IAM, utilizzare apiKey e serviceId dall’istanza del servizio IBM Cloud Object Storage.
    • Per le credenziali HMAC, utilizzare accessKey e secretKey dalla propria istanza del servizio IBM Cloud Object Storage.
    apiVersion: v1
    kind: Secret
    type: cos-s3-csi-driver
    metadata:
        name: cos-secret-1 # Name your secret. This same name is used for the PVC in the following steps.
        namespace: <namespace> # Specify the namespace where you want to create the secret.
    data:
        # --- IAM credentials (provide apiKey + serviceId) ---
        apiKey: <base64-encoded-COS-Service-Instance-apikey>
        serviceId: <base64-encoded-COS-resource_instance_id>
        # --- HMAC credentials ---
        accessKey: <base64-encoded-HMAC-access_key_id>
        secretKey: <base64-encoded-HMAC-secret_access_key>
        # --- Optional credential fields (base64-encoded) ---
        kpRootKeyCRN: <base64-encoded-Key-Protect-root-key-CRN>
        resourceConfigApiKey: <base64-encoded-apikey> # Required only when quotaLimit is "true".
    stringData:
        # --- Optional config fields (plain text) ---
        cosEndpoint: "https://<cos_s3_service_endpoint>" # Overrides the cosEndpoint from the storage class.
        locationConstraint: "<region>-standard" # Overrides the locationConstraint from the storage class.
        iamEndpoint: "<iam-endpoint-url>" # Overrides the default iam endpoint set in COS CSI Driver
        objectPath: "<subdirectory>" # Optional. Subdirectory within the bucket to mount, for example "data".
        bucketName: <bucket-name> # Optional. If you don't provide a bucket name, a bucket with the naming convention s3fs-<timestamp>-xxx or rclone-<timestamp>-xxx is created.
        bucketVersioning: "false" # Set to "true" to enable bucket versioning. Set to "false" to disable versioning. Must be a string value.
        quotaLimit: "false" # Set to "true" to enforce a hard quota on the bucket equal to the PVC storage size. Requires resourceConfigApiKey.
        mountOptions: |
            # uid=3000  # Optional: Run as non-root user. Must match runAsUser in SecurityContext of pod spec.
            # Review or update the following default s3fs mount options
            #multipart_size=52
            #multireq_max=20
            #max_dirty_data=5120
            #parallel_count=20
            #max_stat_cache_size=100000
            #retries=5
            #kernel_cache
            #max_background=1000
            # Review or update the following default rclone mount options
            #acl=private
            #bucket_acl=private
            #upload_cutoff=100Mi
            #chunk_size=16Mi
            #max_upload_parts=1000
            #upload_concurrency=8
            #multi_thread_streams=8
            #disable_checksum=true
    
    apiKey
    Necessario per l'autenticazione IAM. Inserisci la chiave API IAM di base64-encoded IBM Cloud relativa alla tua istanza del servizio IBM Cloud Object Storage. Puoi trovare la chiave API nelle credenziali del servizio alla pagina apikey. Indicare una delle seguenti opzioni: apiKey + serviceId oppure accessKey + secretKey, ma non entrambe.
    serviceId
    Necessario per l'autenticazione IAM. Inserisci l'ID dell'istanza della risorsa " base64-encoded " relativa alla tua istanza del servizio " IBM Cloud Object Storage ". Puoi trovare questo valore nelle tue credenziali di servizio alla pagina resource_instance_id.
    accessKey
    Necessario per l'autenticazione HMAC. Inserisci l'ID della chiave di accesso HMAC " base64-encoded ". Puoi trovare questo valore nelle tue credenziali di servizio alla pagina cos_hmac_keys.access_key_id. Indicare una delle seguenti opzioni: accessKey + secretKey oppure apiKey + serviceId, ma non entrambe.
    secretKey
    Necessario per l'autenticazione HMAC. Inserisci la chiave di accesso segreta HMAC dell’ base64-encoded. Puoi trovare questo valore nelle tue credenziali di servizio alla pagina cos_hmac_keys.secret_access_key.
    kpRootKeyCRN
    Facoltativo. Inserisci il CRN della chiave root " base64-encoded " della tua istanza di Key Protect. Per recuperare il CRN, accedi alla tua istanza KMS nella console di IBM Cloud, apri la sezione "Chiavi", fai clic sulla chiave radice e copia il CRN dai dettagli della chiave. Si applica solo ai nuovi bucket; non è possibile aggiungere la crittografia a un bucket esistente.
    iamEndpoint
    Facoltativo. Inserisci l'endpoint del token IAM di IBM Cloud URL come testo in chiaro. Per impostazione predefinita, il driver utilizza https://private.iam.cloud.ibm.com per i cluster VPC e https://iam.cloud.ibm.com per i cluster Classic. Modifica questo valore solo se devi utilizzare un endpoint IAM diverso.
    cosEndpoint
    Facoltativo. Inserisci l'endpoint IBM Cloud Object Storage URL come testo in chiaro, ad esempio https://s3.us.cloud-object-storage.appdomain.cloud. Se specificato, questo valore ha la precedenza sull' cosEndpoint e impostato nella classe di archiviazione. Utilizza questo campo se il tuo bucket si trova in una regione diversa o utilizza un endpoint diretto o privato. Per un elenco degli endpoint disponibili, consultare la pagina " IBM Cloud Object Storage endpoints ".
    locationConstraint
    Facoltativo. Inserisci la stringa di vincolo di posizione come testo semplice, ad esempio us-standard o us-geo-smart. Se specificato, questo valore ha la precedenza sull’ locationConstraint e impostato nella classe di archiviazione. Il vincolo di ubicazione determina la classe del bucket e la regione in cui è archiviato il bucket.
    objectPath
    Facoltativo. Inserisci il percorso di una sottodirectory all'interno del bucket da montare come testo semplice, ad esempio data. Utilizza questa opzione per consentire a un'app di accedere solo a una cartella specifica all'interno di un bucket condiviso, anziché all'intera radice del bucket.
    resourceConfigApiKey
    Obbligatorio quando l'opzione " quotaLimit " è impostata su " "true"". Inserisci lo stesso valore " base64-encoded " ( apikey ) presente nelle credenziali del servizio IBM Cloud Object Storage che hai utilizzato per il campo " apiKey " sopra indicato.
    bucketName
    Facoltativo. Inserisci il nome di un bucket esistente da utilizzare oppure il nome di un nuovo bucket da creare. Se il nome del bucket specificato non esiste, il driver lo crea. Se si lascia questo campo vuoto, viene creato automaticamente un bucket con la convenzione di denominazione s3fs-<timestamp>-xxx o rclone-<timestamp>-xxx, a seconda del tipo di mounter. Il nome del bucket deve essere univoco a livello globale su IBM Cloud Object Storage.
    bucketVersioning
    Facoltativo. Gestisce il controllo delle versioni delle bucket. Impostare il valore su "true" per abilitare il versioning, oppure su "false" per disabilitarlo su un bucket in cui il versioning è già abilitato. Deve essere un valore di tipo stringa. Quando la gestione delle versioni è abilitata, IBM Cloud Object Storage conserva più versioni di ogni oggetto presente nel bucket, proteggendolo da cancellazioni e sovrascritture accidentali. Si noti che le credenziali del servizio devono disporre dei permessi di tipo “Manager” o “Writer” per poter abilitare o disabilitare il controllo delle versioni del bucket. Per ulteriori informazioni, consultare il sito Introduzione al controllo delle versioni.
    quotaLimit
    Facoltativo. Impostare il valore su "true" per applicare una quota di spazio di archiviazione rigida al bucket. Se abilitata, la quota del bucket viene impostata in modo da corrispondere alla dimensione “ storage ” richiesta nel PVC. Se la quota viene raggiunta, le operazioni di scrittura nel bucket non vanno a buon fine finché non vengono eliminati dei dati. È necessario che sia impostata la variabile resourceConfigApiKey . Il valore predefinito è "false". Deve essere un valore di tipo stringa.
    mountOptions
    È possibile personalizzare le opzioni di montaggio per s3fs o rclone modificando mountOptions nel proprio segreto. Per eseguire il processo come utente non root, rimuovi il commento e imposta uid= in modo che corrisponda al campo runAsUser nel file securityContext della specifica del tuo pod. Allineare le opzioni specificate con la classe di archiviazione utilizzata dal PVC. Per visualizzare i valori predefiniti di una classe di archiviazione, eseguire il comando oc describe storageclass <storageclass_name> oppure oc describe storageclass <storageclass_name>. Per ulteriori informazioni, consultare il sito s3fs opzioni di montaggio e il sito rclone opzioni di montaggio.

    Attualmente, il componente aggiuntivo è abilitato a supportare un insieme fisso di opzioni di montaggio con una corretta convalida per ogni opzione di montaggio. Se si desidera utilizzare altre opzioni di montaggio non presenti nell'elenco di convalida, contattare l'assistenza per abilitarle.

  3. Codificare tutti i parametri dei dati segreti in base64.

    echo -n "<value>" | base64
    
  4. Aggiornare secret.yaml con i valori codificati in base64.

  5. Crea il segreto.

    oc apply -f secret.yaml
    

Creare un PVC

È possibile utilizzare un unico segreto per più PVC o un segreto per PVC.

È possibile gestire questo comportamento utilizzando le seguenti annotazioni nel PVC yaml. Queste annotazioni aiutano il driver a mappare il PVC sul segreto corretto.

cos.csi.driver/secret: "<custom-secret>"

Assicurati che "secret", "PVC" e "pod" si trovino tutti nello stesso namespace

Esempio di PVC per una mappatura da segreto a PVC 1-to-1 assegnando al PVC lo stesso nome del segreto creato in precedenza.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: cos-secret-1 # Give your PVC the same name as the secret you created in the previous step.
  namespace: <namespace> # The namespace where you want to create the PVC.
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 10Gi
  storageClassName: <storage_class_name> # The storage class you want to use.

Esempio di PVC per l'utilizzo di 1 segreto per molti PVC utilizzando le annotazioni per specificare il segreto.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: cos-csi-pvc1
  namespace: <namespace> # The namespace where you want to create the PVC.
  annotations:
    cos.csi.driver/secret: "<custom-secret>"
spec:
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 256Mi
  storageClassName: <storage_class_name> # The storage class you want to use.
  1. Scegliete uno degli esempi precedenti e personalizzatelo per il vostro caso d'uso. Per un elenco delle classi di archiviazione, vedere il riferimento alle classi di archiviazione.

  2. Crea la PVC.

    oc apply -f pvc.yaml
    

Crea una distribuzione

  1. Salvate la seguente configurazione in un file chiamato dep.yaml.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: <name>
      labels:
        app: <name>
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: <name>
      template:
        metadata:
          labels:
        app: <name>
        spec:
          containers:
          - name: app-frontend
            image: <image> # Enter your app image.
            imagePullPolicy: IfNotPresent
            volumeMounts:
            - mountPath: <path_you_want_to_mount_the_volume_on> # For example `/dev`
              name: cos-csi-volume
          volumes:
          - name: cos-csi-volume
            persistentVolumeClaim:
              claimName: <pvc_name> # Enter the name of the PVC you created earlier.
    
  2. Crea la distribuzione.

    oc apply -f dep.yaml
    

Disabilitazione del componente aggiuntivo IBM Cloud Object Storage

I segreti, i PVC e le distribuzioni esistenti non vengono cancellati dalla disattivazione del componente aggiuntivo o dagli aggiornamenti della patch. Non ci sono interruzioni nei carichi di lavoro esistenti dei clienti.

  1. Eseguire il seguente comando per disattivare il componente aggiuntivo.
     ibmcloud oc cluster addon disable ibm-object-csi-driver --cluster CLUSTER
    
    Output di esempio
    Data and resources that you created for the add-on might be deleted when the add-on is disabled. Continue? [y/N]> y
    Disabling add-on ibm-object-csi-driver for cluster XXX...
    OK
    
  2. Verificare che il componente aggiuntivo sia stato rimosso.
    ibmcloud oc cluster addon ls --cluster CLUSTER
    

Migrazione dal plug-in Helm al componente aggiuntivo per cluster

  1. Accedi al tuo cluster Red Hat OpenShift.

  2. Ottenete i dettagli dei vostri PVC e selezionatene uno da migrare.

    oc get pvc --all-namespaces -o custom-columns='NAMESPACE:.metadata.namespace,NAME:.metadata.name' | tail -n +2 | while read namespace pvc; do kubectl describe pvc "$pvc" -n "$namespace" | grep 'volume.kubernetes.io/storage-provisioner: ibm.io/ibmc-s3fs' > /dev/null ; if [ $? -eq 0 ]; then echo "PVC: $pvc in Namespace: $namespace uses ibm.io/ibmc-s3fs storage provisioner"; fi; done
    

    Output di esempio

    PVC: pvc-test in Namespace: default uses ibm.io/ibmc-s3fs storage provisioner
    
  3. Descrivere il PVC e ottenere il nome del secchio.

    oc describe pvc <pvc_name> | grep ibm.io/bucket:
    

    Output di esempio

    ibm.io/bucket: test-s3
    
  4. Ricreate il vostro segreto con il nome del secchio incluso.

    apiVersion: v1
    kind: Secret
    type: cos-s3-csi-driver
    metadata:
        name: cos-secret-1 # Name your secret.
        namespace: <namespace> # Specify the namespace where you want to create the secret.
    data:
        accessKey: <base64-encoded-HMAC-access-key>
        secretKey: <base64-encoded-HMAC-secret-key>
    stringData:
        bucketName: <bucket-name>
        mountOptions: |
            # uid=3000  # Optional: Run as non-root user. Must match runAsUser in SecurityContext of pod spec.
            key1=value1
            key2=value2
    
  5. Trovare la classe di archiviazione utilizzata nel PVC.

    oc describe pvc <pvc_name> | grep StorageClass:
    

    Esempio di comando per un PVC chiamato test-s3.

    oc describe pvc test-s3 | grep StorageClass:
    

    Output di esempio

    StorageClass:  ibmc-s3fs-smart-perf-regional
    
  6. Esaminare le nuove classi di archiviazione disponibili con il componente aggiuntivo e selezionare una classe sostitutiva.

    • Se si è utilizzata una classe flex, scegliere una delle nuove classi smart.
    • Se avete usato una classe standard, scegliete una delle nuove classi standard.
    • Le classi cold e vault non sono più disponibili con il componente aggiuntivo; scegliete invece una classe smart o standard.
  7. Esaminate i dettagli del vostro PVC.

    oc describe pvc test-s3
    

    Output di esempio

    Name:          pvc-test
    Namespace:     default
    StorageClass:  ibmc-s3fs-smart-perf-regional
    Status:        Bound
    Volume:        pvc-c625474d-31f0-4929-bc3e-feace1fb42fb
    Labels:        <none>
    Annotations:   ibm.io/auto-create-bucket: true
                ibm.io/auto-delete-bucket: true
                ibm.io/bucket: bha-test-s23
                ibm.io/secret-name: satstoragesecret
                pv.kubernetes.io/bind-completed: yes
                pv.kubernetes.io/bound-by-controller: yes
                volume.kubernetes.io/storage-provisioner: ibm.io/ibmc-s3fs
    Finalizers:    [kubernetes.io/pvc-protection]
    Capacity:      3Gi
    Access Modes:  RWO
    VolumeMode:    Filesystem
    Used By:       test-pod
    Events:        <none>
    
  8. Creare un PVC sostitutivo che utilizzi una nuova classe di archiviazione e faccia riferimento al segreto creato in precedenza.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    name: cos-csi-pvc1
    namespace: <namespace> # The namespace where you want to create the PVC.
    annotations:
        cos.csi.driver/secret: "cos-secret-1"  # Secret created in step 4
    spec:
    accessModes:
    - ReadWriteOnce
    resources:
        requests:
        storage: 256Mi
    storageClassName: <storage_class_name> # The storage class you picked based on old storage class mapping.
    
  9. Verificare che il PVC sia Bound.

    oc get pvc
    
  10. Scopri i dettagli della tua app.

    oc get pods
    
  11. Riducete la vostra applicazione a zero.

    kubectl scale deployment --replicas=0 my-app
    
  12. Creare un'installazione sostitutiva che faccia riferimento al PVC creato nel passaggio precedente.

  13. Dopo che la nuova installazione client è in esecuzione, è possibile eliminare la vecchia installazione client.

  14. Ripeti questi passaggi per ogni PVC che desideri migrare.

IBM Cloud Object Storage classi di archiviazione aggiuntive al cluster

Il componente aggiuntivo per cluster IBM Cloud Object Storage fornisce classi di archiviazione per i montaggi s3fs e rclone. Scegli una classe di archiviazione adatta ai tuoi requisiti di accesso ai dati. La classe di archiviazione determina la classe del bucket, il criterio di recupero e il comportamento di montaggio predefinito per il bucket creato per il carico di lavoro.

Standard
Da utilizzare per i dati più importanti a cui si accede frequentemente. I casi d'uso comuni sono le applicazioni web o mobili.
Vault
Da utilizzare per carichi di lavoro o dati inattivi a cui si accede raramente, ad esempio una volta al mese o meno. I casi d'uso comuni sono gli archivi, la conservazione dei dati a breve termine, la conservazione di asset digitali, la sostituzione dei nastri e il ripristino d'emergenza.
Cold
Da utilizzare per i dati “freddi”, a cui si accede raramente (ogni 90 giorni o meno), o per i dati inattivi. I casi d'uso comuni sono gli archivi, i backup a lungo termine, i dati cronologici che conservi per la conformità oppure i carichi di lavoro e le applicazioni a cui si accede raramente.
Intelligenza
Da utilizzare per carichi di lavoro e dati che non seguono un modello di utilizzo specifico o quando il modello di utilizzo è difficile da prevedere.

Decidi il livello di resilienza per i dati archiviati nel tuo bucket. Per ulteriori informazioni, vedi Regioni ed endpoint.

Interregionale
I tuoi dati vengono archiviati in tre regioni all'interno di una stessa area geografica per garantire la massima disponibilità. Se hai dei carichi di lavoro distribuiti tra le regioni, le richieste vengono instradate all'endpoint regionale più vicino. L'endpoint IBM Cloud Object Storage per la geolocalizzazione viene impostato automaticamente in base alla posizione in cui si trova il cluster. Ad esempio, se il cluster si trova all'indirizzo US South, le classi di archiviazione sono configurate per utilizzare l'endpoint US GEO per i bucket. Scegli una classe di archiviazione che contenga la dicitura “ cross-region ” nel nome.
Regionale
I tuoi dati vengono replicati in più zone all’interno di una stessa regione. Se hai dei carichi di lavoro che si trovano nella stessa regione, vedi una latenza più bassa e delle prestazioni migliori rispetto a una configurazione interregionale. L'endpoint regionale viene impostato automaticamente in base alla posizione in cui si trova il cluster. Ad esempio, se il cluster si trova in US South, le classi di archiviazione sono configurate per utilizzare US South come endpoint regionale per i bucket. Scegli una classe di archiviazione che non contenga la dicitura “ cross-region ” nel nome.
Classi di archiviazione aggiuntive al cluster COS
Nome Classe Secchiello Resilienza Montatore Politica di riacquisizione Modalità di binding
ibm-object-storage-smart-cross-region-rclone Intelligenza Interregionale rclone Elimina Immediato
ibm-object-storage-smart-cross-region-rclone-retain Intelligenza Interregionale rclone Conserva Immediato
ibm-object-storage-smart-cross-region-s3fs Intelligenza Interregionale s3fs Elimina Immediato
ibm-object-storage-smart-cross-region-s3fs-retain Intelligenza Interregionale s3fs Conserva Immediato
ibm-object-storage-smart-rclone Intelligenza Regionale rclone Elimina Immediato
ibm-object-storage-smart-rclone-retain Intelligenza Regionale rclone Conserva Immediato
ibm-object-storage-smart-s3fs Intelligenza Regionale s3fs Elimina Immediato
ibm-object-storage-smart-s3fs-retain Intelligenza Regionale s3fs Conserva Immediato
ibm-object-storage-standard-interregionale-rclone Standard Interregionale rclone Elimina Immediato
ibm-object-storage-standard-interregionale-rclone-retain Standard Interregionale rclone Conserva Immediato
ibm-object-storage-standard-cross-region-s3fs Standard Interregionale s3fs Elimina Immediato
ibm-object-storage-standard-cross-region-s3fs-retain Standard Interregionale s3fs Conserva Immediato
ibm-object-storage-standard-rclone Standard Regionale rclone Elimina Immediato
ibm-object-storage-standard-rclone-retain Standard Regionale rclone Conserva Immediato
ibm-object-storage-standard-s3fs Standard Regionale s3fs Elimina Immediato
ibm-object-storage-standard-s3fs-retain Standard Regionale s3fs Conserva Immediato

Per esaminare la configurazione dettagliata dei bucket per una classe di archiviazione, eseguire oc describe storageclass <storageclass_name> o oc describe storageclass <storageclass_name>.

Parametri classe di storage

Tutte le classi di archiviazione aggiuntive al cluster includono i seguenti parametri fondamentali.

Parametri fondamentali per le classi di archiviazione aggiuntive al cluster COS
Parametro Descrizione
client Identifica il tipo di client utilizzato dal driver. Le classi di archiviazione aggiuntive utilizzano awss3.
cosEndpoint Definisce l'endpoint IBM Cloud Object Storage per la regione del bucket.
csi.storage.k8s.io/node-publish-secret-name Fa riferimento al nome del segreto che contiene le credenziali di IBM Cloud Object Storage.
csi.storage.k8s.io/node-publish-secret-namespace Fa riferimento allo spazio dei nomi del segreto che contiene le credenziali di IBM Cloud Object Storage.
locationConstraint Definisce la classe e la regione del secchio, ad esempio au-syd-smart o au-syd-standard.
mounter Specifica se la classe di archiviazione utilizza il mounter s3fs o rclone.

Opzioni di montaggio predefinite della classe di archiviazione s3fs

Le classi di archiviazione di s3fs utilizzano le seguenti opzioni di montaggio predefinite.

Opzioni di montaggio predefinite per le classi di archiviazione “ s3fs ” del componente aggiuntivo COS
Opzione di montaggio Descrizione
multipart_size=52 Imposta la dimensione della parte, in MB, per ogni richiesta multipart.
multireq_max=20 Imposta il numero massimo di richieste parallele per gli oggetti dell'elenco.
max_dirty_data=5120 Esegue il flussaggio dei dati sporchi su S3 dopo un numero specificato di MB scritti. Il valore minimo supportato è 50. Un valore di -1 disabilita questo comportamento.
parallel_count=20 Imposta il numero di richieste parallele per il caricamento di oggetti di grandi dimensioni. s3fs carica oggetti di grandi dimensioni utilizzando richieste multipart e invia le richieste in parallelo.
max_stat_cache_size=100000 Imposta il numero massimo di voci nella cache delle statistiche e nella cache dei collegamenti simbolici.
retries=5 Imposta il numero di volte in cui riprovare una transazione S3 fallita.
kernel_cache Abilita la cache del buffer del kernel per il punto di montaggio del volume. I dati letti da IBM Cloud Object Storage vengono memorizzati nella cache del kernel per garantire un accesso più rapido alla lettura. La cache del kernel è abilitata per le classi di archiviazione standard e smart s3fs.
max_background=1000 Imposta il numero massimo di richieste FUSE in background che possono essere messe in coda prima che il kernel blocchi le nuove richieste. Aumentando questo valore si migliora la produttività per i carichi di lavoro con un elevato livello di concorrenza.

Opzioni di montaggio predefinite della classe di archiviazione rclone

Le classi di archiviazione di rclone utilizzano le seguenti opzioni di montaggio predefinite.

Opzioni di montaggio predefinite per le classi di archiviazione rclone dell'add-on COS
Opzione di montaggio Descrizione
acl=private Assicura che gli oggetti caricati non siano accessibili pubblicamente.
bucket_acl=private Imposta l'ACL predefinita per i bucket creati da rclone a private.
upload_cutoff=100Mi Carica file di dimensioni superiori a 100 MiB utilizzando il caricamento multipart. I file più piccoli vengono caricati in un'unica richiesta.
chunk_size=16Mi Imposta la dimensione di ciascuna parte in un caricamento multipart.
max_upload_parts=1000 Imposta il numero massimo di parti per il caricamento multipart e, indirettamente, limita la dimensione massima del file supportata con il sito chunk_size. Con chunk_size=16Mi, la dimensione massima del file è 16 GiB.
upload_concurrency=8 Imposta il numero di parti caricate in parallelo durante un caricamento multipart.
multi_thread_streams=8 Imposta il numero di thread utilizzati per scaricare un singolo oggetto quando si utilizza il download multithread.
disable_checksum=true Disattiva il calcolo del checksum “ MD5 ” durante il caricamento. Migliora le prestazioni con file di grandi dimensioni, nei quali il calcolo del checksum comporta un sovraccarico significativo.