Optimiza el rendimiento y el costo del almacenamiento con los grupos de almacenamiento de Hyperdisk


En esta página, se describe cómo los clústeres de Google Kubernetes Engine (GKE) pueden agrupar y compartir la capacidad de almacenamiento, la capacidad de procesamiento y los IOPS entre los discos mediante los grupos de almacenamiento de hiperdiscos de GKE.

Descripción general

Los grupos de almacenamiento agrupan de forma lógica los dispositivos de almacenamiento físicos, lo que te permite segmentar tus recursos. Puedes aprovisionar Hyperdisks de Google Cloud dentro de estos grupos de almacenamiento, lo que, en esencia, crea grupos de almacenamiento de Hyperdisk. Los grupos de almacenamiento de Hyperdisk ofrecen capacidad, capacidad de procesamiento y IOPS aprovisionados previamente que pueden compartir los discos de tu clúster de GKE.

Puedes usar los grupos de almacenamiento de Hyperdisk para administrar tus recursos de almacenamiento de manera más eficiente y rentable. Esto te permite aprovechar las tecnologías de eficiencia, como la deduplicación y el aprovisionamiento delgado.

En esta guía, usarás la zona us-east4-c para crear el grupo de almacenamiento balanceado de Hyperdisk y otros recursos.

Consideraciones de planificación

Considera los siguientes requisitos y limitaciones antes de aprovisionar y consumir tu grupo de almacenamiento de Hyperdisk.

Crea y administra grupos de almacenamiento

Se aplican los siguientes requisitos y limitaciones:

Aprovisiona discos de arranque en grupos de almacenamiento

Se aplican los siguientes requisitos y limitaciones:

  • Asegúrate de que las ubicaciones de los nodos del clúster y las ubicaciones de los nodos del grupo de nodos coincidan exactamente con las zonas del grupo de almacenamiento. Esta restricción no se aplica si tienes habilitado el aprovisionamiento automático de nodos. El aprovisionamiento automático de nodos puede crear automáticamente grupos de nodos en las zonas correctas si es necesario.
  • Asegúrate de que el tipo de máquina que ejecuta tu Pod admita la conexión del tipo de disco Hyperdisk Balanced. Hyperdisk Throughput no es compatible como disco de arranque. Consulta la documentación de compatibilidad de tipos de máquinas de Hyperdisk.
  • Puedes aprovisionar discos de arranque en grupos de almacenamiento solo en grupos de nodos creados o actualizados de forma manual.
  • Cuando los nodos se crean automáticamente con el aprovisionamiento automático de nodos, los discos de arranque de esos nodos no se pueden colocar dentro de un grupo de almacenamiento.

Aprovisiona un disco adjunto en grupos de almacenamiento

Se aplican los siguientes requisitos y limitaciones:

Cuota

Cuando creas un grupo de almacenamiento de Hyperdisk, puedes configurarlo con aprovisionamiento estándar o avanzado para la capacidad y el rendimiento. Si quieres aumentar la cuota de capacidad, capacidad de procesamiento o IOPS, solicita una cuota más alta para el filtro de cuota relevante.

Para obtener más información, consulta Cómo ver las cuotas de tu proyecto y Solicita una cuota mayor.

Usa los siguientes filtros de cuota para los grupos de almacenamiento de Hyperdisk Balanced:

  • HDB-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region: Para aumentar la capacidad con el aprovisionamiento de capacidad avanzada.
  • HDB-STORAGE-POOL-TOTAL-ADVANCED-IOPS-per-project-region: Para aumentar las IOPS con el aprovisionamiento de rendimiento avanzado.
  • HDB-STORAGE-POOL-TOTAL-ADVANCED-THROUGHPUT-per-project-region: Para aumentar la capacidad de procesamiento con el aprovisionamiento de rendimiento avanzado.
  • HDB-TOTAL-GB-per-project-region: Para aumentar la capacidad con el aprovisionamiento de capacidad estándar.
  • HDB-TOTAL-IOPS-per-project-region: Para aumentar las IOPS con el aprovisionamiento de rendimiento estándar.
  • HDB-TOTAL-THROUGHPUT-per-project-region: Para aumentar la capacidad de procesamiento con el aprovisionamiento de rendimiento estándar.

