Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2024-09-10 GMT+08:00

Uso de un bucket de OBS existente con un PV estático

En esta sección se describe cómo utilizar un bucket del Object Storage Service (OBS) existente para crear estáticamente los PV y PVC e implementar la persistencia y el uso compartido de datos en las cargas de trabajo.

Requisitos previos

  • Ha creado un clúster e instalado el complemento de CSI (everest) en el clúster.
  • Si desea crear un clúster mediante comandos, utilice kubectl para conectarse al clúster. Para obtener más información, véase Conexión a un clúster con kubectl.
  • Se ha creado un bucket de OBS. Un bucket de OBS del tipo de sistema de archivos paralelo solo se puede seleccionar cuando se encuentra en la misma región que el clúster.

Restricciones

  • Los contenedores de Kata no admiten los volúmenes de OBS.
  • Un solo usuario puede crear un máximo de 100 bucket de OBS en la consola. Si tiene una gran cantidad de cargas de trabajo de CCE y desea montar un bucket de OBS en cada carga de trabajo, puede que se quede sin bucket fácilmente. En este escenario, se recomienda usar OBS con la API o el SDK de OBS y no montar bucket de OBS en la carga de trabajo de la consola.
  • Cuando se utilizan sistemas de archivos paralelos y bucket de objetos, el grupo y el permiso del punto de montaje no se pueden modificar.
  • CCE le permite utilizar sistemas de archivos paralelos de OBS llamando al SDK de OBS o a través del montaje de PVC. El montaje de PVC es implementado por el obsfs tool proporcionado por OBS. Para obtener más información sobre obsfs, consulte la Introducción a obsfs. Cada vez que se monta un sistema de archivos paralelos de OBS, se genera un proceso residente obsfs, como se muestra en la siguiente figura.

    Se recomienda reservar 1 GB de memoria para cada proceso de obsfs. Por ejemplo, para un nodo con 4 CPUs y 8 GB de memoria, el sistema de archivos paralelo obsfs debe montarse en no más de ocho pods.

    Los procesos residentes de obsfs se ejecutan en el nodo. Si la memoria consumida excede el límite superior del nodo, el nodo se vuelve anormal. En un nodo con 4 CPU y 8 GB de memoria, si se montan más de 100 pods en sistemas de archivos paralelos, el nodo dejará de estar disponible. Se recomienda controlar el número de pods montados en sistemas de archivos paralelos en un solo nodo.

