Instalación del complemento de clúster IBM Cloud Object Storage

Puedes activar el complemento « IBM Cloud Object Storage » desde la consola de IBM Cloud o desde la CLI.

Requisitos previos:

  • El complemento IBM Cloud Object Storage requiere al menos 0.3 vCPU y 360 MB de memoria.
  • El complemento está disponible para Red Hat CoreOS (RHCOS) y Ubuntu worker nodes. Si su clúster tiene nodos RHEL y RHCOS, el complemento se implementa sólo en los nodos RHCOS.
  • Configure una instancia de IBM Cloud Object Storage.
  • Opcional Si planea utilizar el versionado de cubos, sus credenciales de servicio deben tener permisos de Administrador o Escritor para activar o desactivar el versionado de cubos en el cubo. Para obtener más información, consulta Introducción al control de versiones.

Comprender la creación y eliminación de cubos

  • Puede utilizar un cubo existente especificando el nombre del cubo en su PVC.
  • Si proporciona un nombre de cubo y ese cubo no existe, se creará un cubo con ese nombre.
  • Si no se especifica un nombre de bucket, rclone-<timestamp>-xxx se creará un bucket con la convención de nomenclatura s3fs-<timestamp>-xxx o, en función del tipo de montador.
  • Los cubos se eliminan en función de la política de recuperación definida en la clase de almacenamiento.
    • Si se establece reclaimPolicy: Delete, el cubo se elimina cuando se elimina el PVC.
    • Si se establece reclaimPolicy: Retain, el bucket se conserva incluso después de eliminar el PVC.

Activación del complemento IBM Cloud Object Storage desde la consola

  1. En el panel de control de clústeres de Red Hat OpenShift on IBM Cloud, selecciona el clúster en el que deseas activar el complemento.
  2. En la sección «Complementos», busca el Cloud Object Storage complemento y haz clic en « Instalar ».
  3. En el panel « Instalar complemento: Cloud Object Storage », selecciona una versión en el menú desplegable « Versión ».
  4. Opcional: Configura los siguientes parámetros.
maxVolumesPerNode
Establece el número máximo de volúmenes de « IBM Cloud Object Storage » que se pueden montar en un único nodo. El valor por defecto es « 0 », lo que significa que no se aplica ningún límite.
restrictNodeServerScheduling
Establece el valor en « true » para restringir que los pods de nodeserver se ejecuten únicamente en nodos etiquetados como « cos.csi.ibm.io/csi-node=true ». El valor por defecto es « false », lo que significa que los pods de nodeserver se programan en todos los nodos.
  1. Pulse Instalar. El complemento puede tardar algunos minutos en desplegarse y estar listo para su uso.
  2. Verifique la instalación. En la sección «Complementos», comprueba que el Cloud Object Storage complemento muestra un estado de salud « Normal ».

Activación del complemento IBM Cloud Object Storage desde la CLI

Antes de empezar: acceda al clúster de Red Hat OpenShift.

  1. Actualiza el complemento container-service a la versión más reciente.
    ibmcloud update && ibmcloud plugin update container-service
    
  2. Enumera los complementos y busca la versión que deseas instalar.
    ibmcloud oc cluster addon versions
    
  3. Revise las opciones del complemento.
    ibmcloud oc cluster addon options --addon ibm-object-csi-driver [--version VERSION]
    
  4. Instala el complemento.
    ibmcloud oc cluster addon enable ibm-object-csi-driver --cluster CLUSTER [--version VERSION]
    
  5. Verifique la instalación.
    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. Enumera las clases de almacenamiento disponibles. El controlador es compatible con clases de almacenamiento tanto regionales como interregionales para los montadores s3fs y 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
    

Restricción de la programación de pods de nodoserver

De forma predeterminada, los pods del servidor de nodos del controlador COS CSI se programan en todos los nodos del clúster. Puedes utilizar el parámetro « restrictNodeServerScheduling » para restringir la programación de los pods de nodeserver únicamente a los nodos etiquetados con « cos.csi.ibm.io/csi-node=true ».

