Google Kubernetes Engine (GKE) te ofrece una forma sencilla de desplegar y gestionar automáticamente el controlador de Container Storage Interface (CSI) para Persistent Disk en Compute Engine en tus clústeres. El controlador de CSI para Persistent Disk en Compute Engine siempre está habilitado en los clústeres Autopilot y no se puede inhabilitar ni editar. En los clústeres estándar, debes habilitar el controlador de CSI para Persistent Disk en Compute Engine.
La versión del controlador de CSI para Persistent Disk en Compute Engine está vinculada a los números de versión de GKE. La versión del controlador de CSI para Persistent Disk en Compute Engine suele ser la más reciente disponible en el momento en que se lanza la versión de GKE. Los controladores se actualizan automáticamente cuando el clúster se actualiza al último parche de GKE.
Ventajas
Usar el controlador de CSI para Persistent Disk en Compute Engine ofrece las siguientes ventajas:
- Permite desplegar y gestionar automáticamente el controlador de Persistent Disk sin tener que configurarlo manualmente.
- Puedes usar claves de cifrado gestionadas por el cliente (CMEKs). Estas claves se usan para cifrar las claves de cifrado de datos que cifran tus datos. Para obtener más información sobre las CMEK en GKE, consulta Usar CMEK.
- Puedes usar instantáneas de volumen con el controlador de CSI para Persistent Disk en Compute Engine. Las capturas de volumen te permiten crear una copia de tu volumen en un momento concreto. Puedes usar esta copia para restaurar un volumen a un estado anterior o para aprovisionar un volumen nuevo.
- Puedes usar la clonación de volúmenes con el controlador de CSI para Persistent Disk en Compute Engine en clústeres que ejecuten GKE 1.22 o versiones posteriores. La clonación de volúmenes te permite crear un duplicado de tu volumen en un momento específico, aprovisionado con todos los datos del volumen de origen.
- Las correcciones de errores y las actualizaciones de funciones se lanzan de forma independiente a las versiones secundarias de Kubernetes. Este calendario de lanzamientos suele dar lugar a una cadencia de lanzamientos más rápida.
Antes de empezar
Antes de empezar, asegúrate de que has 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
.
Habilitar el controlador de CSI para Persistent Disk en Compute Engine
Para habilitar el controlador de CSI para Persistent Disk en Compute Engine en clústeres estándar, usa la CLI de Google Cloud o la Trusted Cloud consola.
Para habilitar el controlador en un clúster, sigue estos pasos:
gcloud
gcloud container clusters update CLUSTER-NAME \
--update-addons=GcePersistentDiskCsiDriver=ENABLED
Sustituye CLUSTER-NAME
por el nombre del clúster.
Consola
Ve a la página Google Kubernetes Engine en la Trusted Cloud consola.
En la lista de clústeres, haga clic en el nombre del clúster que quiera modificar.
En Funciones, junto al campo Controlador de CSI para Persistent Disk en Compute Engine, haz clic en edit Editar controlador de CSI de Compute Engine.
Marca la casilla Habilitar el controlador de CSI para Persistent Disk en Compute Engine.
Haz clic en Guardar cambios.
Una vez que hayas habilitado el controlador de CSI para Persistent Disk en Compute Engine, podrás usarlo en volúmenes de Kubernetes con el nombre del controlador y del aprovisionador: pd.csi.storage.gke.io
.
Inhabilitar el controlador de CSI para Persistent Disk en Compute Engine
Puedes inhabilitar el controlador de CSI para Persistent Disk en Compute Engine en clústeres estándar mediante la CLI de Google Cloud o la consola de Trusted Cloud .
Si inhabilitas el controlador, no se podrá cancelar ningún pod que utilice volúmenes persistentes que pertenezcan al controlador. Los pods nuevos que intenten usar esos volúmenes persistentes tampoco se podrán iniciar.
Para inhabilitar el controlador en un clúster estándar, sigue estos pasos:
gcloud
gcloud container clusters update CLUSTER-NAME \
--update-addons=GcePersistentDiskCsiDriver=DISABLED
Sustituye CLUSTER-NAME
por el nombre del clúster.
Consola
Ve a la página Google Kubernetes Engine en la Trusted Cloud consola.
En la lista de clústeres, haga clic en el nombre del clúster que quiera modificar.
En Funciones, junto al campo Controlador de CSI para Persistent Disk en Compute Engine, haz clic en edit Editar controlador de CSI de Compute Engine.
Desmarque la casilla Habilitar el controlador de CSI para Persistent Disk en Compute Engine.
Haz clic en Guardar cambios.
Usar el controlador de CSI para Persistent Disk en Compute Engine en clústeres Linux
En las siguientes secciones se describe el proceso habitual para usar un volumen de Kubernetes respaldado por un controlador CSI en GKE. Estas secciones se aplican específicamente a los clústeres que usan Linux.
Crear un StorageClass
Después de habilitar el controlador de CSI para Persistent Disk en Compute Engine, GKE instala automáticamente las siguientes StorageClasses:
standard-rwo
, con un disco persistente balanceadopremium-rwo
, con disco persistente SSD
En los clústeres de Autopilot, la clase de almacenamiento predeterminada es standard-rwo
, que usa el controlador de CSI para Persistent Disk en Compute Engine. En los clústeres estándar, la clase de almacenamiento predeterminada usa el complemento de volumen gcePersistentDisk
integrado de Kubernetes.
Para ver el nombre de las StorageClasses instaladas, ejecuta el siguiente comando:
kubectl get sc
También puedes instalar otra StorageClass que use el controlador de CSI para Persistent Disk en Compute Engine añadiendo pd.csi.storage.gke.io
en el campo provisioner.
Por ejemplo, puedes crear un StorageClass con el siguiente archivo, llamado pd-example-class.yaml
.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: pd-example
provisioner: pd.csi.storage.gke.io
# Recommended setting. Delays the binding and provisioning of a PersistentVolume until a Pod that uses the
# PersistentVolumeClaim is created and scheduled on a node.
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
type: pd-balanced
Puede especificar los siguientes tipos de disco persistente en el parámetro type
:
pd-balanced
pd-ssd
pd-standard
pd-extreme
(compatible con GKE 1.26 y versiones posteriores)
Si usas pd-standard
o pd-extreme
, consulta Tipos de máquinas no admitidos para ver otras restricciones de uso.
Si usas la opción pd-extreme
, también debes añadir el campo provisioned-iops-on-create
a tu manifiesto. Este campo debe tener el mismo valor que el valor de IOPS aprovisionado que especificó al crear el disco persistente.
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: pd-extreme-example
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
type: pd-extreme
provisioned-iops-on-create:'10000'
Después de crear el archivo pd-example-class.yaml
, ejecuta el siguiente comando:
kubectl create -f pd-example-class.yaml
Crear un PersistentVolumeClaim
Puedes crear un objeto PersistentVolumeClaim que haga referencia a la clase de almacenamiento del controlador de CSI para Persistent Disk en Compute Engine.
El siguiente archivo, llamado pvc-example.yaml
, usa la clase de almacenamiento preinstalada
standard-rwo
:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: podpvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: standard-rwo
resources:
requests:
storage: 6Gi
Después de crear el manifiesto PersistentVolumeClaim, ejecuta el siguiente comando:
kubectl create -f pvc-example.yaml
En la clase de almacenamiento preinstalada (standard-rwo
), volumeBindingMode
se ha definido como WaitForFirstConsumer
. Cuando volumeBindingMode
se define como WaitForFirstConsumer
, el PersistentVolume no se aprovisiona hasta que se programa un Pod que haga referencia al PersistentVolumeClaim. Si volumeBindingMode
en StorageClass se define como Immediate
(o se omite), se aprovisiona un PersistentVolume respaldado por un disco persistente después de crear PersistentVolumeClaim.
Crea un pod que consuma el volumen.
Cuando uses pods con PersistentVolumes, te recomendamos que utilices un controlador de carga de trabajo (como un Deployment o un StatefulSet). Aunque normalmente no se usa un pod independiente, en el siguiente ejemplo se usa uno para simplificarlo.
En el siguiente ejemplo se usa el volumen que has creado en la sección anterior:
apiVersion: v1
kind: Pod
metadata:
name: web-server
spec:
containers:
- name: web-server
image: nginx
volumeMounts:
# The path in the container where the volume will be mounted.
- mountPath: /var/lib/www/html
# The name of the volume that is being defined in the "volumes" section.
name: mypvc
volumes:
- name: mypvc
persistentVolumeClaim:
# References the PersistentVolumeClaim created earlier.
claimName: podpvc
readOnly: false
Usar el controlador de CSI para Persistent Disk en Compute Engine en clústeres de Windows
En las siguientes secciones se describe el proceso habitual para usar un volumen de Kubernetes respaldado por un controlador CSI en GKE. Estas secciones son específicas de los clústeres que usan Windows.
Asegúrate de que:
- La versión del clúster es 1.19.7-gke.2000, 1.20.2-gke.2000 o una posterior.
- Las versiones de los nodos son 1.18.12-gke.1203, 1.19.6-gke.800 o posteriores.
Crear un StorageClass
Crear un StorageClass para Windows es muy similar a Linux. Debes tener en cuenta que la StorageClass instalada de forma predeterminada no funcionará en Windows porque el tipo de sistema de archivos es diferente. El controlador de CSI para Persistent Disk en Compute Engine para Windows requiere NTFS
como tipo de sistema de archivos.
Por ejemplo, puedes crear un StorageClass con el siguiente archivo llamado pd-
windows-class.yaml
. Asegúrate de añadir csi.storage.k8s.io/fstype: NTFS
a la lista de parámetros:
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: pd-sc-windows
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
type: pd-balanced
csi.storage.k8s.io/fstype: NTFS
Crear un PersistentVolumeClaim
Después de crear un StorageClass para Windows, puedes crear un PersistentVolumeClaim que haga referencia a ese StorageClass:
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: podpvc-windows
spec:
accessModes:
- ReadWriteOnce
storageClassName: pd-sc-windows
resources:
requests:
storage: 6Gi
Crea un pod que consuma el volumen.
En el siguiente ejemplo se usa el volumen que has creado en la tarea anterior:
apiVersion: v1
kind: Pod
metadata:
name: web-server
spec:
# Node selector to ensure the Pod runs on a Windows node.
nodeSelector:
kubernetes.io/os: windows
containers:
- name: iis-server
# The container image to use.
image: mcr.microsoft.com/windows/servercore/iis
ports:
- containerPort: 80
volumeMounts:
# The path in the container where the volume will be mounted.
- mountPath: /var/lib/www/html
name: mypvc
volumes:
- name: mypvc
persistentVolumeClaim:
# References the PersistentVolumeClaim created earlier.
claimName: podpvc-windows
readOnly: false
Usar el controlador de CSI para Persistent Disk en Compute Engine con tipos de sistemas de archivos no predeterminados
El tipo de sistema de archivos predeterminado de los discos persistentes de Compute Engine en GKE es ext4
. También puedes usar el tipo de almacenamiento xfs
siempre que tu imagen de nodo lo admita. Consulta la compatibilidad con controladores de almacenamiento para ver una lista de controladores compatibles por imagen de nodo.
En el siguiente ejemplo se muestra cómo usar xfs
como tipo de sistema de archivos predeterminado en lugar de ext4
con el controlador de CSI para Persistent Disk en Compute Engine.
Crear un StorageClass
Guarda el siguiente manifiesto como un archivo YAML llamado
pd-xfs-class.yaml
:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: xfs-class provisioner: pd.csi.storage.gke.io parameters: # The type of Compute Engine persistent disk to provision. type: pd-balanced # Specify "xfs" as the filesystem type. csi.storage.k8s.io/fstype: xfs volumeBindingMode: WaitForFirstConsumer
Aplica el archivo de manifiesto:
kubectl apply -f pd-xfs-class.yaml
Crear un PersistentVolumeClaim
Guarda el siguiente archivo de manifiesto como
pd-xfs-pvc.yaml
:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: xfs-pvc spec: # References the StorageClass created earlier. storageClassName: xfs-class accessModes: - ReadWriteOnce resources: requests: # The amount of storage requested. storage: 10Gi
Aplica el archivo de manifiesto:
kubectl apply -f pd-xfs-pvc.yaml
Crea un pod que consuma el volumen.
Guarda el siguiente archivo de manifiesto como
pd-xfs-pod.yaml
:apiVersion: v1 kind: Pod metadata: name: pd-xfs-pod spec: containers: - name: cloud-sdk image: google/cloud-sdk:slim # Keep the container running for 1 hour. args: ["sleep","3600"] volumeMounts: # The path in the container where the volume will be mounted. - mountPath: /xfs name: xfs-volume # Define the volumes available to the containers in the Pod. volumes: - name: xfs-volume persistentVolumeClaim: # References the PersistentVolumeClaim created earlier. claimName: xfs-pvc
Aplica el archivo de manifiesto:
kubectl apply -f pd-xfs-pod.yaml
Verificar que el volumen se ha montado correctamente
Abre una sesión de shell en el pod:
kubectl exec -it pd-xfs-pod -- /bin/bash
Busca particiones
xfs
:df -aTh --type=xfs
La salida debería ser similar a la siguiente:
Filesystem Type Size Used Avail Use% Mounted on /dev/sdb xfs 30G 63M 30G 1% /xfs
Ver los registros del controlador de CSI para Persistent Disk en Compute Engine
Puedes usar Cloud Logging para ver los eventos relacionados con el controlador de CSI para Persistent Disk en Compute Engine. Los registros pueden ayudarte a solucionar problemas.
Para obtener más información sobre Cloud Logging, consulta Ver los registros de GKE.
Para ver los registros del controlador de CSI para Persistent Disk en Compute Engine, sigue estos pasos:
Ve a la página Cloud Logging de la consola de Trusted Cloud .
Para filtrar las entradas de registro y mostrar solo las relacionadas con el controlador CSI que se ejecuta en tu espacio de nombres, ejecuta la siguiente consulta de Cloud Logging:
resource.type="k8s_container" resource.labels.project_id="PROJECT_ID" resource.labels.location="LOCATION" resource.labels.cluster_name="CLUSTER_NAME" resource.labels.namespace_name="kube-system" resource.labels.container_name="gce-pd-driver"
Haz los cambios siguientes:
PROJECT_ID
: el nombre de tu proyecto.LOCATION
: la región o zona de Compute Engine del clúster.CLUSTER_NAME
: el nombre de tu clúster.
Problemas conocidos
Tipos de máquinas no admitidos
Si usas la familia de máquinas de la serie C3, no se admite el tipo de pd-standard
disco persistente.
Si intentas ejecutar un pod en una máquina y el pod usa un tipo de disco persistente no admitido, verás un mensaje de advertencia como el siguiente en el pod:
AttachVolume.Attach failed for volume "pvc-d7397693-5097-4a70-9df0-b10204611053" : rpc error: code = Internal desc = unknown Attach error: failed when waiting for zonal op: operation operation-1681408439910-5f93b68c8803d-6606e4ed-b96be2e7 failed (UNSUPPORTED_OPERATION): [pd-standard] features are not compatible for creating instance.
Si tu clúster tiene varios grupos de nodos con diferentes familias de máquinas, puedes usar taints de nodos y afinidades de nodos para limitar dónde se pueden programar las cargas de trabajo. Por ejemplo, puedes usar este método para evitar que una carga de trabajo que utilice pd-standard
se ejecute en una familia de máquinas no compatible.
Si usas el tipo de disco persistente pd-extreme
, debes asegurarte de que el disco esté conectado a una instancia de máquina virtual con una configuración de máquina adecuada. Para obtener más información, consulta Compatibilidad con formas de máquina.
Siguientes pasos
- Consulta cómo usar la ampliación de volumen.
- Consulta cómo usar las capturas de volumen.
- Consulta cómo usar la clonación de volumen.
- Consulta cómo crear discos persistentes regionales.
- Consulta más información sobre el controlador en GitHub.