Usa los siguientes filtros de cuota para los grupos de almacenamiento de Hyperdisk Throughput:

  • HDT-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region: Para aumentar la capacidad con el aprovisionamiento de capacidad avanzada.
  • HDT-STORAGE-POOL-TOTAL-ADVANCED-THROUGHPUT-per-project-region: Para aumentar la capacidad de procesamiento con el aprovisionamiento de rendimiento avanzado.
  • HDT-TOTAL-GB-per-project-region: Para aumentar la capacidad con el aprovisionamiento de capacidad estándar.
  • HDT-TOTAL-THROUGHPUT-per-project-region: Para aumentar la capacidad de procesamiento con el aprovisionamiento de rendimiento estándar.

Por ejemplo, si deseas aumentar la capacidad total de los grupos de almacenamiento de Hyperdisk Balanced con aprovisionamiento de capacidad avanzado, por proyecto y por región, solicita una cuota más alta para el siguiente filtro:

hdb-storage-pool-total-advanced-capacity-per-project-region.

Precios

Consulta Precios de los grupos de almacenamiento de Hyperdisk para obtener más información.

Antes de comenzar

Antes de comenzar, asegúrate de haber realizado las siguientes tareas:

  • Habilita la API de Google Kubernetes Engine.
  • Habilitar la API de Google Kubernetes Engine
  • Si deseas usar Google Cloud CLI para esta tarea, instala y, luego, inicializa gcloud CLI. Si ya instalaste gcloud CLI, ejecuta gcloud components update para obtener la versión más reciente.

Crea un grupo de almacenamiento de Hyperdisk

Crea un grupo de almacenamiento de Hyperdisk antes de aprovisionar discos de arranque o discos conectados en ese grupo de almacenamiento. Para obtener más información, consulta Cómo crear grupos de almacenamiento de Hyperdisk.

Asegúrate de crear grupos de almacenamiento en una de las zonas compatibles.

Por ejemplo, usa el siguiente comando para crear un grupo de almacenamiento de Hyperdisk Balanced con capacidad avanzada y rendimiento avanzado, y aprovisiona 10 TB de capacidad, 10,000 IOPS por segundo y 1,024 MBps de capacidad de procesamiento en la zona us-east4-c:

export PROJECT_ID=PROJECT_ID
export ZONE=us-east4-c
gcloud compute storage-pools create pool-$ZONE \
    --provisioned-capacity=10tb --storage-pool-type=hyperdisk-balanced \
    --zone=$ZONE --project=$PROJECT_ID --capacity-provisioning-type=advanced \
    --performance-provisioning-type=advanced --provisioned-iops=10000 \
    --provisioned-throughput=1024

Reemplaza PROJECT_ID por el ID del proyecto de la cuenta de Google Cloud.

Inspecciona las zonas del grupo de almacenamiento

  • En el caso de los clústeres de Autopilot y los clústeres de Standard con el aprovisionamiento automático de nodos habilitado, puedes crear un grupo de almacenamiento en cualquier zona dentro de la región del clúster. Si no existe un grupo de nodos en la zona en la que creaste el grupo de almacenamiento, los Pods permanecerán en el estado Pending hasta que el escalador automático de clústeres de GKE pueda aprovisionar un grupo de nodos nuevo en esa zona.

  • En el caso de los clústeres Standard sin aprovisionamiento automático de nodos, crea grupos de almacenamiento en las zonas de nodos predeterminadas de tu clúster, ya que los grupos de almacenamiento son recursos zonales. Puedes configurar las zonas de los nodos de tu clúster con la marca --node-locations.

    • En el caso de los clústeres zonales, si no especificas --node-locations, todos los nodos se crearán en la zona principal del clúster.
    • En el caso de los clústeres regionales, si no especificas el --node-locations, GKE distribuye tus nodos de trabajo en tres zonas elegidas al azar dentro de la región.

Para inspeccionar las zonas de nodos predeterminadas de un clúster, ejecuta el siguiente comando:

gcloud container clusters describe CLUSTER_NAME  | yq '.locations'

Reemplaza CLUSTER_NAME por el nombre del clúster que crearías mientras aprovisionas un disco de arranque o un disco conectado.

Aprovisiona un disco de arranque de GKE en un grupo de almacenamiento de Hyperdisk

Puedes aprovisionar un disco de arranque de GKE en un grupo de almacenamiento de Hyperdisk cuando realices cualquiera de los siguientes pasos:

  • Cuando creas un clúster de GKE nuevo
  • Cuando creas un grupo de nodos nuevo
  • Cuando actualizas un grupo de nodos existente

