En esta página se describe cómo pueden agrupar y compartir capacidad de almacenamiento, rendimiento y IOPS entre discos tus clústeres de Google Kubernetes Engine (GKE) mediante los grupos de almacenamiento de Hyperdisk de GKE.
Información general
Los grupos de almacenamiento agrupan de forma lógica los dispositivos de almacenamiento físico, lo que te permite segmentar tus recursos. Puedes aprovisionar Hyperdisks de Google Cloud en estos grupos de almacenamiento, lo que crea grupos de almacenamiento de Hyperdisk. Los grupos de almacenamiento Hyperdisk ofrecen capacidad, rendimiento y IOPS preaprovisionados que pueden compartir los discos de tu clúster de GKE.
Puedes usar los grupos de almacenamiento de Hyperdisk para gestionar tus recursos de almacenamiento de forma más eficiente y rentable. De esta forma, puedes aprovechar tecnologías de eficiencia como la deduplicación y el aprovisionamiento ligero.
En esta guía, usarás la zona us-east4-c
para crear el grupo de almacenamiento equilibrado de Hyperdisk y otros recursos.
Consideraciones de planificación
Antes de aprovisionar y consumir tu grupo de almacenamiento de Hyperdisk, ten en cuenta los siguientes requisitos y limitaciones.
Crear y gestionar grupos de almacenamiento
Se aplican los siguientes requisitos y limitaciones:
- Se aplican todas las limitaciones de los grupos de almacenamiento de Hyperdisk de Compute Engine.
- Se aplican todas las limitaciones de crear discos en un grupo de almacenamiento de Hyperdisk.
- El tipo de grupo de almacenamiento de Hyperdisk que crees determina el tipo de discos que puedes crear en el grupo de almacenamiento. Consulta Tipos de grupos de almacenamiento de Hyperdisk.
Aprovisionar discos de arranque en grupos de almacenamiento
Se aplican los siguientes requisitos y limitaciones:
- El aprovisionamiento de discos de arranque en grupos de almacenamiento no se admite en grupos de nodos con la función aprovisionamiento automático de nodos habilitada.
- 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.
- Asegúrate de que el tipo de máquina que ejecuta tu pod admita la conexión de Hyperdisk Balanced. Hyperdisk Throughput no se puede usar como disco de arranque. Consulta la documentación sobre la compatibilidad de Hyperdisk con los tipos de máquinas.
- Solo puedes aprovisionar discos de arranque en grupos de almacenamiento en grupos de nodos creados o actualizados manualmente.
Aprovisionar discos conectados en grupos de almacenamiento
Se aplican los siguientes requisitos y limitaciones:
- La versión mínima de GKE necesaria para aprovisionar discos adjuntos en grupos de almacenamiento es la 1.29.2-gke.1035000 o una posterior.
- Comprueba que el controlador de CSI para Persistent Disk en Compute Engine esté habilitado. El controlador de disco persistente de Compute Engine está habilitado de forma predeterminada en los clústeres Autopilot y Standard nuevos, y no se puede inhabilitar ni editar en los clústeres Autopilot. Para habilitar el controlador, consulta Habilitar el controlador de CSI para Persistent Disk en Compute Engine en un clúster.
- Comprueba que el grupo de almacenamiento esté en al menos una de las ubicaciones de los nodos del clúster y en las ubicaciones de los nodos del grupo de nodos.
- Solo puedes aprovisionar discos conectados de Hyperdisk Throughput y Hyperdisk Balanced en grupos de almacenamiento. El tipo del disco adjunto debe coincidir con el tipo del grupo de almacenamiento. Para obtener más información, consulta Tipos de grupos de almacenamiento de Hyperdisk.
- En un StorageClass, solo se permite un pool de almacenamiento por zona.
- En un StorageClass, todos los grupos de almacenamiento deben tener el tipo de grupo de almacenamiento.
- Asegúrate de que el tipo de máquina que ejecuta tu pod admita adjuntar el tipo de disco que estás usando desde el pool de almacenamiento. Para obtener más información, consulta Tipos de máquinas compatibles con Hyperdisk.
Cuota
Al crear un grupo de almacenamiento de Hyperdisk, puedes configurarlo con aprovisionamiento estándar o avanzado de capacidad y rendimiento. Si quiere aumentar la cuota de capacidad, de rendimiento o de IOPS, solicite una cuota más alta para el filtro de cuota correspondiente.
Para obtener más información, consulta Ver las cuotas de tu proyecto y Solicitar un ajuste de cuota.
Usa los siguientes filtros de cuota para los grupos de almacenamiento equilibrados de Hyperdisk:
HDB-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region
: para aumentar la capacidad con el aprovisionamiento avanzado de capacidad.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 el rendimiento 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 el rendimiento con el aprovisionamiento de rendimiento estándar.
Usa los siguientes filtros de cuota para los grupos de almacenamiento de rendimiento de Hyperdisk:
HDT-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region
: para aumentar la capacidad con el aprovisionamiento avanzado de capacidad.HDT-STORAGE-POOL-TOTAL-ADVANCED-THROUGHPUT-per-project-region
: para aumentar el rendimiento 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 el rendimiento con el aprovisionamiento de rendimiento estándar.
Por ejemplo, si quieres aumentar la capacidad total de los grupos de almacenamiento de HyperDisk equilibrados con aprovisionamiento de capacidad avanzado por proyecto y por región, solicita un aumento de cuota para el siguiente filtro:
hdb-storage-pool-total-advanced-capacity-per-project-region
.
Precios
Para obtener información sobre los precios, consulta la sección Precios de los grupos de almacenamiento de Hyperdisk .
Antes de empezar
Antes de empezar, asegúrate de haber realizado las siguientes tareas:
- Habilita la API de Google Kubernetes Engine. Habilitar la API de Google Kubernetes Engine
- Si quieres usar Google Cloud CLI para esta tarea, instálala y, a continuación, inicialízala. Si ya has instalado la gcloud CLI, obtén la versión más reciente ejecutando
gcloud components update
.
- Consulta las regiones y zonas admitidas para crear tu grupo de almacenamiento Hyperdisk Balanced.
Crear 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 Crear grupos de almacenamiento de Hyperdisk.
Crea los grupos de almacenamiento en una de las zonas admitidas.
Por ejemplo, usa el siguiente comando para crear un grupo de almacenamiento Hyperdisk Balanced con capacidad y rendimiento avanzados, y aprovisiona 10 TB de capacidad, 10.000 IOPS/s y 1024 MBps de rendimiento 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
Sustituye PROJECT_ID
por el ID de tu cuenta o proyecto. Google Cloud
Inspeccionar zonas de grupos de almacenamiento
En los clústeres de Autopilot y los clústeres estándar con aprovisionamiento automático de nodos habilitado, puedes crear un grupo de almacenamiento en cualquier zona de la región del clúster. Si no hay ningún grupo de nodos en la zona en la que has creado el grupo de almacenamiento, los pods permanecerán en el estado
Pending
hasta que la herramienta de adaptación dinámica del clúster de GKE pueda aprovisionar un nuevo grupo de nodos en esa zona.En los clústeres estándar 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 definir las zonas de los nodos de tu clúster con la marca
--node-locations
.- En los clústeres zonales, si no especificas el
--node-locations
, todos los nodos se crean en la zona principal del clúster. - En el caso de los clústeres regionales, si no especificas el
--node-locations
, GKE distribuye los nodos de trabajador en tres zonas elegidas aleatoriamente dentro de la región.
- En los clústeres zonales, si no especificas el
Para inspeccionar las zonas de nodos predeterminadas de un clúster, ejecuta el siguiente comando:
gcloud container clusters describe CLUSTER_NAME | yq '.locations'
Sustituye CLUSTER_NAME
por el nombre del clúster que quieras crear al aprovisionar un disco de arranque o un disco conectado.
Aprovisionar 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 hagas lo siguiente:
- Al crear un clúster de GKE
- Al crear un grupo de nodos
- Al actualizar un grupo de nodos
Al crear un clúster
Para crear un clúster de GKE con discos de arranque aprovisionados en un pool 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 \
--location=CONTROL_PLANE_LOCATION
Haz los cambios siguientes:
CLUSTER_NAME
: Proporciona un nombre único para el clúster que vas a crear.DISK_TYPE
: asigna el valorhyperdisk-balanced.
. Si se deja en blanco, el tipo de disco será Hyperdisk Balanced de forma predeterminada.STORAGE_POOL,[...]
: lista separada por comas de las rutas de recursos del grupo de almacenamiento (por ejemplo,projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
) donde se aprovisionarán los discos de arranque del clúster. Asegúrate de que las zonas de las rutas de recursos del pool de almacenamiento coincidan con las zonas de--node-locations
.ZONE,[...]
: lista de zonas separadas por comas en las que se debe replicar la huella de tu nodo. En el caso de los clústeres regionales, puedes especificar regiones. Todas las zonas deben estar en la misma región que el clúster, especificada por la marca--location
.MACHINE_TYPE
: el tipo de máquina admitido que quieras usar en tus nodos.CONTROL_PLANE_LOCATION
: la ubicación de Compute Engine del plano de control de tu clúster. Proporciona una región para los clústeres regionales o una zona para los clústeres zonales.
Al crear 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 \
--location=CONTROL_PLANE_LOCATION --cluster=CLUSTER_NAME
Sustituye lo siguiente:
NODE_POOL_NAME
: Proporciona un nombre único para el grupo de nodos que vas a crear.DISK_TYPE
: asigna el valorhyperdisk-balanced.
. Si se deja en blanco, el tipo de disco será Hyperdisk Balanced de forma predeterminada.STORAGE_POOL,[...]
: lista separada por comas de las rutas de recursos del grupo de almacenamiento (por ejemplo,projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
) donde se aprovisionarán los discos de arranque del clúster. Asegúrate de que las zonas de las rutas de recursos del grupo de almacenamiento coincidan con los valores de--node-locations
.ZONE,[...]
: lista de zonas separadas por comas en las que se debe replicar la huella de tu nodo. Todas las zonas deben estar en la misma región que el clúster, especificada por la marca-location
.MACHINE_TYPE
: el tipo de máquina admitido que quieras usar en tus nodos.CONTROL_PLANE_LOCATION
: la ubicación de Compute Engine del plano de control de tu clúster. Proporciona una región para los clústeres regionales o una zona para los clústeres zonales.CLUSTER_NAME
: Un clúster en el que vas a crear el grupo de nodos.
Al actualizar un grupo de nodos
Puedes usar el comando update
para añadir o sustituir grupos de almacenamiento en un grupo de nodos.
Este comando no se puede usar para quitar grupos de almacenamiento de un grupo de nodos.
Para actualizar un grupo de nodos de GKE de forma que sus discos de arranque se aprovisionen en un pool de almacenamiento, usa el siguiente comando.
gcloud container node-pools update NODE_POOL_NAME \
--storage-pools=STORAGE_POOL,[...] \
--location=CONTROL_PLANE_LOCATION --cluster=CLUSTER_NAME
NODE_POOL_NAME
: nombre de un grupo de nodos que ya exista y que quieras actualizar para que use un grupo de almacenamiento.STORAGE_POOL,[...]
: lista separada por comas de rutas de recursos de grupos de almacenamiento (por ejemplo,projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
). Asegúrate de que las zonas de las rutas de recursos de grupos de almacenamiento coincidan con la zona del grupo de nodos que vas a actualizar.CONTROL_PLANE_LOCATION
: la ubicación de Compute Engine del plano de control de tu clúster. Proporciona una región para los clústeres regionales o una zona para los clústeres zonales.CLUSTER_NAME
: el nombre del clúster de GKE al que pertenece este grupo de nodos.
Para aplicar este cambio, es necesario volver a crear los nodos, lo que puede provocar interrupciones en las cargas de trabajo en ejecución. Para obtener información sobre este cambio concreto, busca la fila correspondiente en la tabla Cambios manuales que recrean los nodos mediante una estrategia de actualización de nodos sin respetar las políticas de mantenimiento. Para obtener más información sobre las actualizaciones de nodos, consulta Planificar interrupciones de actualizaciones de nodos.
Aprovisionar un disco adjunto de GKE en un grupo de almacenamiento Hyperdisk
En esta sección:
- Crea un clúster de GKE con discos adjuntos 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 un PersistentVolumeClaim (PVC). Para que un PV consuma los recursos compartidos del grupo de almacenamiento, debes especificar el grupo de almacenamiento mediante el parámetro
storage-pools
en tu StorageClass. La StorageClass se usa en una PVC para aprovisionar el volumen Hyperdisk Balanced que usará el pod. - Crea un PVC para solicitar un PV (una parte del almacenamiento de Hyperdisk) para un Pod de tu clúster de GKE. De esta forma, puedes beneficiarte de los recursos compartidos del grupo de almacenamiento.
- Crea un Deployment que use una PVC para asegurarte de que tu aplicación tenga acceso al almacenamiento persistente incluso después de que se reinicien y se vuelvan a programar los pods.
Crear un clúster de GKE
Antes de empezar, consulta las consideraciones para aprovisionar un disco adjunto.
Autopilot
Para crear un clúster de Autopilot con la CLI de gcloud, consulta Crear un clúster de Autopilot.
Ejemplo:
gcloud container clusters create-auto CLUSTER_NAME --location=CONTROL_PLANE_LOCATION
Haz los cambios siguientes:
CLUSTER_NAME
: proporciona un nombre único para el clúster que vas a crear.CONTROL_PLANE_LOCATION
: la región de Compute Engine del plano de control de tu clúster.
Para seleccionar un tipo de máquina compatible, especifica el cloud.google.com/compute-class: Performance
nodeSelector al crear un Deployment. Para ver una lista de las series de máquinas de Compute Engine disponibles con la clase de computación Rendimiento, consulta Series de máquinas admitidas.
Estándar
Para crear un clúster zonal estándar con la CLI de gcloud, consulta Crear un clúster zonal.
Para crear un clúster regional estándar con la CLI de gcloud, consulta Crear un clúster regional.
Ejemplo:
gcloud container clusters create CLUSTER_NAME --location=CONTROL_PLANE_LOCATION --project=PROJECT_ID --machine-type=MACHINE_TYPE --disk-type="DISK_TYPE"
Haz los cambios siguientes:
CLUSTER_NAME
: Proporciona un nombre único para el clúster que vas a crear.CONTROL_PLANE_LOCATION
: la ubicación de Compute Engine del plano de control de tu clúster. Proporciona una región para los clústeres regionales o una zona para los clústeres zonales.PROJECT_ID
: el ID de proyecto de tu cuenta de Google Cloud .MACHINE_TYPE
: el tipo de máquina admitido que quieras usar en tus nodos.DISK_TYPE
: asigna el valorhyperdisk-balanced.
. Si se deja en blanco, el tipo de disco será Hyperdisk Balanced de forma predeterminada.
Crear un StorageClass
En Kubernetes, para indicar que quieres que tu PV se cree en un pool de almacenamiento, usa una StorageClass. Para obtener más información, consulta StorageClasses.
Para crear una StorageClass con el nivel de IOPS o de rendimiento que quieras, 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 de una lista de grupos de almacenamiento específicos que quieras usar. Cada grupo de almacenamiento de la lista debe especificarse con el siguiente formato:projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME.
- Si quiere, especifique los parámetros de rendimiento
provisioned-throughput-on-create
yprovisioned-iops-on-create.
.
Cada tipo de hiperdisco tiene valores predeterminados de rendimiento determinados por el tamaño de disco inicial aprovisionado. Cuando creas un StorageClass, puedes especificar los siguientes parámetros en función de tu tipo de Hyperdisk. Si omite estos parámetros, GKE usará los valores predeterminados del tipo de disco basado en la capacidad.
Parámetro | Tipo de Hyperdisk | Uso |
---|---|---|
provisioned-throughput-on-create |
Hyperdisk Balanced y Hyperdisk Throughput | Indica el valor de rendimiento en MiB/s con el calificador "Mi". Por ejemplo, si el rendimiento que necesitas es de 250 MiB/s, especifica "250Mi" al crear StorageClass. |
provisioned-iops-on-create |
Hyperdisk Balanced e Hyperdisk IOPS | El valor de IOPS debe expresarse sin ningún calificador. Por ejemplo, si necesitas 7000 IOPS, especifica "7000" al crear StorageClass. |
Para obtener información sobre los valores permitidos de la capacidad de procesamiento o las IOPS, consulta Planificar el nivel de rendimiento de un volumen de Hyperdisk.
Usa el siguiente manifiesto para crear y aplicar una StorageClass llamada storage-pools-sc
para aprovisionar dinámicamente un PV en el pool 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
Si se utiliza volumeBindingMode: WaitForFirstConsumer
en esta StorageClass, el enlace y el aprovisionamiento de una PVC se retrasan hasta que se crea un Pod que utilice la PVC.
De esta forma, se asegura de que el volumen persistente no se aprovisione prematuramente y de que haya una coincidencia de zona entre el volumen persistente y el pod que lo consume. Si sus zonas no coinciden, el Pod permanecerá en estado Pending
.
Crear un PersistentVolumeClaim (PVC)
Crea una PVC que haga referencia a la storage-pools-sc
StorageClass que has creado.
Usa el siguiente manifiesto para crear una PVC llamada my-pvc
, con 2048 GiB como capacidad de almacenamiento de destino del volumen Hyperdisk Balanced:
kubectl apply -f - <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
storageClassName: storage-pools-sc
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2048Gi
EOF
Crear un Deployment que use el PVC
Cuando uses pods con PersistentVolumes, usa un controlador de carga de trabajo, como un Deployment o un StatefulSet.
Para asegurarte de que los pods se puedan programar en un grupo de nodos con una serie de máquinas que admita Hyperdisk Balanced, configura un Deployment con el cloud.google.com/machine-family
selector de nodos. Para obtener más información, consulta Tipos de máquinas compatibles con Hyperdisk. Usas la serie de máquinas c3
en la siguiente implementación de ejemplo.
Crea y aplica el siguiente manifiesto para configurar un pod que implemente un servidor web de Postgres con el PVC creado en la sección anterior:
Autopilot
En los clústeres Autopilot, especifica cloud.google.com/compute-class: Performance
nodeSelector para aprovisionar un volumen Hyperdisk Balanced. Para obtener más información, consulta Solicitar 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 en los que no está habilitado el aprovisionamiento automático de nodos, asegúrate de que haya un grupo de nodos con la serie de máquinas especificada en funcionamiento antes de crear el Deployment. De lo contrario, el pod no se podrá 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 despliegue se ha creado correctamente:
kubectl get deployment
Las instancias de Hyperdisk pueden tardar unos minutos en completar el aprovisionamiento y mostrar el estado READY
.
Confirmar si el disco adjunto está aprovisionado
Comprueba si tu PVC llamado
my-pvc
se ha enlazado correctamente a un PV:kubectl get pvc my-pvc
El resultado debería ser similar al siguiente:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE my-pvc Bound pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 2Ti RWO storage-pools-sc 2m24s
Comprueba si el volumen se ha aprovisionado tal como se especifica en StorageClass y PVC:
gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
El resultado debería ser similar al siguiente:
NAME STATUS PROVISIONED_IOPS PROVISIONED_THROUGHPUT SIZE_GB pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6 READY 3000 140 2048
Crear capturas y restaurar discos conectados en grupos de almacenamiento
No se pueden mover discos dentro ni fuera de un grupo de almacenamiento. Para mover un disco a un pool de almacenamiento o sacarlo de él, vuelve a crear el disco a partir de una instantánea. Para obtener más información, consulta Cambiar el tipo de disco.
En esta sección:
- Escribe un archivo de prueba en el disco aprovisionado en tu pod.
- Crea una captura de volumen y elimina el archivo de prueba de ese disco.
- Restaura la instantánea en un disco nuevo del mismo grupo de almacenamiento para recuperar los datos eliminados.
Crear un archivo de prueba
Para crear y verificar un archivo de prueba, sigue estos pasos:
Obtén el nombre del pod de la implementación de PostgreSQL:
kubectl get pods -l app=postgres
El resultado debería ser similar al siguiente:
NAME READY STATUS RESTARTS AGE postgres-78fc84c9ff-77vx6 1/1 Running 0 44s
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'
Comprueba que se ha creado el archivo de prueba:
kubectl exec postgres-78fc84c9ff-77vx6 \ -- sh -c 'cat /usr/share/data/hello.txt' Hello World!
Crear una captura de volumen y eliminar un archivo de prueba
Para crear y verificar una captura:
Crea un objeto VolumeSnapshotClass que especifique cómo se deben tomar y gestionar las capturas 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
Crea un VolumeSnapshot y haz una captura del volumen enlazado al
my-pvc
PersistentVolumeClaim: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
Verifica que se haya creado el contenido de la instantánea del volumen:
kubectl get volumesnapshotcontents
El resultado debería ser similar al siguiente:
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
Confirma que la captura esté lista para usarse:
kubectl get volumesnapshot \ -o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
El resultado debería ser similar al siguiente:
NAME READY my-snapshot true
Elimina el archivo de prueba original
hello.txt
que se creó en el podpostgres-78fc84c9ff-77vx6
:kubectl exec postgres-78fc84c9ff-77vx6 \ -- sh -c 'rm /usr/share/data/hello.txt'
Restaurar la captura del volumen
Para restaurar la copia de seguridad del volumen y los datos, sigue estos pasos:
Crea un nuevo PVC que restaure los datos de una captura y asegúrate de que el nuevo volumen se aprovisione en el mismo pool de almacenamiento (
storage-pools-sc
) que el volumen original. Aplica el siguiente archivo de 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
Actualiza la implementación
postgres
para que use el PVC que acabas de restaurar. Aplica el siguiente archivo de 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
Obtén el nombre del Pod recién creado que forma parte del
postgres
Deployment:kubectl get pods -l app=postgres
El resultado debería ser similar al siguiente:
NAME READY STATUS RESTARTS AGE postgres-59f89cfd8c-42qtj 1/1 Running 0 40s
Verifica que el archivo
hello.txt
, que se había eliminado anteriormente, ahora esté en el nuevo pod (postgres-59f89cfd8c-42qtj
) después de restaurar el volumen a partir de la instantánea:kubectl exec postgres-59f89cfd8c-42qtj \ -- sh -c 'cat /usr/share/data/hello.txt' Hello World!
De esta forma, se valida que el proceso de creación de la captura y restauración se ha completado correctamente y que los datos de la captura se han restaurado en el nuevo volumen persistente al que puede acceder el pod.
Confirma que el volumen creado a partir de la instantánea se encuentra en tu grupo de almacenamiento:
kubectl get pvc pvc-restore
El resultado debería ser similar al siguiente:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE pvc-restore Bound pvc-b287c387-bc51-4100-a00e-b5241d411c82 2Ti RWO storage-pools-sc 2m24s
Comprueba si el nuevo volumen se ha aprovisionado tal como se especifica en StorageClass y PVC:
gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
El resultado es similar al siguiente, donde se puede 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
De esta forma, el volumen restaurado se beneficia de los recursos y las funciones compartidos del pool.
Migrar volúmenes a un pool de almacenamiento
Usa la función de creación de instantáneas y restauración para migrar volúmenes que se encuentren fuera de un grupo de almacenamiento a un grupo de almacenamiento.
Asegúrate de que se cumplan las siguientes condiciones:
- Tu nuevo PVC
pvc-restore
hace referencia a una StorageClass que sí especifica el parámetrostorage-pools
, que apunta al grupo de almacenamiento al que quieres mover el volumen. - El PV de origen del que se va a crear una instantánea debe estar asociado a un PVC con una StorageClass que no especifique el parámetro
storage-pools
.
Después de restaurar una captura en un volumen nuevo, puedes eliminar el PVC y el PV de origen.
Limpieza
Para evitar que se apliquen cargos en tu cuenta de Google Cloud , elimina los recursos de almacenamiento que has creado en esta guía. Primero, elimina todos los discos del grupo de almacenamiento y, a continuación, elimina el grupo de almacenamiento.
Eliminar el disco de arranque
Cuando eliminas un nodo (reduciendo la escala del grupo de nodos) o un grupo de nodos completo, los discos de arranque asociados se eliminan automáticamente. También puede eliminar el clúster para eliminar automáticamente los discos de arranque de todos los grupos de nodos que contenga.
Para obtener más información, consulta estos artículos:
Eliminar el disco adjunto
Para eliminar el disco adjunto aprovisionado en un grupo de almacenamiento Hyperdisk, sigue estos pasos:
Elimina el pod que usa el PVC:
kubectl delete deployments postgres
Elimina el PVC que usa el StorageClass del grupo de almacenamiento Hyperdisk.
kubectl delete pvc my-pvc
Confirma que se ha eliminado el PVC
pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6
:gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
Eliminar el grupo de almacenamiento de Hyperdisk
Elimina 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
Siguientes pasos
- Consulta Solucionar problemas de almacenamiento en GKE.
- Consulta más información sobre el controlador de CSI para Persistent Disk en GitHub.