En esta página, se explica cómo agregar un disco persistente al clúster con el modo de acceso ReadOnlyMany. Este modo permite que varios Pods en diferentes nodos activen el disco para leerlo.
Para obtener más información sobre este modo, consulta modos de acceso de volumen persistente.
Requisitos
- Tu clúster debe ejecutar la versión 1.22 de GKE o una posterior.
- El clúster debe usar el controlador CSI de disco persistente de Compute Engine.
Formatea y propaga un disco persistente de origen
Para usar un disco persistente en modo de solo lectura, debes propagar un disco persistente de origen con datos; luego, debes clonar el volumen o usar una instantánea de volumen para mover los datos a un nuevo PersistentVolume de ReadOnlyMany.
Crea un PersistentVolume mediante un disco persistente existente o el aprovisionamiento dinámico.
Formatea el disco y propágalo con datos. Para formatear el disco, haz referencia al disco como un PersistentVolume de ReadWriteOnce en un Pod. GKE formatea automáticamente el disco subyacente y permite que el Pod escriba datos en el disco. Cuando el Pod se inicie, asegúrate de que escriba los datos que deseas en el disco.
Crea un PersistentVolume ReadOnlyMany
Puedes crear un PersistentVolume ReadOnlyMany
con uno de los siguientes métodos:
- Una instantánea de volumen de un PersistentVolume de origen que propagas con datos.
- Un clon de volumen de un PersistentVolume de origen que propagas con datos.
Un disco persistente preexistente que ya se propagó con datos.
Instantánea de volumen
Crear una instantánea de volumen del PersistentVolume de orgien.
Guarda el siguiente manifiesto de PersistentVolumeClaim como
snapshot-pvc.yaml
:kind: PersistentVolumeClaim apiVersion: v1 metadata: namespace: PVC_NAMESPACE name: PVC_NAME spec: dataSource: apiGroup: snapshot.storage.k8s.io kind: VolumeSnapshot name: SNAPSHOT_NAME accessModes: - ReadOnlyMany storageClassName: premium-rwo resources: requests: storage: STORAGE_SIZE
Reemplaza lo siguiente:
PVC_NAMESPACE
: El espacio de nombres de la PersistentVolumeClaim nueva.PVC_NAME
: el nombre de la PersistentVolumeClaim nueva.SNAPSHOT_NAME
: El nombre de tu objetoVolumeSnapshot
.STORAGE_SIZE
: La cantidad de almacenamiento que se solicitará. Debe ser la misma que la cantidad solicitada en la PersistentVolumeClaim de origen.
Aplica el manifiesto al clúster:
kubectl apply -f snapshot-pvc.yaml
Esto crea una PersistentVolumeClaim nueva llamada PVC_NAME
en el clúster, que GKE usa de forma dinámica para aprovisionar un PersistentVolume nuevo que contiene los datos de la instantánea del disco persistente de origen.
Clonación de volúmenes
Antes de usar la clonación de volumen, asegúrate de familiarizarte con las limitaciones de este enfoque.
Guarda el siguiente manifiesto como
cloning-pvc.yaml
:kind: PersistentVolumeClaim apiVersion: v1 metadata: namespace: PVC_NAMESPACE name: PVC_NAME spec: dataSource: name: SOURCE_PVC kind: PersistentVolumeClaim accessModes: - ReadOnlyMany storageClassName: STORAGE_CLASS_NAME resources: requests: storage: STORAGE_SIZE
Reemplaza lo siguiente:
PVC_NAMESPACE
: El espacio de nombres de la PersistentVolumeClaim nueva.PVC_NAME
: el nombre de la PersistentVolumeClaim nueva.SOURCE_PVC
: El nombre del PersistentVolumeClaim de origen propagado con datos.STORAGE_CLASS_NAME
: La clase de almacenamiento para la PersistentVolumeClaim nueva. Debe ser la misma que la clase de almacenamiento de la PersistentVolumeClaim de origen.STORAGE_SIZE
: La cantidad de almacenamiento para la PersistentVolumeClaim nueva. Debe ser la misma cantidad que solicita la PersistentVolumeClaim de origen.
Aplica el manifiesto al clúster:
kubectl apply -f cloning-pvc.yaml
Esto crea una PersistentVolumeClaim llamada PVC_NAME
que GKE usa para crear un PersistentVolume nuevo en modo ReadOnlyMany con los datos en el PersistentVolume de origen.
Para obtener más información detallada sobre la clonación de volúmenes, consulta Crea clonaciones de volúmenes persistentes.
Disco persistente preexistente
Guarda el siguiente manifiesto como
preexisting-disk-pv-pvc.yaml
:apiVersion: v1 kind: PersistentVolume metadata: name: PV_NAME spec: storageClassName: "STORAGE_CLASS_NAME" capacity: storage: DISK_SIZE accessModes: - ReadOnlyMany claimRef: namespace: PVC_NAMESPACE name: PVC_NAME csi: driver: pd.csi.storage.gke.io volumeHandle: DISK_ID fsType: FS_TYPE readOnly: true --- apiVersion: v1 kind: PersistentVolumeClaim metadata: namespace: PVC_NAMESPACE name: PVC_NAME spec: storageClassName: "STORAGE_CLASS_NAME" volumeName: PV_NAME accessModes: - ReadOnlyMany resources: requests: storage: DISK_SIZE
Reemplaza lo siguiente:
PV_NAME
: el nombre del PersistentVolume nuevoSTORAGE_CLASS_NAME
: Es el nombre de tu StorageClass nueva.DISK_SIZE
: el tamaño de tu disco persistente preexistente. Por ejemplo,500G
.PVC_NAMESPACE
: El espacio de nombres de la PersistentVolumeClaim nueva.PVC_NAME
: Es el nombre de tu PersistentVolumeClaim nuevo.DISK_ID
: el identificador de tu disco persistente preexistente. El formato esprojects/{project_id}/zones/{zone_name}/disks/{disk_name}
para los discos persistentes zonales oprojects/{project_id}/regions/{region_name}/disks/{disk_name}
para los discos persistentes regionales.FS_TYPE
: Es el tipo de sistema de archivos. Puedes dejarlo como el predeterminado (ext4
) o usarxfs
. Si tus clústeres usan un grupo de nodos de Windows Server, debes cambiar esto aNTFS
.
Aplica el manifiesto al clúster:
kubectl apply -f preexisting-disk-pv-pvc.yaml
Esto crea un PersistentVolumeClaim llamado PVC_NAME
y un PersistentVolume llamado PV_NAME
en modo ReadOnlyMany.
Para obtener información más detallada sobre cómo usar un disco persistente preexistente, consulta Disco persistente existente.
Usa PersistentVolumeClaim en un Pod
Ahora puedes hacer referencia a la nueva PersistentVolumeClaim en modo de solo lectura en varios Pods en varios nodos al mismo tiempo. No puedes adjuntar discos persistentes en modo ReadWriteOnce a varios nodos al mismo tiempo. Para obtener más información, consulta Comparación entre Deployments y StatefulSets.
En la especificación del Pod, debes especificar readOnly: true
en la sección volumeMounts
y en la sección volumes
, como en el siguiente ejemplo:
apiVersion: apps/v1
kind: Deployment
metadata:
name: multi-read
labels:
app: web-server
spec:
replicas: 3
selector:
matchLabels:
app: web-server
template:
metadata:
labels:
app: web-server
spec:
containers:
- name: web-server
image: nginx
volumeMounts:
- mountPath: /test-mnt
name: my-volume
readOnly: true
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: PVC_NAME
readOnly: true
¿Qué sigue?
- Obtén más información sobre cómo usar discos persistentes preexistentes como PersistentVolumes.
- Obtén más información sobre los discos persistentes de Compute Engine.