Cuando creas un clúster

Para crear un clúster de GKE con discos de arranque aprovisionados en un grupo de almacenamiento, usa el siguiente comando:

gcloud container clusters create CLUSTER_NAME \
    --disk-type=DISK_TYPE --storage-pools=STORAGE_POOL,[...] \
    --node-locations=ZONE,[...] --machine-type=MACHINE_TYPE \
    --zone=ZONE

Reemplaza lo siguiente:

  • CLUSTER_NAME: Proporciona un nombre único para el clúster que creas.
  • DISK_TYPE: Establece este valor en hyperdisk-balanced.. Si se deja en blanco, el tipo de disco se establece de forma predeterminada en Hyperdisk Balanced.
  • STORAGE_POOL,[...]: Es una lista de rutas de acceso a los recursos del grupo de almacenamiento separadas por comas (por ejemplo, projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c) en las que se aprovisionarán los discos de inicio del clúster. Asegúrate de que las zonas de las rutas de acceso de los recursos del grupo de almacenamiento coincidan con las zonas de --node-locations.
  • ZONE,[...]: Es una lista separada por comas de las zonas en las que se debe replicar tu espacio en el nodo. Para los clústeres regionales, puedes especificar regiones en su lugar. Todas las zonas deben estar en la misma región que el clúster, especificado por las marcas -location, --zone o --region.
  • MACHINE_TYPE: Es el tipo de máquina compatible que deseas usar para tus nodos.
  • ZONE: Es la zona en la que deseas crear el clúster. Usa la marca —region para crear un clúster regional.

Cuando creas un grupo de nodos

Para crear un grupo de nodos de GKE con discos de arranque aprovisionados en un grupo de almacenamiento, usa el siguiente comando:

gcloud container node-pools create NODE_POOL_NAME \
    --disk-type=DISK_TYPE --storage-pools=STORAGE_POOL,[...] \
    --node-locations=ZONE,[...] --machine-type=MACHINE_TYPE \
    --zone=ZONE --cluster=CLUSTER_NAME

Reemplaza lo siguiente:

  • NODE_POOL_NAME: Proporciona un nombre único para el grupo de nodos que creas.
  • DISK_TYPE: Establece este valor en hyperdisk-balanced.. Si se deja en blanco, el tipo de disco se establece de forma predeterminada en Hyperdisk Balanced.
  • STORAGE_POOL,[...]: Es una lista de rutas de acceso a los recursos del grupo de almacenamiento separadas por comas (por ejemplo, projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c) en las que se aprovisionarán los discos de inicio del clúster. Asegúrate de que las zonas de las rutas de acceso a los recursos del grupo de almacenamiento coincidan con los valores de --node-locations.
  • ZONE,[...]: Es una lista separada por comas de las zonas en las que se debe replicar tu espacio en el nodo. Todas las zonas deben estar en la misma región que el clúster, especificado por las marcas -location, --zone o --region.
  • MACHINE_TYPE: Es el tipo de máquina compatible que deseas usar para tus nodos.
  • ZONE: Es la zona en la que deseas crear el grupo de nodos.
  • CLUSTER_NAME: Es un clúster existente en el que creas el grupo de nodos.

Cuando actualizas un grupo de nodos

Puedes usar un comando update para agregar o reemplazar grupos de almacenamiento en un grupo de nodos. No se puede usar este comando para quitar grupos de almacenamiento de un grupo de nodos.

Para actualizar un grupo de nodos de GKE de modo que sus discos de inicio se aprovisionen en un grupo de almacenamiento, usa el siguiente comando.

gcloud container node-pools update NODE_POOL_NAME \
  --storage-pools=STORAGE_POOL,[...] \
  --zone=ZONE --cluster=CLUSTER_NAME
  • NODE_POOL_NAME: Es el nombre de un grupo de nodos existente que deseas actualizar para usar un grupo de almacenamiento.
  • STORAGE_POOL,[...]: Es una lista separada por comas de las rutas de acceso a los recursos del grupo de almacenamiento existentes (por ejemplo, projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c). Asegúrate de que las zonas de las rutas de acceso a los recursos del grupo de almacenamiento coincidan con la zona del grupo de nodos que estás actualizando.
  • ZONE: Es la zona en la que se encuentra el grupo de nodos.
  • CLUSTER_NAME: Es el nombre del clúster de GKE al que pertenece este grupo de nodos.

