IBM Cloud Docs
Configuración de Block Storage for Classic

Configuración de Block Storage for Classic

IBM Cloud Block Storage for Classic es un almacenamiento iSCSI persistente y de alto rendimiento que puede añadir a las apps mediante volúmenes persistentes (PV) de Kubernetes. Puede elegir los niveles de almacenamiento predefinidos con tamaños de GB e IOPS que cumplan los requisitos de sus cargas de trabajo. Para averiguar si IBM Cloud Block Storage for Classic es la opción de almacenamiento correcta para usted, consulte Elección de una solución de almacenamiento.

Tenga en cuenta las siguientes consideraciones cuando use un plugin de IBM Cloud Block Storage for Classic.

El plugin de IBM Cloud Block Storage for Classic solo está disponible para los clústeres de Red Hat OpenShift on IBM Cloud estándares suministrados en la infraestructura clásica.

Block Storage for Classic instancias son específicas de una región multizona de un solo campus. Si tiene un clúster multizona, tenga en cuenta las opciones de almacenamiento persistente multizona.

Infraestructura clásica

Los pasos de esta página se aplican únicamente a clústeres clásicos. En los clústeres VPC, el complemento de clúster Block Storage for VPC está instalado por defecto. Para obtener más información, consulte Configuración de Block Storage for VPC.

Inicio rápido para IBM Cloud Block Storage for Classic

En esta guía de inicio rápido, se crea un volumen 24Gi silver tier Block Storage for Classic en el clúster mediante la creación de un PVC para aprovisionar dinámicamente el volumen. A continuación, se crea un despliegue de app que monta la PVC.

¿Es la primera vez que utiliza Block Storage for Classic en el clúster? Vuelva aquí después de haber revisado las configuraciones de almacenamiento.

  1. Guarde la siguiente configuración de reclamación de volumen persistente (PVC) en un archivo denominado pvc.yaml.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: block-storage-pvc
      labels:
        billingType: "hourly"
        region: us-east
        zone: wdc07
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 45Gi
      storageClassName: ibmc-block-silver
    
  2. Aplique la configuración al clúster para crear la PVC.

    oc apply -f pvc.yaml
    
  3. Espere hasta que la PVC esté en estado Bound. Puede comprobar el estado ejecutando el mandato siguiente.

    oc get pvc
    
  4. Una vez que se haya Bound la PVC, cree un despliegue de aplicaciones que utilice la PVC. Guarde la siguiente configuración de despliegue en un archivo denominado deployment.yaml.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-deployment
      labels:
        app: my-app
    spec:
      selector:
        matchLabels:
          app: my-app
      template:
        metadata:
          labels:
            app: my-app
        spec:
          containers:
          - image: nginx # Use the nginx image, or your own containerized app image.
            name: my-container
            command: ["/bin/sh"]
            args: ["-c", "while true; do date \"+%Y-%m-%d %H:%M:%S\"; sleep 3600; done"] # This app prints the timestamp, then sleeps.
            workingDir: /home
            imagePullPolicy: Always
            ports:
              - containerPort: 80
            volumeMounts:
            - name: my-volume
              mountPath: /mount-path
          volumes:
          - name: my-volume
            persistentVolumeClaim:
              claimName: block-storage-pvc
    
  5. Cree el despliegue en el clúster.

    oc apply -f deployment.yaml
    
  6. Espere hasta que el despliegue esté Ready. Compruebe el estado del despliegue ejecutando el mandato siguiente.

    oc get deployments
    

    Salida de ejemplo

    NAME            READY   UP-TO-DATE   AVAILABLE   AGE
    my-deployment   1/1     1            1           3m19s
    
  7. Cree una lista de los pods y verifique que el pod my-deployment esté en ejecución.

    oc get pods
    

    Salida de ejemplo

    NAME                            READY   STATUS    RESTARTS   AGE
    my-deployment-ccdf87dfb-vzn95   1/1     Running   0          5m27s
    
  8. Obtenga los registros de pod para verificar que se ha escrito la indicación de fecha y hora.

    oc logs
    

    Salida de ejemplo

    2022-01-21 14:18:59
    

Ha creado correctamente un despliegue que utiliza Block Storage for Classic. Para obtener más información, consulte los siguientes enlaces.

Cómo decidir la configuración del almacenamiento en bloque

Red Hat OpenShift on IBM Cloud proporciona clases de almacenamiento predefinidas para el almacenamiento en bloque que puede utilizar para suministrar almacenamiento en bloque con una configuración específica.

Cada clase de almacenamiento especifica el tipo de almacenamiento en bloque que suministra, incluidos tamaño disponible, IOPS, sistema de archivos y política de retención.

Asegúrese de elegir la configuración de almacenamiento cuidadosamente para tener suficiente capacidad para almacenar los datos. Después de suministrar un tipo específico de almacenamiento utilizando una clase de almacenamiento, no puede cambiar el tipo ni la política de retención del dispositivo de almacenamiento. No obstante, puede cambiar el tamaño y las IOPS si desea aumentar el rendimiento y la capacidad de almacenamiento. Para cambiar el tipo y la política de retención de su almacenamiento, debe crear una nueva instancia de almacenamiento y copiar los datos de la instancia de almacenamiento antigua a la nueva.

  1. Obtenga una lista de las clases de almacenamiento disponibles en IBM Cloud® Kubernetes Service.

    oc get sc | grep block
    

    Salida de ejemplo

    ibmc-block-bronze                      ibm.io/ibmc-block   Delete          Immediate           true                   148m
    ibmc-block-custom                      ibm.io/ibmc-block   Delete          Immediate           true                   148m
    ibmc-block-gold                        ibm.io/ibmc-block   Delete          Immediate           true                   148m
    ibmc-block-retain-bronze               ibm.io/ibmc-block   Retain          Immediate           true                   148m
    ibmc-block-retain-custom               ibm.io/ibmc-block   Retain          Immediate           true                   148m
    ibmc-block-retain-gold                 ibm.io/ibmc-block   Retain          Immediate           true                   148m
    ibmc-block-retain-silver               ibm.io/ibmc-block   Retain          Immediate           true                   148m
    ibmc-block-silver                      ibm.io/ibmc-block   Delete          Immediate           true                   148m
    
  2. Revise la configuración de una clase de almacenamiento.

    oc describe storageclass STORAGECLASS
    

    Para obtener más información sobre cada clase de almacenamiento, consulte la referencia de clases de almacenamiento. Si no encuentra lo que busca, considere la posibilidad de crear su propia clase de almacenamiento personalizada. Para empezar, compruebe los ejemplos de clase de almacenamiento personalizada.

  3. Elija el tipo de almacenamiento en bloque que desea suministrar.

    • Clases de almacenamiento de bronce, plata y oro: estas clases de almacenamiento suministran almacenamiento resistente. Con almacenamiento Endurance, puede elegir el tamaño del almacenamiento en gigabytes según los niveles de IOPS predefinidos.
    • Clase de almacenamiento personalizada: esta clase de almacenamiento suministra almacenamiento de rendimiento. Con el almacenamiento de rendimiento, tiene más control sobre el tamaño del almacenamiento y de IOPS.
  4. Elija el tamaño e IOPS para el almacenamiento en bloque. El tamaño y el número de IOPS definen el número total de IOPS (operaciones de entrada/salida por segundo), lo que sirve como indicador de la rapidez del almacenamiento. Cuantas más IOPS tenga el almacenamiento, más rápido se procesarán las operaciones de entrada y salida.

    • Clases de almacenamiento de bronce, plata y oro: estas clases de almacenamiento se suministran con un número fijo de IOPS por gigabytes y se suministran en discos duros SSD. El número total de IOPS depende del tamaño del almacenamiento que elija. Puede seleccionar cualquier número entero de gigabytes comprendido dentro del rango de tamaño permitido, como por ejemplo 20 Gi, 256 Gi o 11854 Gi. Para determinar el número total de IOPS, debe multiplicar IOPS por el tamaño seleccionado. Por ejemplo, si selecciona un tamaño de almacenamiento en bloque de 1000 Gi en la clase de almacenamiento de plata que se suministra con 4 IOPS por GB, el almacenamiento tendrá un total de 4000 IOPS.

      Tabla de IOPS y rangos de tamaño de clase de almacenamiento por gigabyte
      Clase de almacenamiento IOPS por gigabyte Rango de tamaño en gigabytes
      Bronce 2 IOPS/GB 20-12000 Gi
      Plata 4 IOPS/GB 20-12000 Gi
      Oro 10 IOPS/GB 20-4000 Gi
    • Clase de almacenamiento personalizada: cuando elige esta clase de almacenamiento, tiene más control sobre el tamaño y el número de IOPS que desea. Para el tamaño, puede seleccionar cualquier número entero de gigabytes dentro del rango de tamaño permitido. El tamaño que elija determina el rango de IOPS que tendrá a su disponibilidad. Puede elegir un valor de IOPS que sea múltiplo de 100 dentro del rango especificado. Las IOPS que elige son estáticas y no se escalan con el tamaño del almacenamiento. Por ejemplo, si elige 40 Gi con 100 IOPS, el número total de IOPS seguirá siendo 100. La proporción entre IOPS y gigabytes también determina el tipo de disco duro que se suministra. Por ejemplo, si utiliza 500Gi en 100 IOPS, la proporción de IOPS por gigabyte es de 0,2. Si la proporción es menor o igual a 0,3, el almacenamiento se suministra en discos duros SATA. Si la proporción es mayor que 0,3, el almacenamiento se suministran en los discos duros SSD.

      Table class size ranges and IOPS
      Rango de tamaño en gigabytes Rango de IOPS en múltiplos de 100
      20-39 Gi 100-1000 IOPS
      40-79 Gi 100-2000 IOPS
      80-99 Gi 100-4000 IOPS
      100-499 Gi 100-6000 IOPS
      500-999 Gi 100-10000 IOPS
      1000-1999 Gi 100-20000 IOPS
      2000-2999 Gi 200-40000 IOPS
      3000-3999 Gi 200-48000 IOPS
      4000-7999 Gi 300-48000 IOPS
      8000-9999 Gi 500-48000 IOPS
      10000-12000 Gi 1000-48000 IOPS
  5. Decida si desea conservar los datos después de que se suprima el clúster o la reclamación de volumen persistente (PVC).

    • Si desea conservar los datos, seleccione la clase de almacenamiento retain. Cuando se suprime la PVC, únicamente ésta se suprime. El PV, el dispositivo de almacenamiento físico de la cuenta de infraestructura de IBM Cloud y los datos seguirán existiendo. Para reclamar el almacenamiento y volverlo a utilizar en el clúster, debe eliminar el PV y seguir los pasos de utilización de almacenamiento en bloque existente.
    • Si desea que el PV, los datos y el dispositivo físico de almacenamiento en bloques se supriman cuando suprima la PVC, elija una clase de almacenamiento sin la opción retain.
  6. Decida si desea que se le facture por horas o por meses. El valor predeterminado es la facturación por horas.

Configuración del cifrado para Block Storage for Classic

Puede configurar el cifrado para Block Storage for Classic utilizando IBM Key Protect.

En el ejemplo siguiente se explica cómo crear un ID de servicio con los roles de acceso necesarios para Key Protect y para el clúster. Las credenciales de este ID de servicio se utilizan para habilitar el cifrado para los volúmenes de Block Storage for Classic.