Puedes configurar « restrictNodeServerScheduling » al habilitar el complemento, o actualizarlo más adelante aplicando el parche « ConfigMap ».

  • Para establecer « restrictNodeServerScheduling » al habilitar el complemento, incluye el indicador « --param » en el comando de habilitación.
    ibmcloud oc cluster addon enable ibm-object-csi-driver --cluster CLUSTER --param "restrictNodeServerScheduling=true"
    
  • Para actualizar « restrictNodeServerScheduling » una vez que el complemento ya esté activado, sigue estos pasos.
  1. Enumera los nodos de tu clúster y determina dónde quieres que se ejecuten los pods del controlador COS.
    oc get nodes
    
    Salida de ejemplo
    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. Comprueba que los pods de nodeserver estén actualmente en ejecución en todos los nodos.
    oc get pods -n ibm-object-csi-operator -l app.kubernetes.io/component=node -o wide
    
    Salida de ejemplo
    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. Etiqueta los nodos en los que quieras que se programen los pods de nodeserver.
    oc label nodes NODE-NAME-1 NODE-NAME-2 cos.csi.ibm.io/csi-node=true
    
    Salida de ejemplo
    node/10.241.0.11 labeled
    node/10.241.0.12 labeled
    
  4. Activa la restricción actualizando el archivo « ConfigMap ».
    oc patch cm managed-addon-ibm-object-csi-driver -n kube-system \
      --type merge -p '{"data":{"restrictNodeServerScheduling":"true"}}'
    
    Salida de ejemplo
    configmap/managed-addon-ibm-object-csi-driver patched
    
  5. Comprueba que los pods de nodeserver solo se programen en nodos etiquetados.
    oc get pods -n ibm-object-csi-operator -l app.kubernetes.io/component=node -o wide
    
    Salida de ejemplo
    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 opciones
Valor Comportamiento
restrictNodeServerScheduling: "false" (Valor predeterminado) Los pods de Nodeserver se programan en todos los nodos.
restrictNodeServerScheduling: "true" Los pods de Nodeserver solo se programan en nodos etiquetados como « cos.csi.ibm.io/csi-node=true ».

Configuración de los volúmenes máximos por nodo

Por defecto, el controlador COS CSI no limita el número de volúmenes que se pueden montar en un único nodo. Puedes utilizar el parámetro « maxVolumesPerNode » para establecer el número máximo de volúmenes por nodo.

Puedes configurar « maxVolumesPerNode » al habilitar el complemento, o actualizarlo más adelante aplicando el parche « ConfigMap ».

  • Para establecer « maxVolumesPerNode » al habilitar el complemento, incluye el indicador « --param » en el comando de habilitación.
    ibmcloud oc cluster addon enable ibm-object-csi-driver --cluster CLUSTER --param "maxVolumesPerNode=VALUE"
    
  • Para actualizar maxVolumesPerNode una vez que el complemento ya esté activado, aplica el parche al complemento gestionado ConfigMap.
    oc patch cm managed-addon-ibm-object-csi-driver -n kube-system --type merge -p '{"data":{"maxVolumesPerNode":"VALUE"}}'
    
    Salida de ejemplo
    configmap/managed-addon-ibm-object-csi-driver patched
    
maxVolumesPerNode opciones
Valor Comportamiento
maxVolumesPerNode: "0" (Valor predeterminado) No hay límite en el número de volúmenes que se pueden montar por nodo.
maxVolumesPerNode: "VALUE" Limita el número de volúmenes que se pueden montar en un único nodo al valor especificado.

Implementación de una aplicación que utiliza IBM Cloud Object Storage

