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:
- 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 creas determina el tipo de discos que puedes crear en el grupo de almacenamiento. Consulta Tipos de grupos de almacenamiento de Hyperdisk.
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:
- La versión mínima de GKE requerida para aprovisionar discos adjuntos en grupos de almacenamiento es 1.29.2-gke.1035000 o una posterior.
- Asegúrate de que el controlador de CSI de disco persistente de Compute Engine esté habilitado. El controlador de Persistent Disk para Compute Engine está habilitado de forma predeterminada en los clústeres nuevos de Autopilot y Standard, y no se puede inhabilitar ni editar en los clústeres de Autopilot. Para habilitar el controlador, consulta Habilita el controlador de CSI de disco persistente de Compute Engine en un clúster existente.
- Asegúrate de que el grupo de almacenamiento esté en al menos una de las ubicaciones de nodos del clúster y del grupo de nodos.
- Solo puedes aprovisionar discos conectados de Hyperdisk Throughput y Hyperdisk Balanced en grupos de almacenamiento. El tipo del disco conectado debe coincidir con el tipo del grupo de almacenamiento. Para obtener más información, consulta Tipos de grupos de almacenamiento de Hyperdisk.
- Asegúrate de que el tipo de máquina que ejecuta tu Pod admita conectar el tipo de disco que usas desde el grupo de almacenamiento. Para obtener más información, consulta Compatibilidad con tipos de máquinas de Hyperdisk.
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.
- Revisa las regiones y zonas admitidas para crear tu grupo de almacenamiento de Hyperdisk Balanced.
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.
- En el caso de los clústeres zonales, si no especificas
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 enhyperdisk-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 enhyperdisk-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: Performance
nodeSelector 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 enhyperdisk-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
yprovisioned-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
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
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
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:
- Escribes un archivo de prueba en el disco aprovisionado en tu Pod.
- Crea una instantánea de volumen y borra el archivo de prueba de ese disco.
- Restaura la instantánea en un disco nuevo dentro del mismo grupo de almacenamiento para recuperar de manera eficaz los datos borrados.
Crea 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 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
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'
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:
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
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
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
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
Borra 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'
Restablece la instantánea de volumen
Para restablecer la instantánea y los datos del volumen, sigue estos pasos:
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
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
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
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.
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
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ámetrostorage-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:
Borra el Pod que usa el PVC:
kubectl delete deployments postgres
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?
- Consulta Soluciona problemas de almacenamiento en GKE.
- Obtén más información sobre el controlador de CSI de Persistent Disk en GitHub.