Puede habilitar el cifrado creando un secreto de Kubernetes que utilice la clave de API personal, siempre que tenga el rol de acceso al servicio de Escritor para la instancia de Key Protect, así como el rol de acceso de la plataforma Visor y el rol de acceso de servicio Escritor para el clúster.

Inicie una sesión en la cuenta. If applicable, target the appropriate resource group. Establezca el contexto para el clúster.

  1. Asegúrese de que ha asignado el rol de acceso a la plataforma Editor y el rol de acceso al servicio Escritor para Key Protect para que pueda crear su propia clave raíz que utiliza para cifrar la instancia de Block Storage for Classic. Puede revisar sus roles de acceso IAM en la consola IAM. Para obtener más información sobre roles de IAM, consulte Acceso de IAM.

  2. Si no tiene ninguna instancia de Key Protect, suministre una.

  3. Cree una clave raíz. De forma predeterminada, la clave raíz se crea sin fecha de caducidad.

  4. Cree un ID de servicio de IAM. Sustituya <service_ID_name> por el nombre que desea asignar a su ID de servicio. Este ID de servicio se utiliza para acceder a la instancia de Key Protect desde el volumen de Block Storage for Classic.

    ibmcloud iam service-id-create <service_ID_name>
    

    Salida de ejemplo

    OK
    Service ID test-id is created successfully
    
    ID            ServiceId-a1a11111-bb11-1111-a11b-1111111a11ba   
    Name          test-id   
    Description      
    CRN           crn:v1:bluemix:public:iam-identity::a/1a1111aa2b11111aaa1a1111aa2aa111::serviceid:ServiceId-a1a11111-bb11-1111-a11b-1111111a11bb   
    Version       1-bb11aa11a0aa1a11a011a1aaaa11a1bb   
    Locked        false
    
  5. Cree una clave de API para el ID de servicio. Sustituya <api-key-name> por un nombre para la clave de API y sustituya <service_ID_name> por el nombre del ID de servicio que ha creado. Asegúrese de guardar la clave de API, ya que no se puede recuperar más tarde. Esta clave de API se almacena en un secreto de Kubernetes en el clúster en un paso posterior.

    ibmcloud iam service-api-key-create <api_key_name> <service_ID_name>
    
  6. Recupera una lista de servicios habilitados por IAM en la cuenta y anote el nombre de la instancia de Key Protect que ha creado.

    ibmcloud resource service-instances
    
  7. Recupere el GUID de la instancia de Key Protect. El ID se utiliza para crear una política de servicio de IAM para el ID de servicio.

    ibmcloud resource service-instance "<instance_name>" | grep GUID
    
  8. Cree una política de servicio de IAM para otorgar su acceso de ID de servicio a su instancia de Key Protect. El mandato siguiente otorga el acceso de Reader de ID de servicio a la instancia de Key Protect. El rol de acceso de Lector es el rol de acceso al servicio mínimo que el ID de servicio debe tener para recuperar las claves de Key Protect. Para obtener más información, consulte Gestión de acceso de usuario para Key Protect.

    ibmcloud iam service-policy-create <service_ID_name> --roles Reader --service-name kms --service-instance <service_instance_GUID>
    
  9. Cree otra política de acceso de servicio de IAM para dar acceso de ID de servicio al clúster. El siguiente mandato otorga el rol de acceso a la plataforma Visor y el rol de acceso al servicio Escritor al ID de servicio para el clúster. Puede recuperar el ID de clúster ejecutando ibmcloud oc cluster get <cluster_name>.

    ibmcloud iam service-policy-create <service_ID_name> --roles Writer,Viewer --service-name containers-kubernetes --service-instance <cluster_ID>
    
  10. Si ya tiene instalado el diagrama de Helm ibmcloud-block-storage-plugin, debe eliminar el diagrama de Helm e instalar una nueva versión.

Si ha instalado el plugin sin utilizar Helm, debe eliminar manualmente el despliegue del plugin de almacenamiento en bloque y todos los recursos asociados antes de instalar una nueva versión.

helm uninstall <name> <namespace>
  1. Instale el diagrama de Helm ibmcloud-block-storage-plugin.
helm install <name> iks-charts/ibmcloud-block-storage-plugin
  1. Cree un espacio de nombres ibm-block-secrets.
oc create ns ibm-block-secrets
  1. Cree un enlace de rol en el espacio de nombres ibm-block-secrets para el plugin de almacenamiento en bloque.
oc create rolebinding ibmcloud-block-storage-plugin-byok --clusterrole=ibmcloud-block-storage-plugin-byok --serviceaccount=kube-system:ibmcloud-block-storage-plugin --group system:nodes --namespace=ibm-block-secrets
  1. Cree un secreto de Kubernetes denominado secret.yaml y que incluya las credenciales para acceder a la clave raíz en la instancia de servicio de Key Protect.

  2. Cree un archivo de configuración para el secreto.

    apiVersion: v1
    kind: Secret
    metadata:
      labels:
        kmsConfig: kpc-secretLabel
      name: <secret_name> # Enter a name for your secret. Example: my_secret
      namespace: <namespace> # Enter the name of the namespace where you want to create the secret. The secret must be in same namespace where your app is deployed. Example: default
    stringData:
    config: |-
        {
            "api_key":"<service_id_api_key>", # Enter the API key for the service ID that you created. Example: "AA1aAAaA1a21AAaA1aAAaAa-AA-1AAaaA1aA1aAaaaAA"
            "iam_endpoint":"https://iam.cloud.ibm.com",
            "key_protect_endpoint":"https://<region>.kms.cloud.ibm.com", # Example: "https://us-east.kms.cloud.ibm.com"
            "root_key_crn":"<rook_key_crn>", # Example: "crn:v1:bluemix:public:kms:<region>:a/1ab011ab2b11111aaa1a1111aa1aa111:11aa111a-1111-11a1-a111-a11a111aa111:key:11a11111-1a1a-111a-111a-11111a1a1aa1",
            "version":""
        }
    type: ibm.io/kms-config
    
    stringData.config.key_protect_endpoint
    Especifique el punto final regional de la instancia de Key Protect. Para ver una lista de puntos finales de Key Protect, consulte Regiones y puntos finales.
    stringData.config.root_key_crn
    Especifique el CRN de la clave raíz que ha creado. Para recuperar el CRN de clave raíz, siga estos pasos.
    1. Vaya a la Lista de recursos en la consola de IBM Cloud.
    2. Pulse Servicios y, a continuación, pulse la instancia de Key Protect.
    3. Busque la clave raíz en el Menú Acciones y, a continuación, pulse Ver CRN.
    4. Pulse el botón Copiar para copiar el CRN.
  3. Cree el secreto en el clúster.

    oc apply -f secret.yaml
    
  4. Verifique que se ha creado el secreto.

    oc get secrets
    
  5. Elija entre las siguientes opciones para crear una instancia Block Storage for Classic que cifre los datos con su clave raíz.

Cifrado de datos de volumen mediante su propia clase de almacenamiento

Puedes desplegar aplicaciones que utilicen volúmenes encriptados creando primero tu propia clase de almacenamiento.

Los siguientes pasos explican cómo crear una clase de almacenamiento cifrada personalizada que puede utilizar para crear varias instancias de almacenamiento en bloque cifradas con la misma configuración. Si desea crear un PVC cifrado utilizando una de las clases de almacenamiento proporcionado por IBM, puede hacerlo haciendo referencia a las credenciales Key Protect directamente en el PVC.

  1. Determine una configuración de almacenamiento.

  2. Cree su propia clase de almacenamiento que proporcione una instancia de almacenamiento de bloques cifrada utilizando como base una de las clases de almacenamiento IBM. Puede recuperar los detalles de una clase de almacenamiento ejecutando oc get sc <storageclass_name> -o yaml. El siguiente ejemplo se basa en la clase de almacenamiento ibmc-block-retain-bronze.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: <name> # Enter the name of the storage class. Example: my_custom_storageclass
    parameters:
      billingType: hourly
      classVersion: "2"
      fsType: ext4
      iopsPerGB: "2"
      sizeRange: '[20-12000]Gi'
      type: Endurance
      encrypted: "true" # Enter "true" to enable encryption.
      encryptionKeySecret: <secret_name> # # #nter the name of the secret that you created earlier.Example: my_secret
      encryptionKeyNamespace: <namespace> # # #nter the namespace where you created your secret. Example: default
    provisioner: ibm.io/ibmc-block
    reclaimPolicy: Delete
    volumeBindingMode: Immediate
    
  3. Cree una clase de almacenamiento en el clúster.

    oc apply -f storageclass.yaml
    
  4. Añade Block Storage for Classic a tu aplicación utilizando tu propia clase de almacenamiento para crear un PVC.

  5. Verifique el cifrado de los volúmenes de Block Storage for Classic.

Cree una PVC que haga referencia a su secreto de Block Storage for Classic

Puede suministrar Block Storage for Classic cifrado creando una PVC que especifique el secreto de Kubernetes que contiene las credenciales de Key Protect.

En los pasos siguientes se muestra cómo puede hacer referencia a las credenciales de Key Protect en la PVC para crear una instancia de Block Storage for Classic cifrada. Para crear varios volúmenes cifrados sin especificar las credenciales de Key Protect en cada PVC, puede crear una clase de almacenamiento cifrada personalizada.

  1. Revise las clases de almacenamiento de Block Storage for Classic para determinar qué clase de almacenamiento se ajusta mejor a los requisitos de su app. Si las clases de almacenamiento proporcionadas no cumplen los requisitos de la aplicación, puede crear su propia clase de almacenamiento personalizada.

  2. Cree un archivo de configuración de PVC con el nombre pvc.yaml y que haga referencia al secreto de Kubernetes en el que ha almacenado las credenciales de servicio de Key Protect. Para crear este secreto, consulte Configuración del cifrado para Block Storage for Classic.

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: <pvc_name> # Enter a name for your PVC.
      annotations:
      volume.beta.kubernetes.io/storage-class: "<storage_class>" # Enter a storage class. To see a list of storageclasses run `kubectl get storageclasses`.
      labels:
        encrypted: "true"
        encryptionKeyNamespace: <namespace> # Enter the namespace where your secret was created.
        encryptionKeySecret: <secret_name> # Enter the name of the secret you created.
    spec:
      accessModes:
        - ReadWriteOnce
        resources:
        requests:
            storage: 20Gi
    
  3. Cree la PVC en el clúster.

    oc apply -f pvc.yaml
    
  4. Compruebe el estado de la PVC.

    oc get pvc
    
  5. Espere a que la PVC se enlace y, a continuación, cree un despliegue que utilice la PVC.

  6. Verifique el cifrado de los volúmenes de Block Storage for Classic.

Verificación del cifrado de los volúmenes de Block Storage for Classic