Crea un secreto de Kubernetes que contenga tus credenciales de COS.

  1. Acceda al clúster de Red Hat OpenShift.

  2. Guarde la siguiente configuración como un archivo llamado secret.yaml. Proporcione credenciales de IAM o credenciales de HMAC, pero no ambas.

    • Para las credenciales de IAM, utiliza apiKey y serviceId de tu instancia del servicio IBM Cloud Object Storage.
    • Para las credenciales HMAC, utiliza accessKey y secretKey de tu instancia del servicio 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
    Requerido para la autenticación IAM. Introduce la clave API de IAM de base64-encoded IBM Cloud para tu instancia del servicio IBM Cloud Object Storage. Puede encontrar la clave de API en las credenciales de su servicio, en la sección apikey. Indica apiKey + **o **serviceId accessKey + secretKey, pero no ambos.
    serviceId
    Requerido para la autenticación IAM. Introduce el ID de instancia del recurso base64-encoded correspondiente a tu instancia del servicio IBM Cloud Object Storage. Puede encontrar este valor en las credenciales de su servicio, en la sección resource_instance_id.
    accessKey
    Requerido para la autenticación HMAC. Introduce el ID de la clave de acceso HMAC de base64-encoded. Puede encontrar este valor en las credenciales de su servicio, en la sección cos_hmac_keys.access_key_id. Indica accessKey + **o **secretKey apiKey + serviceId, pero no ambos.
    secretKey
    Requerido para la autenticación HMAC. Introduce la clave de acceso secreta HMAC de base64-encoded. Puede encontrar este valor en las credenciales de su servicio, en la sección cos_hmac_keys.secret_access_key.
    kpRootKeyCRN
    Opcional. Introduce el CRN de la clave raíz base64-encoded de tu instancia de Key Protect. Para recuperar el CRN, ve a tu instancia de KMS en la consola de IBM Cloud, abre Claves, haz clic en la clave raíz y copia el CRN de los detalles de la clave. Esto solo se aplica a los nuevos depósitos; no se puede añadir cifrado a un depósito ya existente.
    iamEndpoint
    Opcional. Introduce el punto final del token IAM de IBM Cloud URL como texto sin formato. De forma predeterminada, el controlador utiliza https://private.iam.cloud.ibm.com para los clústeres VPC y https://iam.cloud.ibm.com para los clústeres Classic. Modifica este valor solo si necesitas utilizar un punto final de IAM diferente.
    cosEndpoint
    Opcional. Introduce el punto final de IBM Cloud Object Storage ( URL ) como texto sin formato, por ejemplo https://s3.us.cloud-object-storage.appdomain.cloud. Cuando se especifica, este valor anula el establecido cosEndpoint en la clase de almacenamiento. Utiliza este campo si tu bucket se encuentra en una región diferente o utiliza un punto de conexión directo o privado. Para consultar una lista de los puntos de conexión disponibles, véase Puntos de conexión de IBM Cloud Object Storage.
    locationConstraint
    Opcional. Introduce la cadena de restricción de ubicación como texto sin formato, por ejemplo, o us-standard us-geo-smart. Cuando se especifica, este valor anula el establecido locationConstraint en la clase de almacenamiento. La restricción de ubicación determina la clase del depósito y la región en la que se almacena.
    objectPath
    Opcional. Introduce la ruta a un subdirectorio dentro del bucket que se va a montar como texto sin formato, por ejemplo data. Utiliza esta opción para conceder a una aplicación acceso únicamente a una carpeta específica dentro de un depósito compartido, en lugar de a toda la raíz del depósito.
    resourceConfigApiKey
    Obligatorio cuando quotaLimit está configurado en "true". Introduce el mismo valor apikey de base64-encoded de tus credenciales del servicio IBM Cloud Object Storage que has utilizado en el campo apiKey anterior.
    bucketName
    Opcional. Introduce el nombre de un depósito existente que quieras utilizar o el nombre de un nuevo depósito que quieras crear. Si el nombre del bucket que indiques no existe, el controlador lo creará. Si deja este campo en blanco, se creará automáticamente un bucket con la convención de nomenclatura s3fs-<timestamp>-xxx o rclone-<timestamp>-xxx según el tipo de montador. El nombre del bucket debe ser único a nivel global en IBM Cloud Object Storage.
    bucketVersioning
    Opcional. Controla el control de versiones de los buckets. Establece en "true" para activar el control de versiones, o en "false" para desactivarlo en un depósito en el que ya esté activado. Debe ser un valor de cadena. Cuando se habilita el control de versiones, IBM Cloud Object Storage conserva varias versiones de cada objeto del depósito, lo que protege contra eliminaciones y sobrescrituras accidentales. Ten en cuenta que las credenciales del servicio deben tener permisos de Manager o Writer para habilitar o deshabilitar el control de versiones de los buckets. Para obtener más información, consulta Introducción al control de versiones.
    quotaLimit
    Opcional. Establece en para "true" aplicar una cuota de almacenamiento estricta al depósito. Cuando está habilitada, la cuota del depósito se establece igual al tamaño storage solicitado en el PVC. Si se alcanza el límite, las operaciones de escritura en el depósito fallarán hasta que se eliminen datos. Es necesario resourceConfigApiKey configurarlo. El valor predeterminado es "false". Debe ser un valor de cadena.
    mountOptions
    Puedes personalizar las opciones de montaje para s3fs o rclone editando mountOptions en tu secreto. Para ejecutarlo como usuario no root, descomenta y configura uid=<value> para que coincida con el campo runAsUser en el de securityContext la especificación de tu pod. Alinea las opciones que especifiques con la clase de almacenamiento que utiliza tu PVC. Para consultar los valores predeterminados de una clase de almacenamiento, ejecute oc describe storageclass <storageclass_name> o oc describe storageclass <storageclass_name>. Para obtener más información, consulta el s3fs opciones de montaje y el rclone opciones de montaje.

    Actualmente, el complemento está habilitado para admitir un conjunto fijo de opciones de montaje con la validación adecuada para cada opción de montaje. Si desea utilizar otras opciones de montaje que no figuran en la lista de validación, póngase en contacto con el servicio de asistencia para activarlas.

  3. Codifica todos los parámetros de datos secretos en base64.

    echo -n "<value>" | base64
    
  4. Actualice secret.yaml con los valores codificados en base64.

  5. Cree el secreto:

    oc apply -f secret.yaml
    