Uso de un bucket de OBS existente en la consola

  1. Inicie sesión en la consola de CCE y acceda a la consola del clúster.
  2. Cree un PV y PVC estáticamente.

    1. Elija Storage en el panel de navegación y haga clic en la ficha PersistentVolumeClaims (PVCs). Haga clic en Create PVC en la esquina superior derecha. En el cuadro de diálogo que se muestra, configure los parámetros de PVC.

      Parámetro

      Descripción

      PVC Type

      En esta sección, seleccione OBS.

      PVC Name

      Escriba el nombre de PVC, que debe ser único en el mismo espacio de nombres.

      Creation Method

      • Si el almacenamiento subyacente está disponible, puede crear un volumen de almacenamiento o utilizar un volumen de almacenamiento existente para crear estáticamente un PVC en función de si se ha creado un PV.
      • Si no hay ningún almacenamiento subyacente disponible, puede seleccionar Dynamically provision. Para obtener más información, véase Uso de un bucket de OBS con un PV dinámico.

      En este ejemplo, seleccione Create new para crear un PV y un PVC al mismo tiempo en la consola.

      PVa

      Seleccione un volumen de PV existente en el clúster. Es necesario crear un PV por adelantado. Para obtener más información, consulte "Creación de un volumen de almacenamiento (PV)" de Operaciones relacionadas.

      No es necesario especificar este parámetro en este ejemplo.

      OBSb

      Haga clic en Select OBS. En la página mostrada, seleccione el bucket de OBS que cumpla con sus requisitos y haga clic en OK.

      NOTA:

      Actualmente, solo se admiten sistemas de archivos paralelos.

      PV Nameb

      Introduzca el nombre de PV, que debe ser único en el mismo clúster.

      Access Modeb

      Los volúmenes de OBS solo admiten ReadWriteMany, lo que indica que un volumen de almacenamiento puede montarse en múltiples nodos en modo de lectura/escritura. Para obtener más información, véase Modos de acceso al volumen.

      Reclaim Policyb

      Puede seleccionar Delete o Retain para especificar la política de recuperación del almacenamiento subyacente cuando se elimina el PVC. Para obtener más información, véase Política de reclamo de PV.

      NOTA:

      Si varios PV utilizan el mismo volumen de OBS, utilice Retain para evitar la eliminación en cascada de volúmenes subyacentes.

      Secretb

      Custom: Personalice un secreto si desea asignar diferentes permisos de usuario a diferentes dispositivos de almacenamiento de OBS. Para obtener más información, véase Uso de una AK/SK personalizada para montar un volumen de OBS.

      Solo se pueden seleccionar secretos con la etiqueta secret.kubernetes.io/used-by = csi. El tipo de secreto es cfe/secure-opaque. Si no hay ningún secreto disponible, haga clic en Create Secret para crear uno.
      • Name: Ingrese un nombre de secreto.
      • Namespace: Seleccione el espacio de nombres donde está el secreto.
      • Access Key (AK/SK): Sube un archivo clave en formato .csv. Para obtener más información, véase Obtención de una clave de acceso.

      Mount Optionsb

      Introduzca los pares de clave-valor del parámetro de montaje. Para obtener más información, véase Configuración de opciones de montaje de OBS.

      a: El parámetro está disponible cuando Creation Method se establece en Use existing.

      b: El parámetro está disponible cuando Creation Method se establece en Create new.

    2. Haga clic en Create para crear un PVC y un PV.

      Puede elegir Storage en el panel de navegación y ver el PVC y PV creados en las páginas de fichas PersistentVolumeClaims (PVCs) y PersistentVolumes (PVs).

  3. Cree una aplicación.

    1. En el panel de navegación de la izquierda, haga clic en Workloads. En el panel derecho, haga clic en la ficha Deployments.
    2. Haga clic en Create Workload en la esquina superior derecha. En la página mostrada, haga clic en Data Storage en el área Container Settings y haga clic en Add Volume para seleccionar PVC.
      Montar y utilizar volúmenes de almacenamiento, como se muestra en Tabla 1. Para obtener más información sobre otros parámetros, consulte Workloads.
      Tabla 1 Montaje de un volumen de almacenamiento

      Parámetro

      Descripción

      PVC

      Seleccione un volumen de almacenamiento de objetos existente.

      Add Container Path

      Configure los parámetros siguientes:
      1. Mount Path: Introduzca una ruta de acceso del contenedor. Por ejemplo, /tmp.
        Este parámetro indica la ruta de contenedor en la que se montará un volumen de datos. No monte el volumen en un directorio del sistema como / o /var/run; esta acción puede causar errores de contenedor. Se recomienda montar el volumen en un directorio vacío. Si el directorio no está vacío, asegúrese de que no hay archivos que afecten al inicio de contenedor. De lo contrario, se reemplazarán los archivos, lo que provocará errores de inicio de contenedor o errores de creación de carga de trabajo.
        AVISO:

        Cuando el contenedor está montado en un directorio de alto riesgo, se recomienda utilizar una cuenta con los permisos mínimos para iniciar el contenedor; de lo contrario, los archivos de alto riesgo en la máquina host podrían estar dañados.

      2. Subpath: Introduzca una ruta secundaria, por ejemplo, tmp.

        Se utiliza una ruta secundaria para montar un volumen local de modo que se utilice el mismo volumen de datos en un solo pod. Si este parámetro se deja en blanco, la ruta raíz se utiliza de forma predeterminada.

      3. Permission
        • Read-only: Solo puede leer los datos en los volúmenes montados.
        • Read/Write: Puede modificar los volúmenes de datos montados en la ruta de acceso. Los datos recién escritos no se migran si se migra el contenedor, lo que puede causar la pérdida de datos.

      Puede hacer clic en para agregar varias rutas y subrutas.

      En este ejemplo, el disco se monta en la trayectoria /data del contenedor. Los datos de contenedor generados en esta ruta se almacenan en el volumen de OBS.

    3. Después de completar la configuración, haga clic en Create.

      Una vez creada la carga de trabajo, puede probar Verificación de la persistencia y el uso compartido de datos.