Puede verificar el cifrado de los volúmenes comprobando la vía de acceso de montaje del volumen.

  1. Inicie una sesión en el pod de app. Sustituya <pod_name> por el nombre del pod que monta el volumen de Block Storage for Classic cifrado.

    oc exec <pod_name> -it bash
    
  2. Liste el sistema de archivos del pod.

    df -h
    
  3. Revise la vía de acceso del sistema de archivos para el volumen de Block Storage for Classic cifrado.

    • Los volúmenes cifrados tienen una estructura de vía de acceso de /dev/mapper/<pvc-ID_encrypted>. En este ejemplo, el volumen cifrado se monta en la vía de acceso del archivo /test en el pod.

      Filesystem                                            Size  Used Avail Use% Mounted on
      overlay                                                98G  8.2G   85G   9% /
      tmpfs                                                  64M     0   64M   0% /dev
      tmpfs                                                 2.0G     0  2.0G   0% /sys/fs/cgroup
      /dev/mapper/pvc-a011a111-1111-1111-111a-aaa1a1111a11_encrypted   20G   45M   20G   1% /test
      
    • Los volúmenes no cifrados tienen una estructura de vía de acceso de dev/mapper/<random_string>.

      Filesystem                                     Size  Used Avail Use% Mounted on
      overlay                                         98G   16G   78G  17% /
      tmpfs                                           64M     0   64M   0% /dev
      tmpfs                                          7.9G     0  7.9G   0% /sys/fs/cgroup
      /dev/mapper/3600a09803830476e733f4e477370716e   24G   45M   24G   1% /test
      

Eliminar el secreto de Kubernetes no revoca el acceso a los datos de volumen. Si ha creado un despliegue solo de pod, debe suprimir el pod. Si ha creado un despliegue, debe suprimir el despliegue.

Adición de almacenamiento en bloques a apps

Cree una reclamación de volumen persistente (PVC) para aprovisionar dinámicamente almacenamiento en bloque para su clúster. El suministro dinámico crea automáticamente el volumen persistente (PV) adecuado y solicita el dispositivo de almacenamiento real en la cuenta de infraestructura de IBM Cloud.

El almacenamiento en bloque se suministra con la modalidad de acceso ReadWriteOnce. Solo puede montarlo en un pod en un nodo trabajador en el clúster al mismo tiempo.

Antes de empezar:

¿Desea desplegar almacenamiento en bloque en un conjunto con estado? Para obtener más información, consulte Uso del almacenamiento por bloques en un conjunto con estado.

Para añadir almacenamiento en bloque:

  1. Cree un archivo de configuración para definir su reclamación de volumen persistente (PVC) y guarde la configuración como archivo .yaml.

    • Ejemplo de clases de almacenamiento bronce, plata y oro: El siguiente archivo .yaml crea una reclamación denominada block-storage-pvc de la clase de almacenamiento "ibmc-block-silver", facturada por hora, con un tamaño de gigabyte de 24Gi.

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: block-storage-pvc
        labels:
          billingType: "hourly"
          region: us-south
          zone: dal13
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 24Gi
        storageClassName: ibmc-block-silver
      
    • Ejemplo para utilizar su propia clase de almacenamiento: El siguiente archivo .yaml crea una reclamación denominada block-storage-pvc de la clase de almacenamiento ibmc-block-retain-custom, facturada por hora, con un tamaño de gigabyte de 45Gi y un valor de IOPS de "300".

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: block-storage-pvc
        labels:
          billingType: "hourly"
          region: us-south
          zone: dal13
      spec:
        accessModes:
          - ReadWriteOnce
        resources:
          requests:
            storage: 45Gi
            iops: "300"
        storageClassName: ibmc-block-retain-custom
      
      name
      Escriba el nombre de la PVC.
      billingType
      En la sección de etiquetas de metadatos, especifique la frecuencia con la que desea que se calcule la factura de almacenamiento, los valores son "monthly" u "hourly". El valor predeterminado es "hourly".
      region
      En la sección de etiquetas de metadatos, especifique la región en la que desea suministrar el almacenamiento en bloque. Si especifica la región, también debe especificar una zona. Si no especifica una región o no se encuentra la región especificada, el almacenamiento se crea en la misma región que el clúster. Esta opción solo recibe soporte con el plugin IBM Cloud Block Storage versión 1.0.1 o superior. Para las versiones anteriores del plugin, si tiene un clúster multizona, la zona en la que se suministra el almacenamiento se selecciona en una iteración cíclica para equilibrar las solicitudes de volumen de forma uniforme entre todas las zonas. Para especificar la zona para el almacenamiento, puede crear en primer lugar una clase de almacenamiento personalizada. A continuación, cree una PVC con la clase de almacenamiento personalizada.
      zone
      En la sección de etiquetas de metadatos, especifique la zona en la que desea suministrar el almacenamiento en bloque. Si especifica la zona, también debe especificar una región. Si no especifica una zona o la zona especificada no se encuentra en un clúster multizona, la zona se selecciona mediante iteración cíclica. Esta opción solo recibe soporte con el plugin IBM Cloud Block Storage versión 1.0.1 o superior. Para las versiones anteriores del plugin, si tiene un clúster multizona, la zona en la que se suministra el almacenamiento se selecciona en una iteración cíclica para equilibrar las solicitudes de volumen de forma uniforme entre todas las zonas. Para especificar la zona para el almacenamiento, puede crear en primer lugar una clase de almacenamiento personalizada. A continuación, cree una PVC con la clase de almacenamiento personalizada.
      storage
      En la sección de solicitudes de recursos de especificación, especifique el tamaño del almacenamiento en bloque, en gigabytes (Gi). Una vez que se ha suministrado el almacenamiento, no puede cambiar el tamaño del almacenamiento en bloque. Asegúrese de especificar un tamaño que coincida con la cantidad de datos que desea almacenar.
      iops
      Esta opción sólo está disponible para sus propias clases de almacenamiento personalizadas (ibmc-block-custom / ibmc-block-retain-custom). En la sección spec resources requests, especifique el total de IOPS para el almacenamiento, seleccionando un múltiplo de 100 dentro del rango permitido. Si elige un IOPS distinto del que aparece en la lista, el IOPS se redondea.
      storageClassName
      En la sección de especificación, especifique el nombre de la clase de almacenamiento que desea utilizar para suministrar almacenamiento en bloque. Puede optar por utilizar una de las clases de almacenamiento proporcionadas por IBM o crear su propia clase de almacenamiento. Si no especifica ninguna clase de almacenamiento, el PV se crea con la clase de almacenamiento predeterminada ibmc-file-bronze.

    Si desea utilizar una clase de almacenamiento personalizada, cree su PVC con el nombre de clase de almacenamiento correspondiente, unas IOPS válidas y un tamaño.

  2. Cree la PVC.

    oc apply -f block-storage.yaml
    
  3. Verifique que la PVC se ha creado y se ha vinculado al PV. Este proceso puede tardar unos minutos.

    oc get pvc
    

    Salida de ejemplo

    NAME                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS        AGE
    block-storage-pvc              Bound    pvc-1aa1aaaa-11a1-48d1-ab11-11b11111f3bc   45Gi       RWO            ibmc-block-silver   150m
    
  4. Para montar el PV en el despliegue, cree un archivo .yaml de configuración y especifique la PVC que enlaza el PV.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: <deployment_name>
      labels:
        app: <deployment_label>
    spec:
      selector:
        matchLabels:
          app: <app_name>
      template:
        metadata:
          labels:
            app: <app_name>
        spec:
          containers:
          - image: <image_name>
            name: <container_name>
            volumeMounts:
            - name: <volume_name>
              mountPath: /<file_path>
          volumes:
          - name: <volume_name>
            persistentVolumeClaim:
              claimName: <pvc_name>
    
    app
    En los metadatos, especifique una etiqueta para el despliegue.
    matchLabels.app y labels.app
    En el selector de especificación y en los metadatos de la plantilla, especifique una etiqueta para la app.
    image
    El nombre de la imagen de contenedor que desea utilizar. Para ver una lista de todas las imágenes disponibles en su cuenta de IBM Cloud Container Registry, ejecute ibmcloud cr image-list.
    name
    El nombre del contenedor que desea desplegar en el clúster.
    mountPath
    En la sección de montajes de volúmenes de contenedor, especifique la vía de acceso absoluta del directorio en el que está montado el volumen dentro del contenedor. Los datos grabados en la vía de acceso de montaje se almacenan en el directorio raíz en la instancia física de almacenamiento en bloque. Si quieres compartir un volumen entre diferentes aplicaciones, puedes especificar sub-rutas de volumen para cada una de tus aplicaciones.
    name
    En la sección de montajes de volúmenes de contenedor, especifique el nombre del volumen que se va a montar en el pod.
    name
    En la sección de volúmenes, especifique el nombre del volumen que se va a montar en el pod. Normalmente, este nombre es el mismo que volumeMounts/name.
    claimName
    En la sección de reclamación de volúmenes persistentes, especifique el nombre de la PVC que enlaza el PV que desea utilizar.
  5. Cree el despliegue.

    oc apply -f <local_yaml_path>
    
  6. Verifique que el PV se ha montado correctamente.

    oc describe deployment <deployment_name>
    

    El punto de montaje se muestra en el campo Volume Mounts y el volumen se muestra en el campo Volumes.

    Volume Mounts:
        /var/run/secrets/kubernetes.io/serviceaccount from default-token-tqp61 (ro)
        /volumemount from myvol (rw)
    ...
    Volumes:
    myvol:
        Type:    PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
        ClaimName:    block-storage-pvc
        ReadOnly:    false
    

Utilización de almacenamiento en bloque existente en el clúster

Si dispone de un dispositivo de almacenamiento físico que desea utilizar en su clúster, puede crear manualmente el PV y el PVC para aprovisionar estáticamente el almacenamiento.

Antes de empezar a montar el almacenamiento existente en una app, debe recuperar toda la información necesaria para su PV.

Recuperación de la información del almacenamiento en bloque existente

  1. Recupere o genere una clave de API para su cuenta de infraestructura de IBM Cloud.

    1. Inicie sesión en el portal de infraestructura deIBM Cloud.
    2. Seleccione Cuenta, Usuarios y, a continuación, Lista de usuarios.
    3. Encuentre su ID de usuario.
    4. En la columna de Clave de API, pulse Generar para generar una clave de API o Ver para ver su clave de API existente.
  2. Recupere el nombre de usuario de API de su cuenta de infraestructura de IBM Cloud.

    1. Desde el menú Lista de usuarios, seleccione su ID de usuario.
    2. En la sección Información de acceso de API, busque su Nombre de usuario de API.
  3. Inicie una sesión en el plugin de CLI de la infraestructura de IBM Cloud.

    ibmcloud sl init
    
  4. Elija autenticarse utilizando el nombre de usuario y la clave de API de su cuenta de infraestructura de IBM Cloud.

  5. Especifique el nombre de usuario y la clave de API que recuperó en los pasos anteriores.

  6. Obtenga una lista de los dispositivos de almacenamiento en bloque disponibles.

    ibmcloud sl block volume-list
    

    Salida de ejemplo

    id          username              datacenter   storage_type                capacity_gb   bytes_used   lunId   
    11111111    IBM01AAA1111111-1     wdc07        endurance_block_storage     45            -            2      
    
  7. Recupere los detalles del volumen. Sustituya <volume_ID> por el ID del volumen de almacenamiento en bloque que ha recuperado en el paso 6.

    ibmcloud sl block volume-detail <volume_ID>
    

    Salida de ejemplo

    ID                         11111111
    User name                  IBM01AAA1111111-1   
    Type                       endurance_block_storage   
    Capacity (GB)              45   
    LUN Id                     2   
    IOPs                       100   
    Datacenter                 wdc07   
    Target IP                  10.XXX.XX.XXX  
    # of Active Transactions   0   
    Replicant Count            0
    
  8. Anote los valores de ID, Capacity, LUN Id, Datacenter y Target IP del volumen que desea montar en el clúster. Nota: para montar el almacenamiento existente en un clúster, debe tener un nodo trabajador en la misma zona que el almacenamiento. Para verificar la zona del nodo de trabajador, ejecute ibmcloud oc worker ls --cluster <cluster_name_or_ID>.