Crear un PVC

Puedes utilizar un único secreto para varios PVC o un secreto por PVC.

Puedes gestionar este comportamiento utilizando las siguientes anotaciones en el PVC yaml. Estas anotaciones ayudan al conductor a asignar el PVC al secreto correcto.

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

Asegúrate de que tu «secret», «PVC» y «pods» estén todos en el mismo espacio de nombres

Ejemplo PVC para un 1-to-1 secreto a PVC mapeo dando a su PVC el mismo nombre que el secreto que creó anteriormente.

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.

Ejemplo de PVC para utilizar 1 secreto a muchos PVC utilizando anotaciones para especificar el secreto.

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. Elija uno de los ejemplos anteriores y personalícelo para su caso de uso. Para obtener una lista de las clases de almacenamiento, consulte la referencia de clases de almacenamiento.

  2. Cree la PVC.

    oc apply -f pvc.yaml
    

Crear un despliegue

  1. Guarda la siguiente configuración en un archivo llamado 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. Cree el despliegue.

    oc apply -f dep.yaml
    

Desactivación del complemento IBM Cloud Object Storage

Los secretos, PVCs y despliegues existentes no se eliminan al desactivar el complemento ni con las actualizaciones de parches. No hay interrupciones en las cargas de trabajo existentes de los clientes.

  1. Ejecuta el siguiente comando para desactivar el complemento.
     ibmcloud oc cluster addon disable ibm-object-csi-driver --cluster CLUSTER
    
    Salida de ejemplo
    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. Comprueba que se haya eliminado el complemento.
    ibmcloud oc cluster addon ls --cluster CLUSTER
    

Migración del complemento Helm al complemento clúster

  1. Acceda al clúster de Red Hat OpenShift.

  2. Obtenga los detalles de sus PVC y seleccione uno para migrar.

    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
    

    Salida de ejemplo

    PVC: pvc-test in Namespace: default uses ibm.io/ibmc-s3fs storage provisioner
    
  3. Describe el PVC y obtén el nombre del cubo.

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

    Salida de ejemplo

    ibm.io/bucket: test-s3
    
  4. Vuelve a crear tu secreto con el nombre del cubo incluido.

    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. Busque la clase de almacenamiento que se utilizó en su PVC.

    oc describe pvc <pvc_name> | grep StorageClass:
    

    Ejemplo de comando para un PVC llamado test-s3.

    oc describe pvc test-s3 | grep StorageClass:
    

    Salida de ejemplo

    StorageClass:  ibmc-s3fs-smart-perf-regional
    
  6. Revise las nuevas clases de almacenamiento disponibles con el complemento y seleccione una clase de sustitución.

    • Si utilizó una clase flex, elija una de las nuevas clases smart.
    • Si utilizó una clase standard, elija una de las nuevas clases standard.
    • Las clases cold y vault ya no están disponibles con el complemento; elija en su lugar una clase smart o standard.
  7. Revise los detalles de su PVC.

    oc describe pvc test-s3
    

    Salida de ejemplo

    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. Crea un PVC de sustitución que utilice una nueva clase de almacenamiento y haga referencia al secreto que creaste anteriormente.

    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. Verifique que el PVC es Bound.

    oc get pvc
    
  10. Consulta los detalles de tu aplicación.

    oc get pods
    
  11. Reduzca su aplicación a cero.

    kubectl scale deployment --replicas=0 my-app
    
  12. Cree una implantación de sustitución que haga referencia a la PVC creada en el paso anterior.

  13. Una vez que se haya ejecutado la nueva implantación, puede eliminar la antigua.

  14. Repite estos pasos para cada PVC que desees migrar.