GKE actualiza el grupo de nodos según la estrategia de actualización del grupo de nodos.

Aprovisiona un disco conectado a GKE en un grupo de almacenamiento de Hyperdisk

En esta sección, encontrará lo siguiente:

  • Crea un clúster de GKE nuevo con discos conectados aprovisionados en un grupo de almacenamiento.
  • Crea una StorageClass para aprovisionar de forma dinámica un PersistentVolume (PV) cuando un Pod lo solicite a través de una PersistentVolumeClaim (PVC). Para que un PV consuma los recursos compartidos del grupo de almacenamiento, debes especificarlo con el parámetro storage-pools en tu StorageClass. Luego, se usa StorageClass en un PVC para aprovisionar el volumen Hyperdisk Balanced que usará el Pod.
  • Crea un PVC para solicitar un PV (un elemento de almacenamiento de Hyperdisk) para un Pod de tu clúster de GKE. Esto te permite beneficiarte de los recursos compartidos del grupo de almacenamiento.
  • Crea una implementación que use un PVC para garantizar que tu aplicación tenga acceso al almacenamiento persistente, incluso después de que se reinicie el pod y se vuelva a programar.

Cree un clúster de GKE

Antes de comenzar, revisa las consideraciones para aprovisionar un disco conectado.

Autopilot

Para crear un clúster de Autopilot con gcloud CLI, consulta Crea un clúster de Autopilot.

Ejemplo:

gcloud container clusters create-auto CLUSTER_NAME --region=REGION

Reemplaza lo siguiente:

  • CLUSTER_NAME: Proporciona un nombre único para el clúster que creas.
  • REGION: Es la región en la que crearás el clúster.

Para seleccionar un tipo de máquina compatible, especifica el cloud.google.com/compute-class: PerformancenodeSelector mientras creas una implementación. Para obtener una lista de las series de máquinas de Compute Engine disponibles con la clase de procesamiento de rendimiento, consulta Series de máquinas compatibles.

Estándar

Para crear un clúster zonal estándar con gcloud CLI, consulta Crea un clúster zonal.

Para crear un clúster regional estándar con gcloud CLI, consulta Crea un clúster regional.

Ejemplo:

gcloud container clusters create CLUSTER_NAME --zone=ZONE --project=PROJECT_ID --machine-type=MACHINE_TYPE --disk-type="DISK_TYPE"

Reemplaza lo siguiente:

  • CLUSTER_NAME: Proporciona un nombre único para el clúster que creas.
  • ZONE: Es la zona en la que crearás el clúster. Usa la marca —region para crear un clúster regional.
  • PROJECT_ID: Es el ID del proyecto de tu cuenta de Google Cloud.
  • MACHINE_TYPE: Es el tipo de máquina compatible que deseas usar para tus nodos.
  • DISK_TYPE: Establece este valor en hyperdisk-balanced.. Si se deja en blanco, el tipo de disco se establece de forma predeterminada en Hyperdisk Balanced.

Crea un StorageClass

En Kubernetes, para indicar que deseas que tu PV se cree dentro de un grupo de almacenamiento, usa una StorageClass. Para obtener más información, consulta StorageClasses.

Para crear una StorageClass nueva con el nivel de capacidad de procesamiento o IOPS que desees, sigue estos pasos:

  • Usa pd.csi.storage.gke.io en el campo del aprovisionador.
  • Especifica el tipo de almacenamiento Hyperdisk Balanced.
  • Especifica el parámetro storage-pools con el valor como una lista de los grupos de almacenamiento específicos que deseas usar. Cada grupo de almacenamiento de la lista debe especificarse en el formato: projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME.
  • De forma opcional, especifica los parámetros de rendimiento provisioned-throughput-on-create y provisioned-iops-on-create..

Cada tipo de Hyperdisk tiene valores predeterminados para el rendimiento determinado por el tamaño de disco inicial aprovisionado. Cuando creas una StorageClass, puedes especificar de forma opcional los siguientes parámetros según tu tipo de Hyperdisk. Si omites estos parámetros, GKE usa los valores predeterminados del tipo de disco basado en la capacidad.