Creación de un volumen persistente (PV) y una reclamación de volumen persistente (PVC) correspondiente

  1. Opcional: si tiene almacenamiento que ha suministrado con una clase de almacenamiento retain, cuando elimina la PVC, el PV y el dispositivo de almacenamiento físico no se eliminan. Para volver a utilizar el almacenamiento en el clúster, primero debe eliminar el PV. Liste los PV existentes y busque el PV que pertenezca a su almacenamiento persistente. El PV está en el estado released.

    oc get pv
    
  2. Elimine el PV.

    oc delete pv <pv_name>
    
  3. Verifique que el PV se haya eliminado.

    oc get pv
    
  4. Cree un archivo de configuración para el PV. Incluya los parámetros que ha recuperado anteriormente.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: "block-storage-pv" # Enter a name for your PV. For example, my-static-pv.
      labels:
         failure-domain.beta.kubernetes.io/region: "<region>" # Example us-east.
         failure-domain.beta.kubernetes.io/zone: "<zone>" # Example: wdc04. See /docs/openshift?topic=openshift-regions-and-zones#zones-sz
    spec:
      capacity:
        storage: "<storage>"
      accessModes:
        - ReadWriteOnce
      flexVolume:
        driver: "ibm/ibmc-block"
        fsType: "<fs_type>" # Enter ext or xfs
        options:
          "Lun": "<Lun_ID>"
          "TargetPortal": "<TargetPortal>"
          "VolumeID": "<VolumeID>"
          "volumeName": "block-storage-pv" # Enter the same value as your PV name from metadata.name
    
    name
    Asigne un nombre a su PV. Por ejemplo, block-storage-pv. Tenga en cuenta que también debe especificar este valor en spec.FlexVolume.options como volumeName.
    labels
    Especifique la región y la zona que ha recuperado anteriormente. Debe tener al menos un nodo trabajador en la misma región y zona que el almacenamiento persistente para montar el almacenamiento en el clúster. Para recuperar los detalles del volumen, ejecute ibmcloud sl block volume-list para obtener el ID de volumen y, a continuación, ejecute ibmcloud sl block volume-detail <volume_ID> para obtener los detalles del volumen.
    region
    Especifique la región en la que se encuentra el almacenamiento en bloque. Tenga en cuenta que el clúster y el almacenamiento en bloque deben estar en la misma región. Para buscar la ubicación del clúster, ejecute ibmcloud oc cluster ls. Para obtener más información sobre las regiones y zonas disponibles, consulte regiones y zonas. Por ejemplo, us-east.
    zone
    Especifique la zona en la que se encuentra el volumen de almacenamiento. Para recuperar los detalles del volumen, ejecute ibmcloud sl block volume-list para obtener el ID de volumen y, a continuación, ejecute ibmcloud sl block volume-detail <volume_ID> para obtener los detalles del volumen. Tenga en cuenta que, para conectar el almacenamiento en bloque al clúster, debe tener un nodo de trabajador disponible en la misma zona que el volumen que desea conectar. Para buscar las zonas de los nodos de trabajador, ejecute ibmcloud oc worker ls -c <cluster>. Por ejemplo, wdc04.
    storage
    Especifique el tamaño de almacenamiento del volumen de almacenamiento en bloque existente que desea conectar al clúster. El tamaño de almacenamiento se debe especificar en gigabytes, por ejemplo, 20Gi (20 GB) o 1000Gi (1 TB). Para recuperar los detalles del volumen, ejecute ibmcloud sl block volume-list para obtener el ID de volumen y, a continuación, ejecute ibmcloud sl block volume-detail <volume_ID> para obtener los detalles del volumen.
    fsType
    Especifique el tipo de sistema de archivos que está configurado para el almacenamiento en bloques existente. Elija entre ext4 y xfs. Si no especifica esta opción, el valor predeterminado de PV es ext4. Cuando se define el fsType erróneo, se sigue creando el PV, sin embargo, el montaje del PV para el pod fallará. Para recuperar los detalles del volumen, ejecute ibmcloud sl block volume-list para obtener el ID de volumen y, a continuación, ejecute ibmcloud sl block volume-detail <volume_ID> para obtener los detalles del volumen.
    Lun
    Especifique el ID de LUN del volumen de almacenamiento en bloque. Para recuperar los detalles del volumen, ejecute ibmcloud sl block volume-list para obtener el ID de volumen y, a continuación, ejecute ibmcloud sl block volume-detail <volume_ID> para obtener los detalles del volumen.
    TargetPortal
    Especifique la dirección IP del almacenamiento en bloque. Para recuperar el parámetro TargetPortal, ejecute ibmcloud sl block volume-list para obtener el ID de volumen y, a continuación, ejecute ibmcloud sl block volume-detail <volume_ID> y anote el valor de Target IP de la salida.
    VolumeId
    Especifique el ID del almacenamiento en bloque. Para recuperar los detalles del volumen, ejecute ibmcloud sl block volume-list.
    volumeName
    Especifique el mismo valor que el nombre de PV. Por ejemplo, block-storage-pv.
  5. Cree el PV en el clúster.

    oc apply -f pv.yaml
    
  6. Verifique que se ha creado el PV.

    oc get pv
    
  7. Cree otro archivo de configuración para crear la PVC. Para que la PVC coincida con el PV que ha creado anteriormente, debe elegir el mismo valor para storage y accessMode. El campo storage-class debe ser una serie vacía. Si alguno de estos campos no coincide con el PV, se crea automáticamente un nuevo PV.

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: block-storage-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: "20Gi"
      storageClassName: ""
    
  8. Cree la PVC.

    oc apply -f static-pvc.yaml
    
  9. Verifique que la PVC se ha creado y se ha enlazado al PV que ha creado con anterioridad. Este proceso puede tardar unos minutos.

    oc describe pvc static-pvc
    

    Salida de ejemplo

    Name:          static-pvc
    Namespace:     default
    StorageClass:  
    Status:        Bound
    
  10. Opcional Guarde la siguiente configuración de pod de ejemplo como un archivo denominado pod.yaml.

apiVersion: v1
kind: Pod
metadata:
  name: block-storage
  labels:
    app: block-storage
spec:
  containers:
    - name: block-storage
      image: nginx
      command: ["/bin/sh"]
      args: ["-c", "while true; do date \"+%Y-%m-%d %H:%M:%S\"; sleep 3600; done"]
      workingDir: /home
      imagePullPolicy: Always
      ports:
        - containerPort: 80
      volumeMounts:
        - name: block-storage-pv
          mountPath: /home
  volumes:
    - name: block-storage-pv
      persistentVolumeClaim:
        claimName: block-storage-pvc
  1. Cree el pod en el clúster.
oc create -f pod.yaml
  1. Cuando el pod esté en estado Running, obtenga los registros.
oc logs

Salida de ejemplo

2022-01-21 16:11:00

Ha creado correctamente un PV y lo ha enlazado a una PVC. A continuación, ha desplegado una aplicación que utiliza almacenamiento en bloque. Los usuarios de clúster pueden ahora montar la PVC en sus despliegues y empezar a leer y escribir en el volumen persistente.

Utilización del almacenamiento en bloque en un conjunto con estado

Si tiene una app con estado como, por ejemplo, una base de datos, puede crear conjuntos con estado que utilicen el almacenamiento en bloque para almacenar los datos de la app. Como alternativa, puede utilizar una base de datos como servicio de IBM Cloud y almacenar los datos en la nube.

¿Qué debo tener en cuenta al añadir almacenamiento en bloque a un conjunto con estado?
Para añadir almacenamiento a un conjunto con estado, debe especificar la configuración del almacenamiento en la sección volumeClaimTemplates del archivo YAML del conjunto con estado. volumeClaimTemplates constituye la base para la PVC y puede incluir la clase de almacenamiento y el tamaño o IOPS del almacenamiento en bloque que desea suministrar. Sin embargo, si desea incluir etiquetas en volumeClaimTemplates, Kubernetes no incluye estas etiquetas al crear la PVC. En su lugar, debe añadir las etiquetas directamente al conjunto con estado.

No puede desplegar dos conjuntos con estado al mismo tiempo. Si intenta crear un conjunto con estado antes de que otro se despliegue por completo, el despliegue de su conjunto con estado puede dar lugar a resultados inesperados.

¿Cómo puedo crear mi conjunto de estados en una zona específica?
En un clúster multizona, puede especificar la zona y la región en las que desea crear el conjunto con estado en la sección spec.selector.matchLabels y en la sección spec.template.metadata.labels del archivo YAML del conjunto con estado. Como alternativa, puede añadir estas etiquetas a una clase de almacenamiento personalizada y utilizar esta clase de almacenamiento en la sección volumeClaimTemplates de su conjunto con estado.
¿Puedo retrasar la vinculación de un PV a mi pod stateful hasta que el pod esté listo?
Sí, puede crear su propia clase de almacenamiento para la PVC que incluye el campo volumeBindingMode: WaitForFirstConsumer.
¿Qué opciones tengo para añadir almacenamiento en bloque a un conjunto con estado?
Si desea crear automáticamente la PVC al crear el conjunto con estado, utilice el suministro dinámico. También puede optar por realizar un suministro previo de las PVC o utilizar PVC existentes con su conjunto con estado.

Creación de la PVC utilizando el suministro dinámico al crear un conjunto con estado

Utilice esta opción si desea crear automáticamente la PVC al crear el conjunto con estado.

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