IBM Cloud Object Storage clases de almacenamiento de clústeres adicionales

El complemento de clúster IBM Cloud Object Storage proporciona clases de almacenamiento para los montadores s3fs y rclone. Elija una clase de almacenamiento que se ajuste a sus requisitos de acceso a datos. La clase de almacenamiento determina la clase de bucket, la política de recuperación y el comportamiento de montaje predeterminado para el bucket que se crea para su carga de trabajo.

Standard
Úselos para datos de uso frecuente a los que se accede con asiduidad. Las apps web o móviles son ejemplos habituales de este caso.
Caja fuerte
Úselos para cargas de trabajo o datos poco activos a los que se accede con poca frecuencia, por ejemplo, una vez al mes o menos. El archivado, la retención de datos a corto plazo, la conservación de activos digitales, la sustitución de cinta y la recuperación tras desastre son ejemplos habituales de este caso.
Frío
Se utiliza para datos fríos a los que se accede con poca frecuencia (cada 90 días o menos) o para datos inactivos. Los archivados, las copias de seguridad a largo plazo, los datos históricos que se conservan por motivos de conformidad o las cargas de trabajo y apps a las que se accede con muy poca frecuencia son ejemplos habituales de este caso.
Inteligente
Se utiliza para cargas de trabajo y datos que no siguen un patrón de uso específico, o cuando el patrón de uso es difícil de predecir.

Decida el nivel de resiliencia de los datos que se almacenan en el grupo. Para obtener más información, consulte Regiones y puntos finales.

varias regiones
Tus datos se almacenan en tres regiones dentro de una misma zona geográfica para garantizar la máxima disponibilidad. Si tiene cargas de trabajo que se distribuyen entre regiones, las solicitudes se direccionan al punto final regional más próximo. El punto final IBM Cloud Object Storage para la geolocalización se configura automáticamente en función de la ubicación de tu clúster. Por ejemplo, si su clúster se encuentra en US South, sus clases de almacenamiento estarán configuradas para utilizar el punto US GEO final de sus buckets. Elige una clase de almacenamiento que incluya en cross-region su nombre.
Regional
Tus datos se replican en varias zonas dentro de una misma región. Si tiene cargas de trabajo que se encuentran en la misma región, observará una menor latencia y un mejor rendimiento que en una configuración entre regiones. El punto de conexión regional se configura automáticamente en función de la ubicación de tu clúster. Por ejemplo, si tu clúster se encuentra en US South, tus clases de almacenamiento estarán configuradas para utilizar US South como punto final regional para tus buckets. Elige una clase de almacenamiento que no incluya en cross-region su nombre.
Clases de almacenamiento complementarias del clúster COS
Nombre Clase de grupo Resiliencia Montador Política de reclamación Modalidad de enlace
ibm-almacenamiento-de-objetos-smart-cross-region-rclone Inteligente Interregional rclone Suprimir Inmediato
ibm-almacenamiento-de-objetos-smart-cross-region-rclone-retain Inteligente Interregional rclone Retener Inmediato
ibm-object-storage-smart-cross-region-s3fs Inteligente Interregional s3fs Suprimir Inmediato
ibm-object-storage-smart-cross-region-s3fs-retain Inteligente Interregional s3fs Retener Inmediato
ibm-almacenamiento-de-objetos-smart-rclone Inteligente Regional rclone Suprimir Inmediato
ibm-almacenamiento-de-objetos-smart-rclone-retain Inteligente Regional rclone Retener Inmediato
ibm-object-storage-smart-s3fs Inteligente Regional s3fs Suprimir Inmediato
ibm-object-storage-smart-s3fs-retain Inteligente Regional s3fs Retener Inmediato
ibm-object-storage-standard-cross-region-rclone Standard Interregional rclone Suprimir Inmediato
ibm-almacenamiento-de-objetos-estándar-entre-regiones-rclone-retain Standard Interregional rclone Retener Inmediato
ibm-object-storage-standard-cross-region-s3fs Standard Interregional s3fs Suprimir Inmediato
ibm-object-storage-standard-cross-region-s3fs-retain Standard Interregional s3fs Retener Inmediato
ibm-almacenamiento-de-objetos-estándar-rclone Standard Regional rclone Suprimir Inmediato
ibm-object-storage-standard-rclone-retain Standard Regional rclone Retener Inmediato
ibm-object-storage-standard-s3fs Standard Regional s3fs Suprimir Inmediato
ibm-object-storage-standard-s3fs-retain Standard Regional s3fs Retener Inmediato