Parámetro Tipo de Hyperdisk Uso
provisioned-throughput-on-create Hyperdisk Balanced, Hyperdisk Throughput Expresa el valor de capacidad de procesamiento en MiBps con el calificador “Mi” Por ejemplo, si la capacidad de procesamiento requerida es de 250 MiBps, especifica "250Mi" cuando crees la StorageClass.
provisioned-iops-on-create Hyperdisk Balanced, Hyperdisk IOPS El valor de IOPS debe expresarse sin ningún calificador. Por ejemplo, si necesitas 7,000 IOPS, especifica "7000" cuando crees la StorageClass.

Para obtener orientación sobre los valores permitidos de capacidad de procesamiento o IOPS, consulta Planifica el nivel de rendimiento del volumen de Hyperdisk.

Usa el siguiente manifiesto para crear y aplicar una StorageClass llamada storage-pools-sc para aprovisionar de forma dinámica un PV en el grupo de almacenamiento projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c:

kubectl apply -f - <<EOF
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: storage-pools-sc
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
  type: hyperdisk-balanced
  provisioned-throughput-on-create: "140Mi"
  provisioned-iops-on-create: "3000"
  storage-pools: projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
EOF

Cuando se usa volumeBindingMode: WaitForFirstConsumer en esta StorageClass, la vinculación y el aprovisionamiento de una PVC se retrasan hasta que se crea un Pod que usa la PVC. Este enfoque garantiza que el PV no se aprovisione de forma prematura y que haya una coincidencia de zona entre el PV y el Pod que lo consume. Si sus zonas no coinciden, el Pod permanece en un estado Pending.

Crea un PersistentVolumeClaim (PVC)

Crea una PVC que haga referencia a la StorageClass storage-pools-sc que creaste.

Usa el siguiente manifiesto para crear un PVC llamado my-pvc, con 2048 GiB como la capacidad de almacenamiento objetivo del volumen de hiperdisco balanceado:

kubectl apply -f - <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  storageClassName: storage-pools-sc
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 2048Gi
EOF

Crea un Deployment que use el PVC

Práctica recomendada:

Cuando uses Pods con PersistentVolumes, usa un controlador de carga de trabajo, como Deployment o StatefulSet.

Para garantizar que los Pods se puedan programar en un grupo de nodos con una serie de máquinas que admita Hyperdisk Balanced, configura una implementación con el selector de nodos cloud.google.com/machine-family. Para obtener más información, consulta la compatibilidad con tipos de máquinas de Hyperdisks. En la siguiente implementación de ejemplo, usas la serie de máquinas c3.

Crea y aplica el siguiente manifiesto para configurar un Pod para implementar un servidor web Postgres con el PVC creado en la sección anterior:

Autopilot

En los clústeres de Autopilot, especifica el nodeSelector cloud.google.com/compute-class: Performance para aprovisionar un volumen equilibrado de Hyperdisk. Para obtener más información, consulta Solicita un nodo dedicado para un Pod.

kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
spec:
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      nodeSelector:
        cloud.google.com/machine-family: c3
        cloud.google.com/compute-class: Performance
      containers:
      - name: postgres
        image: postgres:14-alpine
        args: [ "sleep", "3600" ]
        volumeMounts:
        - name: sdk-volume
          mountPath: /usr/share/data/
      volumes:
      - name: sdk-volume
        persistentVolumeClaim:
          claimName: my-pvc
EOF

Estándar

En los clústeres estándar sin el aprovisionamiento automático de nodos habilitado, asegúrate de que un grupo de nodos con la serie de máquinas especificada esté en funcionamiento antes de crear la implementación. De lo contrario, el Pod no se programará.

kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
spec:
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      nodeSelector:
        cloud.google.com/machine-family: c3
      containers:
      - name: postgres
        image: postgres:14-alpine
        args: [ "sleep", "3600" ]
        volumeMounts:
        - name: sdk-volume
          mountPath: /usr/share/data/
      volumes:
      - name: sdk-volume
        persistentVolumeClaim:
          claimName: my-pvc
EOF

Confirma que el objeto Deployment se haya creado correctamente:

  kubectl get deployment

Es posible que las instancias de Hyperdisk tarden unos minutos en completar el aprovisionamiento y mostrar un estado READY.