Realice los pasos siguientes para verificar que todos los conjuntos con estado existentes en el clúster están totalmente desplegados. Si todavía se está desplegando un conjunto con estado, no puede empezar a crear el conjunto con estado. Debe esperar a que todos los conjuntos con estado del clúster se hayan desplegado por completo para evitar resultados inesperados.

  1. Obtenga una lista de los conjuntos con estado existentes en el clúster.

    oc get statefulset --all-namespaces
    

    Salida de ejemplo

    NAME              DESIRED   CURRENT   AGE
    mystatefulset     3         3         6s
    
  2. Visualice el estado de los pods de cada conjunto con estado para asegurarse de que el despliegue del conjunto con estado haya finalizado.

    oc describe statefulset <statefulset_name>
    

    Salida de ejemplo

    Name:               nginx
    Namespace:          default
    CreationTimestamp:  Fri, 05 Oct 2022 13:22:41 -0400
    Selector:           app=nginx,billingType=hourly,region=us-south,zone=dal10
    Labels:             app=nginx
    billingType=hourly
    region=us-south
    zone=dal10
    Annotations: oc.kubernetes.io/last-applied-configuration={"apiVersion":"apps/v1","kind":"StatefulSet","metadata":{"annotations":{},"name":"nginx","namespace":"default"},"spec":{"podManagementPolicy":"Par..."
    Replicas:           3 desired | 3 total
    Pods Status:        0 Running / 3 Waiting / 0 Succeeded / 0 Failed
    Pod Template:
    Labels:  app=nginx
    billingType=hourly
    region=us-south
    zone=dal10
    ...
    

    Un conjunto con estado se ha desplegado por completo cuando el número de réplicas que encuentra en la sección Replicas de la salida de CLI es igual al número de pods con el estado Running en la sección Pods Status. Si un conjunto con estado aún no se ha desplegado por completo, espere hasta que el despliegue haya finalizado antes de continuar.

  3. Cree un archivo de configuración para el conjunto con estado y el servicio que utiliza para exponer el conjunto con estado. En el ejemplo siguiente se muestra cómo desplegar NGINX como un conjunto con estado con tres réplicas. Para cada réplica, se proporciona un dispositivo de almacenamiento en bloque de 20 gigabytes en función de las especificaciones definidas en la clase de almacenamiento ibmc-block-retain-bronze. Todos los dispositivos de almacenamiento se suministran en la zona dal10. Dado que no se puede acceder al almacenamiento en bloque desde otras zonas, todas las réplicas del conjunto con estado también se despliegan en los nodos de trabajador que se encuentran en dal10.

    apiVersion: v1
    kind: Service
    metadata:
     name: nginx
     labels:
    app: nginx
    spec:
    ports:
    - port: 80
        name: web
    clusterIP: None
    selector:
        app: nginx
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: nginx
    spec:
      serviceName: "nginx"
      replicas: 3
      podManagementPolicy: Parallel
      selector:
        matchLabels:
        app: nginx
        billingType: "hourly"
        region: "us-south" # Enter the region where your cluster is located.
        zone: "dal10"
    template:
      metadata:
      labels:
          app: nginx
          billingType: "hourly"
          region: "us-south"
          zone: "dal10"
      spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - containerPort: 80
          name: web
        volumeMounts:
        - name: myvol
        mountPath: /usr/share/nginx/html
    volumeClaimTemplates:
    - metadata:
        name: myvol
        spec:
        accessModes:
        - ReadWriteOnce
        resources:
            requests:
            storage: 20Gi
            iops: "300" #required only for performance storage
        storageClassName: ibmc-block-retain-bronze
    

    En el ejemplo siguiente se muestra cómo desplegar NGINX como un conjunto con estado con tres réplicas. El conjunto con estado no especifica la región y la zona en las que se ha creado el almacenamiento en bloque. En su lugar, el conjunto con estado utiliza una regla de antiafinidad para asegurarse de que los pods se distribuyen entre nodos trabajadores y zonas. Al definir topologykey: failure-domain.beta.kubernetes.io/zone, el planificador de Kubernetes no puede planificar un pod en un nodo de trabajador si el nodo de trabajador está en la misma zona que un pod que tiene la etiqueta app: nginx. Para cada pod de conjunto con estado, se crean dos PVC definidas en la sección volumeClaimTemplates, pero la creación de las instancias de almacenamiento en bloque se retrasa hasta que se planifica un pod de conjunto con estado que utiliza el almacenamiento. Esta configuración se denomina programación de volúmenes en función de la topología.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: ibmc-block-bronze-delayed
    parameters:
      billingType: hourly
      classVersion: "2"
      fsType: ext4
      iopsPerGB: "2"
      sizeRange: '[20-12000]Gi'
      type: Endurance
    provisioner: ibm.io/ibmc-block
    reclaimPolicy: Delete
    volumeBindingMode: WaitForFirstConsumer
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: nginx
      labels:
        app: nginx
    spec:
      ports:
      - port: 80
        name: web
      clusterIP: None
      selector:
        app: nginx
    ---
    apiVersion: apps/v1
    kind: StatefulSet
    metadata:
      name: web
    spec:
      serviceName: "nginx"
      replicas: 3
      podManagementPolicy: "Parallel"
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          affinity:
            podAntiAffinity:
              preferredDuringSchedulingIgnoredDuringExecution:
              - weight: 100
                podAffinityTerm:
                  labelSelector:
                    matchExpressions:
                    - key: app
                      operator: In
                      values:
                      - nginx
                  topologyKey: failure-domain.beta.kubernetes.io/zone
          containers:
          - name: nginx
            image: k8s.gcr.io/nginx-slim:0.8
            ports:
            - containerPort: 80
              name: web
            volumeMounts:
            - name: myvol1
              mountPath: /usr/share/nginx/html
            - name: myvol2
              mountPath: /tmp1
      volumeClaimTemplates:
      - metadata:
          name: myvol1
        spec:
          accessModes:
          - ReadWriteOnce # access mode
          resources:
            requests:
              storage: 20Gi
          storageClassName: ibmc-block-bronze-delayed
      - metadata:
          name: myvol2
        spec:
          accessModes:
          - ReadWriteOnce # access mode
          resources:
            requests:
              storage: 20Gi
          storageClassName: ibmc-block-bronze-delayed
    
    name
    Especifique un nombre para el conjunto con estado. El nombre que especifique se utilizará para crear el nombre de la PVC con el formato: <volume_name>-<statefulset_name>-<replica_number>.
    serviceName
    Especifique el nombre del servicio que desea utilizar para exponer el conjunto con estado.
    replicas
    Especifique el número de réplicas para el conjunto con estado.
    podManagementPolicy
    Especifique la política de gestión de pod que desea utilizar para su conjunto con estado.
    • OrderedReady: Con esta opción, las réplicas del conjunto con estado se despliegan una después de otra. Por ejemplo, si ha especificado tres réplicas, Kubernetes crea el PVC para la primera réplica, espera hasta que el PVC esté enlazado, despliegue la réplica del conjunto con estado y monta el PVC en la réplica. Una vez que haya finalizado el despliegue, se despliega la segunda réplica. Para más información sobre esta opción, consulte " OrderedReady Gestión de vainas
    • Parallel: Con esta opción, todos los despliegues de las réplicas de conjunto con estado se inician al mismo tiempo. Si la app da soporte al despliegue de réplicas en paralelo, utilice esta opción para ahorrar tiempo de despliegue para las PVC y las réplicas de conjuntos con estado.
    matchLabels
    En la sección de selector de especificación, especifique todas las etiquetas que desee incluir en el conjunto con estado y en la PVC. Kubernetes no reconoce las etiquetas que se incluyen en volumeClaimTemplates del conjunto con estado. Ejemplos de etiquetas que quizás desee incluir:
    • región y zona: si desea que todas las réplicas de conjunto con estado y las PVC se creen en una zona específica, añada ambas etiquetas. También puede especificar la zona y la región en la clase de almacenamiento que utiliza. Si no especifica una zona y región y tiene un clúster multizona, la zona en la que se suministra el almacenamiento se selecciona mediante iteración cíclica para equilibrar las solicitudes de volumen de forma uniforme en todas las zonas.
    • billingType: Introduzca el tipo de facturación que desea utilizar para sus PVC. Elija entre hourly o monthly. Si no especifica esta etiqueta, todas las PVC se crean con un tipo de facturación por hora.
    labels
    En la sección de metadatos de la plantilla de especificación, especifique las mismas etiquetas que ha añadido a la sección spec.selector.matchLabels.
    affinity
    En la sección de especificación de plantilla de especificación, escriba la regla de antiafinidad para asegurarse de que los pods de conjunto con estado se distribuyen entre nodos trabajadores y zonas. El ejemplo muestra una regla de antiafinidad en la que el pod del conjunto con estado prefiere no estar planificado en un nodo trabajador en el que se ejecuta un pod que tiene la etiqueta app: nginx. La clave topologykey: failure-domain.beta.kubernetes.io/zone restringe aún más esta regla antiafinidad e impide que el pod se planifique en un nodo trabajador si este está en la misma zona que un pod con la etiqueta app: nginx. Mediante esta regla antiafinidad, puede lograr la afinidad entre los nodos trabajadores y las zonas.
    name
    En la sección de metadatos de plantillas de reclamación de volúmenes de especificación, especifique un nombre para el volumen. Utilice el mismo nombre que ha definido en la sección spec.containers.volumeMount.name. El nombre que especifique aquí se utilizará para crear el nombre de la PVC con el siguiente formato: <volume_name>-<statefulset_name>-<replica_number>.
    storage
    En la sección de solicitudes de recursos de especificación de plantillas de reclamación de volúmenes de especificación, escriba el tamaño del almacenamiento en bloque en gigabytes (Gi).
    iops
    En la sección de solicitudes de recursos de especificación de plantillas de reclamación de volúmenes de especificación, si desea suministrar almacenamiento de rendimiento, especifique el número de IOPS. Si utiliza una clase de almacenamiento de resistencia y especifica un número de IOPS, se pasa por alto el número de IOPS. En su lugar se utiliza el número de IOPS especificado en la clase de almacenamiento.
    storageClassName
    En la sección de especificación de plantillas de reclamación de volúmenes de especificación, escriba la clase de almacenamiento que desea utilizar. Para listar las clases de almacenamiento existentes, ejecute ' oc get sc | grep block. Si no especifica una clase de almacenamiento, la PVC se crea con la clase de almacenamiento predeterminada establecida en el clúster. Asegúrese de que la clase de almacenamiento predeterminada utiliza el suministrador ibm.io/ibmc-block para que el conjunto con estado se suministre con almacenamiento en bloque.
  4. Cree su conjunto con estado.

    oc apply -f statefulset.yaml
    
  5. Espere a que se despliegue el conjunto con estado.

    oc describe statefulset <statefulset_name>
    

    Para ver el estado actual de los PVC, ejecute oc get pvc. El nombre de su PVC tiene este formato <volume_name>-<statefulset_name>-<replica_number>.

Aprovisionamiento estático mediante el uso de PVC existentes con un conjunto de estado

Puede realizar un suministro previo de las PVC antes de crear el conjunto con estado o utilizar PVC existentes con su conjunto con estado.

Cuando suministre dinámicamente las PVC al crear el conjunto con estado, el nombre de la PVC se asigna en función de los valores que ha utilizado en el archivo YAML de conjunto con estado. Para que el conjunto con estado utilice las PVC existentes, el nombre de las PVC debe coincidir con el nombre que se crearía automáticamente si se utilizara el suministro dinámico.

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

  1. Si desea suministrar la PVC del conjunto con estado antes de crear el conjunto con estado, siga los pasos del 1 al 3 de la sección Adición de almacenamiento en bloque a apps para crear un PVC para cada réplica del conjunto con estado. Cree la PVC con un nombre que respete el siguiente formato: <volume_name>-<statefulset_name>-<replica_number>.

    volume_name
    Utilice el nombre que desee especificar en la sección spec.volumeClaimTemplates.metadata.name de su conjunto con estado, como por ejemplo nginxvol.
    statefulset_name
    Utilice el nombre que desee especificar en la sección metadata.name de su conjunto con estado, como por ejemplo nginx_statefulset.
    replica_number
    Especifique el número de la réplica, empezando por 0.

    Por ejemplo, si tiene que crear tres réplicas del conjunto con estado, cree tres PVC con los siguientes nombres: nginxvol-nginx_statefulset-0, nginxvol-nginx_statefulset-1 y nginxvol-nginx_statefulset-2.

    ¿Está buscando crear un PVC y un PV para un dispositivo de almacenamiento existente? Cree la PVC y el PV mediante suministro estático.

  2. Siga los pasos de Suministro dinámico: Creación de la PVC al crear un conjunto con estado para crear el conjunto con estado. El nombre de la PVC sigue el formato <volume_name>-<statefulset_name>-<replica_number>. Asegúrese de utilizar los siguientes valores de nombre de PVC en la especificación del conjunto con estado: spec.volumeClaimTemplates.metadata.name : Escriba el <volume_name> del nombre de la PVC.

    metadata.name
    Escriba el <statefulset_name> del nombre de la PVC.
    spec.replicas
    Especifique el número de réplicas que desea crear para el conjunto con estado. El número de réplicas debe ser igual al número de PVC que ha creado anteriormente.

    Si las PVC están en zonas diferentes, no incluya ninguna etiqueta de región o zona en el conjunto con estado.

  3. Verifique que las PVC se utilizan en los pods de réplica de conjunto con estado listando los pods en el clúster. Identifique los pods que pertenecen a su conjunto con estado.

    oc get pods
    
  4. Verifique que la PVC existente esté montada en la réplica del conjunto con estado. Revise el valor de ClaimName en la sección Volumes de la salida de la CLI.

    oc describe pod <pod_name>
    

    Salida de ejemplo

    Name:           nginx-0
    Namespace:      default
    Node:           10.xxx.xx.xxx/10.xxx.xx.xxx
    Start Time:     Fri, 05 Oct 2022 13:24:59 -0400
    ...
    Volumes:
    myvol:
      Type:       PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
      ClaimName:  myvol-nginx-0
    ...
    

Cambio del tamaño e IOPS del dispositivo de almacenamiento existente

Si desea aumentar la capacidad de almacenamiento o el rendimiento, puede modificar el volumen existente.

Para ver preguntas sobre la facturación y encontrar los pasos sobre cómo utilizar la consola de IBM Cloud para modificar el almacenamiento, consulte Ampliación de la capacidad de almacenamiento en bloque y Ajuste de IOPS. Las actualizaciones que realice desde la consola no se reflejan en el volumen persistente (PV). Para añadir esta información al PV, ejecute oc patch pv <pv_name> y actualice manualmente el tamaño y el valor de IOPS en la sección Etiquetas y Anotación del PV.

  1. Liste las PVC del clúster y tome nota del nombre del PV asociado en la columna VOLUME.

    oc get pvc
    

    Salida de ejemplo

    NAME             STATUS    VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS        AGE
    myvol            Bound     pvc-01ac123a-123b-12c3-abcd-0a1234cb12d3   20Gi       RWO            ibmc-block-bronze    147d
    
  2. Si desea cambiar el valor de IOPS y el tamaño del almacenamiento en bloque, edite primero el valor de IOPS en la sección metadata.labels.IOPS de su PV. Puede aumentar o disminuir el valor de IOPS. Asegúrese de especificar un IOPS que reciba soporte del tipo de almacenamiento que tiene. Por ejemplo, si tiene almacenamiento en bloque resistente con 4 IOPS, puede cambiar el valor de IOPS por 2 ó 10. Para ver los valores de IOPS admitidos, consulte Cómo decidir la configuración del almacenamiento en bloque.

    oc edit pv <pv_name>
    

    Para cambiar el valor de IOPS desde la CLI, también debe cambiar el tamaño del almacenamiento en bloque. Si solo desea cambiar modificar IOPS, pero no el tamaño, debe solicitar el cambio de IOPS desde la consola.

  3. Edite la PVC y añada el nuevo tamaño en la sección spec.resources.requests.storage de la PVC. Puede cambiar por un tamaño mayor solo hasta la capacidad máxima establecida por la clase de almacenamiento. No puede reducir el tamaño del almacenamiento existente. Para ver los tamaños válidos para la clase de almacenamiento, consulte Cómo decidir la configuración del almacenamiento en bloque.

    oc edit pvc <pvc_name>
    
  4. Verifique que se solicita la ampliación del volumen. La ampliación de volumen se solicita correctamente cuando se ve el mensaje FileSystemResizePending en la sección Conditions de la salida de la CLI.

    oc describe pvc <pvc_name>
    

    Salida de ejemplo

    ...
    Conditions:
    Type                      Status  LastProbeTime                     LastTransitionTime                Reason  Message
    ----                      ------  -----------------                 ------------------                ------  -------
    FileSystemResizePending   True    Mon, 01 Jan 0001 00:00:00 +0000   Thu, 25 Apr 2022 15:52:49 -0400           Waiting for user to (re-)start a pod to finish file system resize of volume on node.
    
  5. Obtenga una lista de los pods que montan la PVC. Si la PVC está montada mediante un pod, la ampliación de volumen se procesa automáticamente. Si la PVC no está montada mediante un pod, debe montar la PVC en un pod para que se pueda procesar la ampliación de volumen.

    oc get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.volumes[*]}{.persistentVolumeClaim.claimName}{" "}{end}{end}' | grep "<pvc_name>"
    

    Los pods montados se devuelven en el formato: <pod_name>: <pvc_name>.

  6. Si la PVC no está montada mediante un pod, cree un pod o un despliegue y monte la PVC. Si la PVC está montada mediante un pod, continúe en el paso siguiente.

  7. Verifique que el tamaño y el número de IOPS se han modificado en la sección Labels de la salida de la CLI. El proceso puede tardar varios minutos en completarse.

    oc describe pv <pv_name>
    

    Salida de ejemplo

    ...
    Labels:       CapacityGb=50
    Datacenter=dal10
    IOPS=500
    
  8. Inicie una sesión en el pod que monta el PVC.

    oc exec <pod-name> -it -- bash
    
  9. Ejecute el mandato siguiente para utilizar los binarios de host.

    chroot /host
    
  10. Redimensione el sistema de archivos.

    sudo resize2fs <filesystem-path>
    

    Mandato de ejemplo

    sudo resize2fs /dev/vdg
    
  11. Verifique que el sistema de archivos se ha redimensionado.

    df -h
    

Copia de seguridad y restauración de datos

El almacenamiento en bloque se suministra en la misma ubicación que los nodos trabajadores del clúster. IBM aloja el almacenamiento en servidores en clúster para proporcionar disponibilidad en el caso de que un servidor deje de funcionar. Sin embargo, no se realizan automáticamente copias de seguridad del almacenamiento en bloque, y puede dejar de ser accesible si falla toda la ubicación. Para evitar que los datos que se pierdan o se dañen, puede configurar copias de seguridad periódicas que puede utilizar para restaurar los datos cuando sea necesario.

Consulte las opciones siguientes de copia de seguridad y restauración para el almacenamiento en bloque:

Configuración de instantáneas periódicas

Puede configurar instantáneas periódicas para el almacenamiento en bloque, que son imágenes de solo lectura que capturan el estado de la instancia en un punto en el tiempo.

Para almacenar la instantánea, debe solicitar espacio de instantáneas en el almacenamiento en bloque. Las instantáneas se almacenan en la instancia de almacenamiento existente dentro de la misma zona. Puede restaurar datos de una instantánea si un usuario elimina accidentalmente datos importantes del volumen. \n \n **Para crear una instantánea para el volumen, realice los pasos siguientes.

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

  2. Inicie una sesión en la CLI de ibmcloud sl.

    ibmcloud sl init
    
  3. Liste los PV en su clúster.

    oc get pv
    
  4. Obtenga los detalles de los PV para los que desea crear espacio de instantáneas y anote el ID de volumen, el tamaño y las IOPS. El tamaño y el número de IOPS se muestran en la sección Labels de la salida de la CLI.

    oc describe pv <pv_name>
    
  5. Para encontrar el ID de volumen, revise la anotación ibm.io/network-storage-id de la salida de la CLI.

  6. Cree el tamaño de instantánea para el volumen existente con los parámetros que ha recuperado en el paso anterior.

    ibmcloud sl block snapshot-order <volume_ID> --size <size> --tier <iops>
    
  7. Espere a que se haya creado el tamaño de la instantánea. El tamaño de la instantánea se suministra de forma correcta cuando el valor de Snapshot Size (GB) en la salida de la CLI pasa de 0 al tamaño solicitado.

    ibmcloud sl block volume-detail <volume_ID>
    
  8. Cree la instantánea para el volumen y anote el ID de la instantánea que se crea para usted.

    ibmcloud sl block snapshot-create <volume_ID>
    
  9. Verifique que la instantánea se haya creado correctamente.

    ibmcloud sl block snapshot-list <volume_ID>
    
  10. Establezca la planificación de instantánea. Para obtener más información sobre las opciones disponibles para la planificación de instantáneas, consulte la documentación de CLI.

    ibmcloud sl block snapshot-enable VOLUME_ID <OPTIONS>
    
  11. Para restaurar los datos de una instantánea en un volumen existente, ejecute el comando siguiente.

    ibmcloud sl block snapshot-restore <volume_ID> <snapshot_ID>
    

Replicación de instantáneas en otra zona

Para proteger los datos ante un error de la zona, puede replicar instantáneas en una instancia de almacenamiento en bloque configurada en otra zona.

Los datos únicamente se pueden replicar desde el almacenamiento primario al almacenamiento de copia de seguridad. No puede montar una instancia de almacenamiento en bloque replicada en un clúster. Cuando el almacenamiento primario falla, puede establecer de forma manual el almacenamiento de copia de seguridad replicado para que sea el primario. A continuación, puede montarla en el clúster. Una vez restaurado el almacenamiento primario, puede restaurar los datos del almacenamiento de copia de seguridad.

Duplicación del almacenamiento

Puede duplicar la instancia de almacenamiento en bloque en la misma zona que la instancia de almacenamiento original.

La instancia duplicada tiene los mismos datos que la instancia de almacenamiento original en el momento de duplicarla. A diferencia de las réplicas, utilice los duplicados como una instancia de almacenamiento independiente de la original. Para duplicar, primero configure instantáneas para el volumen.

Copia de seguridad de los datos en IBM Cloud® Object Storage

Puede utilizar el diagrama de Helm ibm-backup-restore para utilizar un pod de copia de seguridad y restauración en el clúster.

Este pod contiene un script para ejecutar una copia de seguridad puntual o periódico para cualquier reclamación de volumen persistente (PVC) en el clúster. Los datos se almacenan en la instancia de IBM Cloud® Object Storage que ha configurado en una zona.

El almacenamiento en bloque se monta con la modalidad de acceso RWO. This access allows only one pod to be mounted to the block storage at a time. Para hacer una copia de seguridad de los datos, debe desmontar el pod de la app desde el almacenamiento, montarlo en el pod de copia de seguridad, realizar una copia de seguridad de los datos y volver a montar el almacenamiento en el pod de la app.

Para aumentar la alta disponibilidad de los datos y proteger la app ante un error de la zona, configure una segunda instancia de Object Storage y replique los datos entre las zonas. Si necesita restaurar datos desde la instancia de Object Storage, utilice el pod de restauración que se proporciona con el diagrama de Helm.

Copia de datos desde y hacia pods y contenedores

Puede utilizar el comando ' oc cp ' para copiar archivos y directorios a y desde pods o contenedores específicos en su cluster.

Acceda al clúster de Red Hat OpenShift.

Cuando se ejecuta el mandato oc cp, si no se especifica un contenedor con -c, el mandato utiliza el primer contenedor disponible en el pod.

Copie los datos de la máquina local en un pod del clúster.

oc cp <local_filepath>/<filename> <namespace>/<pod>:<pod_filepath>

Copie los datos de un pod del clúster en la máquina local.

oc cp <namespace>/<pod>:<pod_filepath>/<filename> <local_filepath>/<filename>

Copie los datos de la máquina local en un contenedor concreto que ejecute en un pod del clúster.

oc cp <local_filepath>/<filename> <namespace>/<pod>:<pod_filepath> -c CONTAINER

Referencia de clases de almacenamiento

Bronce

Nombre
ibmc-block-bronze
ibmc-block-retain-bronze
Tipo
Almacenamiento resistente
Sistema de archivos
ext4
IOPS por gigabyte
2
Rango de tamaño en gigabytes
20-12000 Gi
Disco duro
SSD
Política de reclamación
ibmc-block-bronze: Suprimir
ibmc-block-retain-bronze: Retener

Plata

Nombre
ibmc-block-silver
ibmc-block-retain-silver
Tipo
Almacenamiento resistente
Sistema de archivos
ext4
IOPS por gigabyte
4
Rango de tamaño en gigabytes
20-12000 Gi
Disco duro
SSD
Política de reclamación
ibmc-block-silver: Suprimir
ibmc-block-retain-silver: Retener

Oro

Nombre
ibmc-block-gold
ibmc-block-retain-gold
Tipo
Almacenamiento resistente
Sistema de archivos
ext4
IOPS por gigabyte
10
Rango de tamaño en gigabytes
20-4000 Gi
Disco duro
SSD
Política de reclamación
ibmc-block-gold: Suprimir
ibmc-block-retain-gold: Retener

Personalizado

Nombre
ibmc-block-custom
ibmc-block-retain-custom
Tipo
Sistema de archivos de rendimiento
ext4
IOPS y tamaño
Rango de tamaños en gigabytes / Rango de IOPS en múltiplos de 100
  • 20-39 Gi / 100-1000 IOPS
  • 40-79 Gi / 100-2000 IOPS
  • 80-99 Gi / 100-4000 IOPS
  • 100-499 Gi / 100-6000 IOPS
  • 500-999 Gi / 100-10000 IOPS
  • 1000-1999 Gi / 100-20000 IOPS
  • 2000-2999 Gi / 200-40000 IOPS
  • 3000-3999 Gi / 200-48000 IOPS
  • 4000-7999 Gi / 300-48000 IOPS
  • 8000-9999 Gi / 500-48000 IOPS
  • 10000-12000 Gi / 1000-48000 IOPS
Disco duro
La proporción entre IOPS y gigabytes determina el tipo de disco duro que se suministra. Para determinar la proporción entre IOPS y gigabytes, divida el número de IOPS por el tamaño de su almacenamiento.
Ejemplo: ha seleccionado 500Gi de almacenamiento con 100 IOPS. La proporción es de 0,2 (100 IOPS/500 Gi).
Visión general de los tipos de disco duro por proporción:
  • Menor o igual que 0,3: SATA
  • Mayor que 0,3: SSD
Política de reclamación
ibmc-block-custom: Suprimir
ibmc-block-retain-custom: Retener

Clases de almacenamiento personalizadas de ejemplo

Puede crear una clase de almacenamiento personalizada y utilizar la clase de almacenamiento en la PVC.

Red Hat OpenShift on IBM Cloud proporciona clases de almacenamiento predefinidas para suministrar almacenamiento en bloque con un nivel y una configuración determinados. A veces, es posible que desee suministrar almacenamiento con una configuración diferente que no esté cubierta en las clases de almacenamiento predefinidas. Puede utilizar los ejemplos de este tema para encontrar clases de almacenamiento personalizadas de ejemplo.

Para crear la clase de almacenamiento personalizada, consulte Personalización de una clase de almacenamiento. A continuación, utilice la clase de almacenamiento personalizada en la PVC.

Creación de almacenamiento que tenga en cuenta la topología

Para utilizar el almacenamiento en bloque en un clúster multizona, su pod debe estar planificado en la misma zona que la instancia de almacenamiento en bloque para que pueda leer y escribir en el volumen. Antes de que Kubernetes incorporara la planificación del volumen que tiene en cuenta la topología, el suministro dinámico del almacenamiento creaba automáticamente la instancia de almacenamiento en bloque al crear una PVC. A continuación, cuando creaba el pod, el planificador de Kubernetes intentaba desplegar el pod en el mismo centro de datos que la instancia de almacenamiento en bloque.

La creación de la instancia de almacenamiento en bloque sin conocer las restricciones del pod puede llevar a resultados no deseados. Por ejemplo, es posible que el pod no pueda planificarse en el mismo nodo trabajador que el almacenamiento porque el nodo trabajador no tiene recursos suficientes o porque el nodo trabajador está marcado y no permite que se planifique el pod. Con la planificación de volumen que tiene en cuenta la topología, la instancia de almacenamiento en bloque se retrasa hasta que se crea el primer pod que utiliza el almacenamiento.

Para utilizar la planificación del volumen que tiene en cuenta la topología, asegúrese de que ha instalado el plugin IBM Cloud Block Storage versión 1.2.0 o posterior.

En los siguientes ejemplos se muestra cómo crear clases de almacenamiento que retrasan la creación de la instancia de almacenamiento en bloque hasta que el primer pod que utiliza este almacenamiento esté listo para ser planificado. Para retrasar la creación, debe incluir la opción volumeBindingMode: WaitForFirstConsumer. Si no incluye esta opción, volumeBindingMode se establece automáticamente en Immediate y la instancia de almacenamiento en bloque se crea al crear la PVC.

Ejemplo de almacenamiento en bloques de resistencia.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ibmc-block-bronze-delayed
  parameters:
    billingType: hourly
    classVersion: "2"
    fsType: ext4
    iopsPerGB: "2"
    sizeRange: '[20-12000]Gi'
    type: Endurance
  provisioner: ibm.io/ibmc-block
  reclaimPolicy: Delete
  volumeBindingMode: WaitForFirstConsumer

Ejemplo de almacenamiento en bloques de rendimiento.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ibmc-block-performance-storageclass
  labels:
  kubernetes.io/cluster-service: "true"
  provisioner: ibm.io/ibmc-block
  parameters:
    billingType: "hourly"
    classVersion: "2"
    sizeIOPSRange: |-
    "[20-39]Gi:[100-1000]"
    "[40-79]Gi:[100-2000]"
    "[80-99]Gi:[100-4000]"
    "[100-499]Gi:[100-6000]"
    "[500-999]Gi:[100-10000]"
    "[1000-1999]Gi:[100-20000]"
    "[2000-2999]Gi:[200-40000]"
    "[3000-3999]Gi:[200-48000]"
    "[4000-7999]Gi:[300-48000]"
    "[8000-9999]Gi:[500-48000]"
    "[10000-12000]Gi:[1000-48000]"
    type: "Performance"
  reclaimPolicy: Delete
  volumeBindingMode: WaitForFirstConsumer

Especificación de la zona y de la región

Si desea crear el almacenamiento en bloque en una zona específica, puede especificar la zona y la región en una clase de almacenamiento personalizada.

Utilice la clase de almacenamiento personalizada si utiliza el plugin IBM Cloud Block Storage versión 1.0.0 o si desea suministrar almacenamiento en bloque de forma estática en una zona específica. En todos los demás casos, especifique la zona directamente en la PVC.

El siguiente archivo .yaml personaliza una clase de almacenamiento que se basa en la clase de almacenamiento sin retención ibm-block-silver: el valor de type es "Endurance", el valor de iopsPerGB es 4, el valor de sizeRange es "[20-12000]Gi" y el valor de reclaimPolicy está establecido en "Delete". La zona especificada es dal12. Para utilizar otra clase de almacenamiento como base, consulte la Referencia de clases de almacenamiento.

Cree la clase de almacenamiento en la misma región y zona que el clúster y los nodos trabajadores. Para obtener la región del clúster, ejecute ibmcloud oc cluster get --cluster <cluster_name_or_ID> y busque el prefijo de región en el URL maestro, como eu-de en https://c2.eu-de.containers.cloud.ibm.com:11111. Para obtener la zona del nodo de trabajador, ejecute ibmcloud oc worker ls --cluster <cluster_name_or_ID>.

Ejemplo de almacenamiento en bloques de resistencia.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ibmc-block-silver-mycustom-storageclass
  labels:
    kubernetes.io/cluster-service: "true"
provisioner: ibm.io/ibmc-block
parameters:
  zone: "dal12"
  region: "us-south"
  type: "Endurance"
  iopsPerGB: "4"
  sizeRange: "[20-12000]Gi"
reclaimPolicy: "Delete"

Ejemplo de almacenamiento en bloques de rendimiento.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
    name: ibmc-block-performance-storageclass
labels:
  kubernetes.io/cluster-service: "true"
provisioner: ibm.io/ibmc-block
parameters:
  zone: "dal12"
  region: "us-south"
  type: "Performance"
  sizeIOPSRange: |-
  "[20-39]Gi:[100-1000]"
  "[40-79]Gi:[100-2000]"
  "[80-99]Gi:[100-4000]"
  "[100-499]Gi:[100-6000]"
  "[500-999]Gi:[100-10000]"
  "[1000-1999]Gi:[100-20000]"
  "[2000-2999]Gi:[200-40000]"
  "[3000-3999]Gi:[200-48000]"
  "[4000-7999]Gi:[300-48000]"
  "[8000-9999]Gi:[500-48000]"
  "[10000-12000]Gi:[1000-48000]"
reclaimPolicy: "Delete"

Montaje de almacenamiento en bloque con un sistema de archivos XFS

En los ejemplos siguientes se crea una clase de almacenamiento que proporciona almacenamiento en bloque con un sistema de archivos XFS.

Ejemplo de almacenamiento en bloques de resistencia.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ibmc-block-custom-xfs
labels:
  addonmanager.kubernetes.io/mode: Reconcile
provisioner: ibm.io/ibmc-block
parameters:
  type: "Endurance"
  iopsPerGB: "4"
  sizeRange: "[20-12000]Gi"
  fsType: "xfs"
reclaimPolicy: "Delete"

Ejemplo de almacenamiento en bloques de rendimiento.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ibmc-block-custom-xfs
  labels:
    addonmanager.kubernetes.io/mode: Reconcile
provisioner: ibm.io/ibmc-block
parameters:
  classVersion: "2"
  type: "Performance"
  sizeIOPSRange: |-
    [20-39]Gi:[100-1000]
    [40-79]Gi:[100-2000]
    [80-99]Gi:[100-4000]
    [100-499]Gi:[100-6000]
    [500-999]Gi:[100-10000]
    [1000-1999]Gi:[100-20000]
    [2000-2999]Gi:[200-40000]
    [3000-3999]Gi:[200-48000]
    [4000-7999]Gi:[300-48000]
    [8000-9999]Gi:[500-48000]
    [10000-12000]Gi:[1000-48000]
  fsType: "xfs"
reclaimPolicy: "Delete"

Eliminación del almacenamiento persistente de un clúster

Cuando configura el almacenamiento persistente en el clúster, tiene tres componentes principales: la reclamación de volumen persistente (PVC) de Kubernetes que solicita almacenamiento, el volumen persistente (PV) de Kubernetes que se monta en un pod y se describe en el PVC y la instancia de infraestructura de IBM Cloud, como por ejemplo el almacenamiento clásico de archivos o en bloque. En función de cómo haya creado el almacenamiento, es posible que los tenga que suprimir los tres componentes por separado.

Visión general de la eliminación del almacenamiento

La eliminación del almacenamiento persistente de la cuenta de IBM Cloud varía en función de cómo haya suministrado el almacenamiento y de los componentes que ya haya eliminado.

¿Se elimina mi almacenamiento persistente cuando borro mi clúster?
Durante la supresión del clúster, tiene la opción de eliminar el almacenamiento persistente. Sin embargo, en función de cómo se haya suministrado el almacenamiento, es posible que la eliminación del almacenamiento no incluya todos los componentes de almacenamiento. Si aprovisionó almacenamiento dinámicamente con una clase de almacenamiento que establece ' reclaimPolicy: Delete, su PVC, PV y la instancia de almacenamiento se eliminan automáticamente al eliminar el clúster. Para el almacenamiento que se aprovisionó estáticamente o el almacenamiento que aprovisionó con una clase de almacenamiento que establece ' reclaimPolicy: Retain, el PVC y el PV se eliminan cuando se elimina el clúster, pero su instancia de almacenamiento y sus datos permanecen. Se le sigue facturando la instancia de almacenamiento. Además, si ha suprimido el clúster que no está en buen estado, es posible que el almacenamiento siga existiendo incluso si ha elegido eliminarlo.
¿Cómo elimino el almacenamiento si quiero conservar mi clúster?
Cuando se ha suministrado el almacenamiento de forma dinámica con una clase de almacenamiento que establece reclaimPolicy: Delete, puede eliminar la PVC para iniciar el proceso de supresión de su almacenamiento persistente. La PVC, el PV y la instancia de almacenamiento se eliminan automáticamente. Para el almacenamiento que se aprovisionó estáticamente o el almacenamiento que aprovisionó con una clase de almacenamiento que establece " reclaimPolicy: Retain, debe eliminar manualmente el PVC, el PV y la instancia de almacenamiento para evitar más cargos.
¿Cómo se detiene la facturación después de borrar mi almacenamiento?
En función de los componentes de almacenamiento que suprima y de cuándo lo haga, es posible que el ciclo de facturación no se detenga inmediatamente. Si suprime la PVC y el PV, pero no la instancia de almacenamiento de la cuenta de IBM Cloud, dicha instancia sigue existiendo y se le sigue facturando por la misma.

Si suprime la PVC, el PV y la instancia de almacenamiento, el ciclo de facturación se detiene en función del valor de billingType que haya elegido al suministrar el almacenamiento y de cómo haya elegido suprimir el almacenamiento.

  • Cuando se cancela manualmente la instancia de almacenamiento persistente desde la consola IBM Cloud o la CLI, la facturación se detiene del siguiente modo:

    • Almacenamiento por hora: la facturación se detiene inmediatamente. Una vez que se haya cancelado el almacenamiento, es posible que siga viendo la instancia de almacenamiento en la consola durante 72 horas más.
    • Almacenamiento mensual: puede elegir entre cancelación inmediata o cancelación al cumplirse el año. En ambos casos, se le factura hasta el final del ciclo de facturación actual y la facturación se detiene en el siguiente ciclo de facturación. Una vez que se haya cancelado el almacenamiento, es posible que siga viendo la instancia de almacenamiento en la consola o la CLI durante 72 horas más.
    • Cancelación inmediata: elija esta opción para eliminar el almacenamiento de inmediato. Ni usted ni sus usuarios pueden seguir utilizando el almacenamiento ni recuperar los datos.
    • Fecha de aniversario: elija esta opción para cancelar el almacenamiento en la fecha del próximo aniversario. Las instancias de almacenamiento permanecen activas hasta la fecha del siguiente aniversario y puede seguir utilizándolas hasta dicha fecha, por ejemplo para dar tiempo a su equipo para que realice copias de seguridad de los datos.
  • Si ha suministrado el almacenamiento de forma dinámica con una clase de almacenamiento que establece reclaimPolicy: Delete y elige eliminar la PVC, el PV y la instancia de almacenamiento se eliminan inmediatamente. En el caso del almacenamiento que se factura por hora, la facturación se detiene inmediatamente. En el caso del almacenamiento que se factura mensualmente, se le factura el resto del mes. Una vez que se haya eliminado el almacenamiento y se detiene la facturación, es posible que siga viendo la instancia de almacenamiento en la consola o la CLI durante 72 horas más.

¿Qué debo tener en cuenta antes de eliminar el almacenamiento permanente?
Cuando se limpia el almacenamiento persistente, se suprimen todos los datos almacenados en el mismo. Si necesita una copia de los datos, haga una copia de seguridad.
He borrado mi instancia de almacenamiento. ¿Por qué sigo viendo mi instancia?
Después de eliminar el almacenamiento persistente, pueden pasar hasta 72 horas hasta que la eliminación se procese por completo y el almacenamiento desaparezca de la consola o de la CLI de IBM Cloud.

Limpieza del almacenamiento persistente

Elimine la PVC, el PV y la instancia de almacenamiento de la cuenta de IBM Cloud para evitar cargos adicionales de almacenamiento persistente.

Antes de empezar:

Para limpiar los datos persistentes:

  1. Obtenga una lista de las PVC del clúster y anote el nombre (NAME) de la PVC, su STORAGECLASS y el nombre del PV vinculado a la PVC que se muestra como VOLUME.

    oc get pvc
    

    Salida de ejemplo

    NAME                  STATUS    VOLUME                                     CAPACITY   ACCESSMODES   STORAGECLASS            AGE
    claim1   Bound     pvc-06886b77-102b-11e8-968a-f6612bb731fb   20Gi       RWO           class       78d
    claim2     Bound     pvc-457a2b96-fafc-11e7-8ff9-b6c8f770356c   4Gi        RWX           class 105d
    claim3      Bound     pvc-1efef0ba-0c48-11e8-968a-f6612bb731fb   24Gi       RWX           class        83d
    
  2. Revise los valores ReclaimPolicy y billingType para la clase de almacenamiento.

    oc describe storageclass <storageclass_name>
    

    Si la política de reclamación indica Delete, el PV y el almacenamiento físico se eliminan cuando se elimina la PVC. Si la política de reclamación indica Retain, o si ha suministrado el almacenamiento sin una clase de almacenamiento, el PV y el almacenamiento físico no se eliminan cuando se elimina la PVC. Debe eliminar la PVC, el PV y el almacenamiento físico por separado.

    Si el almacenamiento se carga de forma mensual, se le facturará todo el mes, aunque elimine el almacenamiento antes de que finalice el ciclo de facturación.

  3. Elimine los pods que montan la PVC. Obtenga una lista de los pods que montan la PVC. Si no se devuelve ningún pod en la salida de la CLI, no tiene ningún pod que utilice la PVC.

    oc get pods --all-namespaces -o=jsonpath='{range .items[*]}{"\n"}{.metadata.name}{":\t"}{range .spec.volumes[*]}{.persistentVolumeClaim.claimName}{" "}{end}{end}' | grep "<pvc_name>"
    

    Salida de ejemplo

    depl-12345-prz7b:    claim1
    
  4. Elimine el pod que utiliza la PVC. Si el pod forma parte de un despliegue, elimine el despliegue.

    oc delete pod <pod_name>
    
  5. Verifique que el pod se ha eliminado.

    oc get pods
    
  6. Elimine la PVC.

    oc delete pvc <pvc_name>
    
  7. Revise el estado de su PV. Utilice el nombre del PV que ha recuperado antes como VOLUME. Cuando se elimina la PVC, se libera el PV vinculado a la PVC. En función de cómo haya suministrado el almacenamiento, el PV entra en estado Deleting si el PV se suprime automáticamente o en estado Released si debe suprimir manualmente el PV. Nota: para los PV que se suprimen automáticamente, el estado puede indicar brevemente Released antes de que se suprima. Vuelva a ejecutar el mandato después de unos minutos para ver si se ha eliminado el PV.

    oc get pv <pv_name>
    
  8. Si su PV no se ha suprimido, elimine manualmente el PV.

    oc delete pv <pv_name>
    
  9. Verifique que el PV se ha eliminado.

    oc get pv
    
  10. Obtenga una lista de la instancia de almacenamiento físico a la que apuntaba su PV y anote el id de la instancia de almacenamiento físico.

    ibmcloud sl block volume-list --columns id --columns notes | grep <pv_name>
    

    Salida de ejemplo

    12345678   {"plugin":"ibmcloud-block-storage-plugin-689df949d6-4n9qg","region":"us-south","cluster":"aa1a11a1a11b2b2bb22b22222c3c3333","type":"Endurance","ns":"default","pvc":"block-storage-pvc","pv":"pvc-d979977d-d79d-77d9-9d7d-d7d97ddd99d7","storageclass":"ibmc-block-silver","reclaim":"Delete"}
    

    Visión general de la información del campo Notes:

    "plugin":"ibm-file-plugin-5b55b7b77b-55bb7"
    El plugin de almacenamiento que utiliza el clúster.
    "region":"us-south"
    La región en la que se encuentra el clúster.
    "cluster":"aa1a11a1a11b2b2bb22b22222c3c3333"
    El ID de clúster que está asociado con la instancia de almacenamiento.
    "type":"Endurance"
    El tipo de almacenamiento de archivos o en bloque, Endurance o Performance.
    "ns":"default"
    El espacio de nombres en el que se despliega la instancia de almacenamiento.
    "pvc":"block-storage-pvc"
    El nombre del PVC que está asociado a la instancia de almacenamiento.
    "pv":"pvc-d979977d-d79d-77d9-9d7d-d7d97ddd99d7"
    El PV que está asociado con la instancia de almacenamiento.
    "storageclass":"ibmc-file-gold"
    El tipo de clase de almacenamiento: bronce, plata, oro o personalizado.
  11. Elimine la instancia de almacenamiento físico.

    ibmcloud sl block volume-cancel <classic_block_id>
    
  12. Verifique que se ha eliminado la instancia de almacenamiento físico.

El proceso de supresión puede tardar hasta 72 horas en completarse.

ibmcloud sl block volume-list

Configuración de la supervisión para los PV de conectividad de limited

Cuando crea un pod y una PVC que utilizan Block Storage for Classic, se asignan 2 puertos de destino al volumen persistente (PV) subyacente donde se monta el almacenamiento. Varios puertos de destino permiten la migración tras error en caso de que un puerto pase a estar inactivo.

En versiones anteriores del controlador Block Storage for Classic, la imposibilidad de encontrar 2 puertos de destino al montar un PV durante el despliegue provocaba un error de despliegue.

Sin embargo, a veces, como durante las ventanas de mantenimiento de IaaS, es posible que desee que los pods se desplieguen correctamente con sólo 1 puerto de destino disponible en el volumen persistente.

A partir de la versión 2.4.12 del controlador Block Storage for Classic, los pods se desplegarán correctamente aunque el PV solo pueda asignar 1 puerto de destino. Además de este cambio de comportamiento, los PV ahora incluyen una nueva etiqueta para indicar la disponibilidad de red donde una etiqueta de healthy significa que se han asignado 2 puertos de destino y limited significa que solo se ha podido asignar 1 puerto de destino durante el montaje.

Para supervisar las instancias en las que la conectividad de pod con Block Storage for Classic está limitada, puede configurar una alerta personalizada que busque la etiqueta limited. A continuación, configure el umbral de alerta en >0.

  1. En el panel de control IBM Cloud Monitoring, seleccione Nueva alerta > Métrica.

  2. Seleccione Consulta Prom y especifique kube_persistentvolume_labels{label_ibm_io_pv_connectivity_status='limited'}.

  3. Establezca el umbral en >0 y establezca la gravedad que desea utilizar para esta alerta.

  4. Seleccione el canal de notificación y guarde la alerta.