(kubectl) Uso de un bucket de OBS existente

  1. Utilice kubectl para conectarse al clúster.
  2. Cree un PV.

    1. Cree el archivo pv-obs.yaml.
      apiVersion: v1
      kind: PersistentVolume
      metadata:
        annotations:
          pv.kubernetes.io/provisioned-by: everest-csi-provisioner
          everest.io/reclaim-policy: retain-volume-only      # (Optional) The PV is deleted while the underlying volume is retained.
        name: pv-obs       # PV name.
      spec:
        accessModes:
        - ReadWriteMany    # Access mode. The value must be ReadWriteMany for OBS.
        capacity:
          storage: 1Gi     # OBS volume capacity.
        csi:
          driver: obs.csi.everest.io        # Dependent storage driver for the mounting.
          driver: obs.csi.everest.io        # Instance type.
          volumeHandle: <your_volume_id>    # Name of the OBS volume.
          volumeAttributes:
            storage.kubernetes.io/csiProvisionerIdentity: everest-csi-provisioner
            everest.io/obs-volume-type: STANDARD
            everest.io/region: <your_region>                        # Region where the OBS volume is.
            everest.io/enterprise-project-id: <your_project_id>     # (Optional) Enterprise project ID. If an enterprise project is specified, you need to use the same enterprise project when creating a PVC. Otherwise, the PVC cannot be bound to a PV.
          nodePublishSecretRef:            # Custom secret of the OBS volume.
            name: <your_secret_name>       # Custom secret name.
            namespace: <your_namespace>    # Namespace of the custom secret.
        persistentVolumeReclaimPolicy: Retain    # Reclaim policy.
        storageClassName: csi-obs               # Storage class name.
        mountOptions: []                         # Mount options.
      Tabla 2 Parámetros clave

      Parámetro

      Obligatorio

      Descripción

      everest.io/reclaim-policy: retain-volume-only

      No

      Opcional.

      Actualmente, solo se admite retain-volume-only.

      Este campo solo es válido cuando la versión más reciente es 1.2.9 o posterior y la política de recuperación es Delete. Si la política de reclamación es de Delete y el valor actual es de retain-volume-only el PV asociado se elimina mientras se conserva el volumen de almacenamiento subyacente cuando se elimina un PVC.

      fsType

      Tipo de instancia. El valor puede ser obsfs o s3fs.

      • obsfs: Sistema de archivos paralelo, que se monta usando obsfs (recomendado).
      • s3fs: Bucket de objetos, que se monta usando s3fs.

      volumeHandle

      Nombre del volumen de OBS.

      everest.io/obs-volume-type

      Clase de almacenamiento de OBS.

      • Si fsType se establece en s3fs, STANDARD (bucket estándar) y WARM (bucket de acceso poco frecuente) son compatibles.
      • Este parámetro no es válido cuando fsType se establece en obsfs.

      everest.io/region

      Región donde se despliega el bucket de OBS.

      Para obtener más información sobre el valor de region, consulte Regiones y puntos de conexión.

      everest.io/enterprise-project-id

      No

      Opcional.

      ID de proyecto de empresa de OBS. Si se especifica un proyecto de empresa, debe especificar el mismo proyecto de empresa al crear un PVC. De lo contrario, el PVC no puede estar unido a un PV.

      Cómo obtenerlo: En la consola de OBS, seleccione Buckets o Parallel File Systems en el panel de navegación de la izquierda. Haga clic en el nombre del bucket de OBS para acceder a su página de detalles. En el área Basic Information, busque el proyecto de empresa y haga clic en él para acceder a la consola del proyecto de empresa. Copie el ID correspondiente para obtener el ID del proyecto de empresa al que pertenece el almacenamiento de objetos.

      nodePublishSecretRef

      No

      Clave de acceso (AK/SK) utilizada para montar el volumen de almacenamiento de objetos. Puede utilizar la AK/SK para crear un secreto y montarlo en el PV. Para obtener más información, véase Uso de una AK/SK personalizada para montar un volumen de OBS.

      Un ejemplo es el siguiente:
      nodePublishSecretRef:
        name: secret-demo
        namespace: default

      mountOptions

      No

      Opciones de montaje. Para obtener más información, véase Configuración de opciones de montaje de OBS.

      persistentVolumeReclaimPolicy

      Se admite una política de recuperación cuando la versión del clúster es o posterior a 1.19.10 y la versión everest es o posterior a 1.2.9.

      Las políticas de recuperación Delete y Retain son compatibles. Para obtener más información, véase Política de reclamo de PV. Si varios PV utilizan el mismo volumen de OBS, utilice Retain para evitar la eliminación en cascada de volúmenes subyacentes.

      Delete:

      • Si no se especifica everest.io/reclaim-policy, tanto el PV como los recursos de almacenamiento se eliminan cuando se elimina un PVC.
      • Si everest.io/reclaim-policy se establece en retain-volume-only cuando se elimina un PVC, se elimina el PV pero se conservan los recursos de almacenamiento.

      Retain: Cuando se elimina un PVC, el PV y los recursos de almacenamiento subyacentes no se eliminan. En su lugar, debe eliminar manualmente estos recursos. Después de eso, el PV está en el estado Released y no puede estar ligado al PVC de nuevo.

      storage

      Capacidad de almacenamiento, en Gi.

      Para los bucket de OBS, este campo se utiliza solo para la verificación (no puede estar vacío o 0). Su valor se fija en 1 y cualquier valor que establezca no tiene efecto para los bucket de OBS.

      storageClassName

      El nombre de clase de almacenamiento de los volúmenes de OBS es csi-obs.

    2. Ejecute el siguiente comando para crear un PV:
      kubectl apply -f pv-obs.yaml

  3. Cree un PVC.

    1. Cree el archivo pvc-obs.yaml.
      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: pvc-obs
        namespace: default
        annotations:
          volume.beta.kubernetes.io/storage-provisioner: everest-csi-provisioner
          everest.io/obs-volume-type: STANDARD
          csi.storage.k8s.io/fstype: obsfs
          csi.storage.k8s.io/node-publish-secret-name: <your_secret_name>  # Custom secret name.
          csi.storage.k8s.io/node-publish-secret-namespace: <your_namespace>        # Namespace of the custom secret.
          everest.io/enterprise-project-id: <your_project_id>     # (Optional) Enterprise project ID. If an enterprise project is specified, you need to use the same enterprise project when creating a PVC. Otherwise, the PVC cannot be bound to a PV.
      spec:
        accessModes:
        - ReadWriteMany                  # The value must be ReadWriteMany for OBS.
        resources:
          requests:
            storage: 1Gi
        storageClassName: csi-obs       # Storage class name, which must be the same as that of the PV.
        volumeName: pv-obs    # PV name.
      Tabla 3 Parámetros clave

      Parámetro

      Obligatorio

      Descripción

      csi.storage.k8s.io/node-publish-secret-name

      No

      Nombre del secreto personalizado especificado en el PV.

      csi.storage.k8s.io/node-publish-secret-namespace

      No

      Espacio de nombres del secreto personalizado especificado en el PV.

      everest.io/enterprise-project-id

      No

      ID del proyecto de OBS.

      Cómo obtenerlo: En la consola de OBS, seleccione Buckets o Parallel File Systems en el panel de navegación de la izquierda. Haga clic en el nombre del bucket de OBS para acceder a su página de detalles. En el área Basic Information, busque el proyecto de empresa y haga clic en él para acceder a la consola del proyecto de empresa. Copie el ID correspondiente para obtener el ID del proyecto de empresa al que pertenece el almacenamiento de objetos.

      storage

      Capacidad solicitada en el PVC, en Gi.

      Para OBS, este campo se utiliza solo para verificación (no puede estar vacío o 0). Su valor se fija en 1 y cualquier valor que establezca no tiene efecto para OBS.

      storageClassName

      Nombre de la clase de almacenamiento, que debe ser el mismo que la clase de almacenamiento del PV en 1.

      El nombre de clase de almacenamiento de los volúmenes de OBS es csi-obs.

      volumeName

      Nombre de PV, que debe ser el mismo que el nombre de PV en 1.

    2. Ejecute el siguiente comando para crear un PVC:
      kubectl apply -f pvc-obs.yaml

  4. Cree una aplicación.

    1. Cree un archivo denominado web-demo.yaml. En este ejemplo, el volumen de OBS se monta en la ruta /data.
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: web-demo
        namespace: default
      spec:
        replicas: 2
        selector:
          matchLabels:
            app: web-demo
        template:
          metadata:
            labels:
              app: web-demo
          spec:
            containers:
            - name: container-1
              image: nginx:latest
              volumeMounts:
              - name: pvc-obs-volume    #Volume name, which must be the same as the volume name in the volumes field.
                mountPath: /data  #Location where the storage volume is mounted.
            imagePullSecrets:
              - name: default-secret
            volumes:
              - name: pvc-obs-volume    #Volume name, which can be customized.
                persistentVolumeClaim:
                  claimName: pvc-obs    #Name of the created PVC.
    2. Ejecute el siguiente comando para crear una aplicación en la que esté montado el volumen de OBS:
      kubectl apply -f web-demo.yaml

      Una vez creada la carga de trabajo, puede probar Verificación de la persistencia y el uso compartido de datos.