Confirma si el disco conectado está aprovisionado

  1. Verifica si tu PVC llamado my-pvc se vinculó correctamente a un PV:

    kubectl get pvc my-pvc
    

    El resultado es similar a este:

    
    NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       AGE
    my-pvc        Bound    pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6   2Ti        RWO            storage-pools-sc   2m24s
    
  2. Verifica si el volumen se aprovisionó como se especifica en tu StorageClass y PVC:

    gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
    

    El resultado es similar a este:

    NAME                                      STATUS  PROVISIONED_IOPS  PROVISIONED_THROUGHPUT  SIZE_GB
    pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6  READY   3000              140                     2048
    

Crea instantáneas de discos conectados y restablecelos en grupos de almacenamiento

No se permite mover discos dentro o fuera de un grupo de almacenamiento. Para mover un disco dentro o fuera de un grupo de almacenamiento, vuelve a crearlo a partir de una instantánea. Para obtener más información, consulta Cambia el tipo de disco.

En esta sección, encontrará lo siguiente:

Crea un archivo de prueba

Para crear y verificar un archivo de prueba, sigue estos pasos:

  1. Obtén el nombre del Pod de la implementación de Postgres:

    kubectl get pods -l app=postgres
    

    El resultado es similar a este:

    NAME                         READY   STATUS    RESTARTS   AGE
    postgres-78fc84c9ff-77vx6   1/1     Running   0          44s
    
  2. Crea un archivo de prueba hello.txt en el Pod:

    kubectl exec postgres-78fc84c9ff-77vx6 \
      -- sh -c 'echo "Hello World!" > /usr/share/data/hello.txt'
    
  3. Verifica que se haya creado el archivo de prueba:

    kubectl exec postgres-78fc84c9ff-77vx6 \
      -- sh -c 'cat /usr/share/data/hello.txt'
    Hello World!
    

Crea una instantánea de volumen y borra el archivo de prueba

Para crear y verificar una instantánea, sigue estos pasos:

  1. Crea una VolumeSnapshotClass que especifique cómo se debe tomar y administrar la instantánea de tus volúmenes:

    kubectl apply -f - <<EOF
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: my-snapshotclass
    driver: pd.csi.storage.gke.io
    deletionPolicy: Delete
    EOF
    
  2. Crea una VolumeSnapshot y toma la instantánea del volumen que está vinculado al PersistentVolumeClaim my-pvc:

    kubectl apply -f - <<EOF
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: my-snapshot
    spec:
      volumeSnapshotClassName: my-snapshotclass
      source:
        persistentVolumeClaimName: my-pvc
    EOF
    
  3. Verifica que se haya creado el contenido de la instantánea de volumen:

    kubectl get volumesnapshotcontents
    

    El resultado es similar a este:

    NAME                                               READYTOUSE   RESTORESIZE     DELETIONPOLICY   DRIVER                  VOLUMESNAPSHOTCLASS   VOLUMESNAPSHOT   VOLUMESNAPSHOTNAMESPACE   AGE
    snapcontent-e778fde2-5f1c-4a42-a43d-7f9d41d093da   false        2199023255552   Delete           pd.csi.storage.gke.io   my-snapshotclass      my-snapshot      default                   33s
    
  4. Confirma que la instantánea esté lista para usarse:

    kubectl get volumesnapshot \
      -o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
    

    El resultado es similar a este:

    NAME          READY
    my-snapshot   true
    
  5. Borra el archivo de prueba original hello.txt que se creó en el Pod postgres-78fc84c9ff-77vx6:

    kubectl exec postgres-78fc84c9ff-77vx6 \
        -- sh -c 'rm /usr/share/data/hello.txt'
    

Restablece la instantánea de volumen