Para revisar la configuración detallada de los cubos de una clase de almacenamiento, ejecute oc describe storageclass <storageclass_name> o oc describe storageclass <storageclass_name>.

Parámetros de clase de almacenamiento

Todas las clases de almacenamiento adicionales del clúster incluyen los siguientes parámetros básicos.

Parámetros básicos para las clases de almacenamiento adicionales del clúster COS
Parámetro Descripción
client Identifica el tipo de cliente que utiliza el controlador. Las clases de almacenamiento adicionales utilizan awss3.
cosEndpoint Define el punto final de IBM Cloud Object Storage para la región del cubo.
csi.storage.k8s.io/node-publish-secret-name Hace referencia al nombre del secreto que contiene sus credenciales IBM Cloud Object Storage.
csi.storage.k8s.io/node-publish-secret-namespace Hace referencia al espacio de nombres del secreto que contiene sus credenciales IBM Cloud Object Storage.
locationConstraint Define la clase de cubo y la región, como au-syd-smart o au-syd-standard.
mounter Especifica si la clase de almacenamiento utiliza el montador s3fs o rclone.

Opciones de montaje por defecto de la clase de almacenamiento s3fs

Las clases de almacenamiento s3fs utilizan las siguientes opciones de montaje por defecto.

Opciones de montaje predeterminadas para las clases de almacenamiento del complemento COS « s3fs »
Opción de montaje Descripción
multipart_size=52 Establece el tamaño de la parte, en MB, para cada solicitud multiparte.
multireq_max=20 Establece el número máximo de peticiones paralelas para listar objetos.
max_dirty_data=5120 Descarga los datos sucios en S3 después de escribir un número especificado de MB. El valor mínimo admitido es 50. Un valor de -1 desactiva este comportamiento.
parallel_count=20 Establece el número de peticiones paralelas para subir objetos grandes. s3fs sube objetos grandes utilizando peticiones multiparte y envía peticiones en paralelo.
max_stat_cache_size=100000 Establece el número máximo de entradas en la caché de estadísticas y la caché de enlaces simbólicos.
retries=5 Establece el número de veces que se reintentará una transacción fallida en S3.
kernel_cache Habilita la caché del búfer del núcleo para el punto de montaje del volumen. Los datos que se leen de IBM Cloud Object Storage se almacenan en la caché del núcleo para facilitar un acceso de lectura más rápido. La caché del kernel está activada para las clases de almacenamiento estándar e inteligente s3fs.
max_background=1000 Establece el número máximo de solicitudes FUSE en segundo plano que se pueden poner en cola antes de que el núcleo bloquee nuevas solicitudes. Al aumentar este valor, se mejora el rendimiento de las cargas de trabajo con alta concurrencia.

Opciones de montaje por defecto de la clase de almacenamiento rclone

Las clases de almacenamiento rclone utilizan las siguientes opciones de montaje por defecto.

Opciones de montaje predeterminadas para las clases de almacenamiento del complemento rclone de COS
Opción de montaje Descripción
acl=private Garantiza que los objetos cargados no sean de acceso público.
bucket_acl=private Establece la ACL predeterminada para los buckets que crea rclone en private.
upload_cutoff=100Mi Sube archivos mayores que 100 MiB utilizando la subida multiparte. Los archivos más pequeños se cargan en una sola solicitud.
chunk_size=16Mi Establece el tamaño de cada parte en una carga multiparte.
max_upload_parts=1000 Establece el número máximo de partes por carga multiparte y limita indirectamente el tamaño máximo de archivo admitido con el chunk_size configurado. Con chunk_size=16Mi, el tamaño máximo de archivo es 16 GiB.
upload_concurrency=8 Establece el número de partes que se cargan en paralelo durante una carga multiparte.
multi_thread_streams=8 Establece el número de subprocesos que se utilizan para descargar un único objeto cuando se emplea la descarga multihilo.
disable_checksum=true Desactiva el cálculo de la suma de comprobación de MD5 al realizar la carga. Mejora el rendimiento con archivos de gran tamaño en los que el cálculo de la suma de comprobación supone una sobrecarga significativa.