Verificación de la persistencia y el uso compartido de datos

  1. Vea las aplicaciones y los archivos desplegados.

    1. Ejecute el siguiente comando para ver los pods creados:
      kubectl get pod | grep web-demo
      Producto esperado:
      web-demo-846b489584-mjhm9   1/1     Running   0             46s
      web-demo-846b489584-wvv5s   1/1     Running   0             46s
    2. Ejecute los siguientes comandos en secuencia para ver los archivos en la ruta /data de los pods:
      kubectl exec web-demo-846b489584-mjhm9 -- ls /data
      kubectl exec web-demo-846b489584-wvv5s -- ls /data

      Si no se devuelve ningún resultado para ambos pods, no existe ningún archivo en la ruta /data.

  2. Ejecute el siguiente comando para crear un archivo llamado static en la ruta /data:

    kubectl exec web-demo-846b489584-mjhm9 --  touch /data/static

  3. Ejecute el siguiente comando para ver los archivos en la ruta /data:

    kubectl exec web-demo-846b489584-mjhm9 -- ls /data

    Producto esperado:

    static

  4. Verificar la persistencia de los datos.

    1. Ejecute el siguiente comando para eliminar el pod llamado web-demo-846b489584-mjhm9:
      kubectl delete pod web-demo-846b489584-mjhm9

      Producto esperado:

      pod "web-demo-846b489584-mjhm9" deleted

      Después de la eliminación, el controlador de Deployment crea automáticamente una réplica.

    2. Ejecute el siguiente comando para ver el pod creado:
      kubectl get pod | grep web-demo
      El resultado esperado es el siguiente, en el que web-demo-846b489584-d4d4j es el pod recién creado:
      web-demo-846b489584-d4d4j   1/1     Running   0             110s
      web-demo-846b489584-wvv5s    1/1     Running   0             7m50s
    3. Ejecute el siguiente comando para comprobar si se han modificado los archivos de la ruta /data del nuevo pod:
      kubectl exec web-demo-846b489584-d4d4j -- ls /data

      Producto esperado:

      static

      Si el archivo static todavía existe, los datos se pueden almacenar de forma persistente.

  5. Verifique el uso compartido de datos.

    1. Ejecute el siguiente comando para ver el pod creado:
      kubectl get pod | grep web-demo
      Producto esperado:
      web-demo-846b489584-d4d4j   1/1     Running   0             7m
      web-demo-846b489584-wvv5s   1/1     Running   0             13m
    2. Ejecute el siguiente comando para crear un archivo llamado share en la ruta /data de cualquier pod: En este ejemplo, seleccione el pod llamado web-demo-846b489584-d4d4j.
      kubectl exec web-demo-846b489584-d4d4j --  touch /data/share
      Compruebe los archivos en la ruta /data del pod.
      kubectl exec web-demo-846b489584-d4d4j -- ls /data

      Producto esperado:

      share
      static
    3. Compruebe si el archivo share existe en la ruta /data de otro pod (web-demo-846b489584-wvv5s) también para verificar el uso compartido de datos.
      kubectl exec web-demo-846b489584-wvv5s -- ls /data

      Producto esperado:

      share
      static

      Después de crear un archivo en la ruta /data de un pod, si el archivo también se crea en la ruta /data de otros pods, los dos pods comparten el mismo volumen.