Para restablecer la instantánea y los datos del volumen, sigue estos pasos:

  1. Crea un PVC nuevo que restablezca los datos de una instantánea y asegúrate de que el volumen nuevo se aprovisione en el mismo grupo de almacenamiento (storage-pools-sc) que el volumen original. Aplica el siguiente manifiesto:

    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-restore
    spec:
      dataSource:
        name: my-snapshot
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io
      storageClassName: storage-pools-sc
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 2048Gi
    EOF
    
  2. Actualiza la implementación existente llamada postgres para que use el PVC restaurado recién creado. Aplica el siguiente manifiesto:

    kubectl apply -f - <<EOF
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: postgres
    spec:
      selector:
        matchLabels:
          app: postgres
      template:
        metadata:
          labels:
            app: postgres
        spec:
          nodeSelector:
            cloud.google.com/machine-family: c3
          containers:
          - name: postgres
            image: google/cloud-sdk:slim
            args: [ "sleep", "3600" ]
            volumeMounts:
            - name: sdk-volume
              mountPath: /usr/share/data/
          volumes:
          - name: sdk-volume
            persistentVolumeClaim:
              claimName: pvc-restore
    EOF
    
  3. Obtén el nombre del Pod recién creado que forma parte de la implementación de postgres:

    kubectl get pods -l app=postgres
    

    El resultado es similar a este:

    NAME                         READY   STATUS        RESTARTS   AGE
    postgres-59f89cfd8c-42qtj   1/1     Running       0          40s
    
  4. Verifica que el archivo hello.txt, que se borró anteriormente, ahora exista en el Pod nuevo (postgres-59f89cfd8c-42qtj) después de restablecer el volumen desde la instantánea:

    kubectl exec postgres-59f89cfd8c-42qtj \
     -- sh -c 'cat /usr/share/data/hello.txt'
    Hello World!
    

    Esto valida que el proceso de instantánea y restablecimiento se completó correctamente y que los datos de la instantánea se restablecieron en el nuevo PV al que puede acceder el Pod.

  5. Confirma que el volumen creado a partir de la instantánea se encuentre dentro de tu grupo de almacenamiento:

    kubectl get pvc pvc-restore
    

    El resultado es similar a este:

    NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       AGE
    pvc-restore   Bound    pvc-b287c387-bc51-4100-a00e-b5241d411c82   2Ti        RWO            storage-pools-sc   2m24s
    
  6. Verifica si el volumen nuevo se aprovisionó como se especifica en tu StorageClass y PVC:

    gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
    

    El resultado es similar al siguiente, en el que puedes ver el nuevo volumen pvc-b287c387-bc51-4100-a00e-b5241d411c82 aprovisionado en el mismo grupo de almacenamiento.

    
    NAME                                      STATUS  PROVISIONED_IOPS  PROVISIONED_THROUGHPUT  SIZE_GB
    pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6  READY   3000              140                     2048
    pvc-b287c387-bc51-4100-a00e-b5241d411c82  READY   3000              140                     2048
    

    Esto garantiza que el volumen restaurado se beneficie de los recursos y las capacidades compartidos del grupo.

Migra volúmenes existentes a un grupo de almacenamiento

Usa la instantánea y el restablecimiento para migrar volúmenes que existen fuera de un grupo de almacenamiento a un grupo de almacenamiento.

Asegúrate de que se cumplan las siguientes condiciones:

  • Tu nuevo pvc-restore de PVC hace referencia a una StorageClass que especifica el parámetro storage-pools, que apunta al grupo de almacenamiento al que deseas mover el volumen.
  • El PV de origen del que se crea una instantánea debe estar asociado con un PVC con una StorageClass que no especifique el parámetro storage-pools.

Después de restablecer desde una instantánea a un volumen nuevo, puedes borrar el PVC y el PV de origen.

Libera espacio

Para evitar que se apliquen cargos a tu cuenta de Google Cloud, borra los recursos de almacenamiento que creaste en esta guía. Primero, borra todos los discos dentro del grupo de almacenamiento y, luego, borra el grupo de almacenamiento.

Borra el disco de arranque

Cuando borras un nodo (reduciendo el grupo de nodos) o un grupo de nodos completo, los discos de arranque asociados se borran automáticamente. También puedes borrar el clúster para borrar automáticamente los discos de inicio de todos los grupos de nodos que contiene.

Para obtener más información, consulte:

Borra el disco adjunto

Para borrar el disco conectado aprovisionado en un grupo de almacenamiento de Hyperdisk, sigue estos pasos:

  1. Borra el Pod que usa el PVC:

    kubectl delete deployments postgres
    
  2. Borra la PVC que usa el StorageClass del grupo de almacenamiento de Hyperdisk.

    kubectl delete pvc my-pvc
    

    Confirma que se haya borrado el PVC pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6:

    gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
    

Borra el grupo de almacenamiento de Hyperdisk

Borra el grupo de almacenamiento de Hyperdisk con el siguiente comando:

gcloud compute storage-pools delete pool-us-east4-c --zone=us-east4-c --project=my-project

¿Qué sigue?