Operaciones relacionadas

También puede realizar las operaciones que aparecen en Tabla 4.
Tabla 4 Operaciones relacionadas

Operación

Descripción

Procedimiento

Creación de un volumen de almacenamiento (PV)

Cree un PV en la consola de CCE.

  1. Elija Storage en el panel de navegación y haga clic en la ficha PersistentVolumes (PVs). Haga clic en Create Volume en la esquina superior derecha. En el cuadro de diálogo que se muestra, configure los parámetros.
    • Volume Type: Seleccione OBS.
    • OBS: Hga clic en Select OBS. En la página mostrada, seleccione el almacenamiento de OBS que cumpla con sus requisitos y haga clic en OK.
    • PV Name: Introduzca el nombre de PV, que debe ser único en el mismo clúster.
    • Access Mode: Los volúmenes de SFS solo admiten ReadWriteMany, lo que indica que un volumen de almacenamiento se puede montar en varios nodos en modo de lectura/escritura. Para obtener más información, véase Modos de acceso al volumen.
    • Reclaim Policy: Delete o Retain. Para obtener más información, véase Modos de acceso al volumen.
      NOTA:

      Si varios PV utilizan el mismo volumen de almacenamiento subyacente, utilice Retain para evitar la eliminación en cascada de volúmenes subyacentes.

    • Custom: Personalice un secreto si desea asignar diferentes permisos de usuario a diferentes dispositivos de almacenamiento de OBS. Para obtener más información, véase Uso de una AK/SK personalizada para montar un volumen de OBS.

      Solo se pueden seleccionar secretos con la etiqueta secret.kubernetes.io/used-by = csi. El tipo de secreto es cfe/secure-opaque. Si no hay ningún secreto disponible, haga clic en Create Secret para crear uno.

    • Mount Options: Introduzca los pares clave-valor del parámetro de montaje. Para obtener más información, véase Configuración de opciones de montaje de OBS.
  2. Haga clic en Create.

Actualización de una clave de acceso

Actualice la clave de acceso del almacenamiento de objetos en la consola de CCE.

  1. Elija Storage en el panel de navegación y haga clic en la ficha PersistentVolumeClaims (PVCs). Haga clic en More > Update Access Key en la columna Operation del PVC.
  2. Sube un archivo clave en formato .csv. Para obtener más información, véase Obtención de una clave de acceso. Haga clic en OK.
    NOTA:

    Después de actualizar una clave de acceso global, se puede acceder a todos los pods montados con el almacenamiento de objetos que utiliza esta clave de acceso solo después de reiniciarse.

Eventos

Puede ver los nombres de eventos, los tipos de eventos, el número de ocurrencias, los eventos de Kubernetes, la hora de primera ocurrencia y la hora de última ocurrencia del PVC o PV.

  1. Elija Storage en el panel de navegación y haga clic en la ficha PersistentVolumeClaims (PVCs) o PersistentVolumes (PVs).
  2. Haga clic en View Events en la columna Operation del PVC o del PV de destino para ver los eventos generados en una hora (los datos de eventos se conservan durante una hora).

Consulta de un archivo YAML

Puede ver, copiar y descargar los archivos YAML de un PVC o PV.

  1. Elija Storage en el panel de navegación y haga clic en la ficha PersistentVolumeClaims (PVCs) o PersistentVolumes (PVs).
  2. Haga clic en View YAML en la columna Operation del PVC o del PV de destino para ver o descargar el YAML.