Adición de File Storage for VPC a apps
Red Hat OpenShift on IBM Cloud Ofrece clases de almacenamiento predefinidas que puede utilizar para aprovisionar File Storage for VPC para las aplicaciones de su clúster. Cada clase de almacenamiento especifica el tamaño disponible, las IOPS, el sistema de archivos y la política de retención para el recurso compartido de archivos que se aprovisiona. También puede crear sus propias clases de almacenamiento para su caso de uso.
Revise las siguientes notas y consideraciones antes de continuar.
- Después de suministrar un tipo específico de almacenamiento utilizando una clase de almacenamiento, no puede cambiar el tipo ni la política de retención del dispositivo de almacenamiento. Sin embargo, puede cambiar el tamaño y el IOPS si desea aumentar la capacidad de almacenamiento y el rendimiento. Para cambiar el tipo y la política de retención de su almacenamiento, debe crear una nueva instancia de almacenamiento y copiar los datos de la instancia de almacenamiento anterior a la nueva.
- Si su clúster y VPC están en grupos de recursos separados, entonces antes de que pueda aprovisionar recursos compartidos de archivos, debe crear su propia clase de almacenamiento y proporcionar su ID de grupo de recursos de VPC en la sección
resourceGroupjunto con el ID de grupo de seguridadkube-<clusterID>en la secciónsecurityGroupIDs. Para recuperar el ID del grupo de seguridad haga lo siguiente. Para obtener más información, consulte Crear su propia clase de almacenamiento. - Se introdujeron nuevas reglas de grupo de seguridad en las versiones de clúster. 4.11 y después. Estos cambios de reglas significan que debes sincronizar tus grupos de seguridad antes de poder usarFile Storage for VPC. Para más información, ver AñadiendoFile Storage for VPC a aplicaciones.
- Se agregaron nuevas clases de almacenamiento con la versión2.0 del complemento. Ya no puede aprovisionar nuevos recursos compartidos de archivos que utilicen clases de almacenamiento más antiguas. Los volúmenes existentes que utilizan las clases de almacenamiento más antiguas siguen funcionando; sin embargo, no se pueden expandir los volúmenes que se crearon utilizando las clases más antiguas. Para obtener más información, consulte la Migrar a una nueva clase de almacenamiento.
- La creación de un PVC mediante StorageClassSecrets no es posible.
- Asegúrese de que el usuario que crea el clúster tiene los permisos de Lector, Escritor y Operador para los Servicios de Infraestructura VPC.
- Asegúrese de configurar una autorización de servicio desde VPC Infrastructure a KMS/HPCS si planea utilizar cifrado en sus archivos compartidos.
IBM Cloud está cambiando los servicios de gestión de claves dedicados de Hyper Protect Crypto Services a Key Protect Dedicated.
- De forma predeterminada, el complemento de clúster File Storage for VPC suministra comparticiones de archivos en el grupo de seguridad
kube-<clusterID>. Esto significa que los pods pueden acceder a las comparticiones de archivos entre nodos y zonas. - Si utiliza restricciones basadas en el contexto, asegúrese de configurar sus zonas y reglas de red. Para más información, consulte Protección de los servicios de infraestructura de la Virtual Private Cloud(VPC)con restricciones basadas en contexto.
Se introdujeron nuevas reglas de grupos de seguridad en las versiones 4.11 y posteriores. Estos cambios en las reglas significan que debe sincronizar sus grupos de seguridad antes de poder utilizar File Storage for VPC. Si su clúster se creó inicialmente en la versión 4.11 o anterior, ejecute los siguientes comandos para sincronizar la configuración de su grupo de seguridad.
- Consigue el ID de tu clúster.
ibmcloud oc cluster ls - Obtenga el ID del grupo de seguridad
kube-<clusterID>.ibmcloud is sg kube-CLUSTER_ID | grep ID - Sincronice el grupo de seguridad
kube-<clusterID>utilizando el ID que recuperó en el paso anterior.ibmcloud ks security-group sync -c CLUSTER_ID --security-group ID
Guía de inicio rápido para File Storage for VPC
Crea una solicitud de volumen persistente (PVC) para aprovisionar dinámicamente un File Storage for VPC e para tu clúster. El aprovisionamiento dinámico crea automáticamente el volumen persistente (PV) correspondiente y solicita el recurso compartido de archivos en tu cuenta.
Ahora puedes elegir una clase de almacenamiento de segunda generación.
-
Revise las clases de almacenamiento preinstaladas ejecutando el mandato siguiente. Para obtener más información, consulte referencia de clases de almacenamiento.
oc get sc | grep vpc-file -
Guarde el siguiente archivo YAML en un archivo. Este ejemplo crea una reclamación denominada
my-pvcutilizando la clase de almacenamientoibmc-vpc-file-min-iopscon un tamaño de gigabyte de10Gi.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc # Enter a name for your PVC. spec: accessModes: - ReadWriteMany # The file share can be mounted on multiple nodes and pods. resources: requests: storage: 20Gi # Enter the size of the storage in gigabytes (Gi). storageClassName: ibmc-vpc-file-min-iops # Enter the name of the storage class that you want to use. -
Cree la PVC.
oc apply -f my-pvc.yaml -
Verifique que la PVC se ha creado y se ha vinculado al PV.
oc describe pvc my-pvcSalida de ejemplo
Name: my-pvc Namespace: default StorageClass: "" Status: Bound Volume: pvc-0d787071-3a67-11e7-aafc-eef80dd2dea2 Labels: <none> Capacity: 20Gi Access Modes: RWX Events: FirstSeen LastSeen Count From SubObjectPath Type Reason Message --------- -------- ----- ---- ------------- -------- ------ ------- 1m 1m 1 {ibm.io/ibmc-vpc-file 31898035-3011-11e7-a6a4-7a08779efd33 } Normal ProvisioningSucceeded Successfully provisioned volume pvc-0d787071-3a67-11e7-aafc-eef80dd2dea2 -
Guarde la siguiente configuración de despliegue en el archivo denominado
deployment.yamly haga referencia a la PVC que ha creado en el paso anterior.apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment labels: app: my-deployment spec: selector: matchLabels: app: busybox template: metadata: labels: app: busybox spec: containers: - name: busybox image: busybox:1.28 command: [ "sh", "-c", "sleep 1h" ] volumeMounts: - name: my-vol mountPath: /data/demo # Mount path for the application. volumes: - name: my-vol persistentVolumeClaim: claimName: my-pvc # Your PVC name.volumeMounts.mountPath- En la sección de montajes de volúmenes de contenedor, especifique la vía de acceso absoluta del directorio en el que está montado el volumen dentro del contenedor. Los datos que se escriben en la vía de acceso de montaje se almacenan en
el directorio
rootde la instancia de File Storage for VPC físicos. Si desea compartir un volumen entre diferentes aplicaciones, puede especificar subrutas del volumen para cada una de sus aplicaciones. volumeMounts.name- En la sección de montajes de volúmenes de contenedor, especifique el nombre del volumen que se va a montar en el pod.
volume.name- En la sección de volúmenes, especifique el nombre del volumen que se va a montar en el pod. Normalmente, este nombre es el mismo que
volumeMounts.name. claimName- En la sección de reclamación de volúmenes persistentes, especifique el nombre de la PVC que enlaza el PV que desea utilizar.
-
Cree el despliegue.
oc apply -f deployment.yaml -
Verifique que el PV se ha montado correctamente.
oc describe deployment my-deploymentEl punto de montaje se muestra en el campo Volume Mounts y el volumen se muestra en el campo Volumes.
Containers: Mounts: /data/demo from my-vol (rw) Volumes: my-vol: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: my-pvc ReadOnly: false -
Opcional: después de que el pod se esté ejecutando, intente expandir el volumen de almacenamiento.
Migrar a una nueva clase de almacenamiento
- Se agregaron nuevas clases de almacenamiento con la versión2.0 del complemento.
- Ya no puede aprovisionar nuevos recursos compartidos de archivos que utilicen clases de almacenamiento más antiguas.
- Los volúmenes existentes que utilizan las clases de almacenamiento más antiguas siguen funcionando; sin embargo, no se pueden expandir los volúmenes que se crearon utilizando las clases más antiguas.
- Si necesita la función de expansión de volumen, complete los siguientes pasos para migrar sus aplicaciones a una clase de almacenamiento más nueva.
- Si no necesita la función de expansión de volumen, no necesita migrar y sus PVC seguirán funcionando normalmente.
- Los siguientes pasos cubren la migración manual.
-
Busque el PVC que desea migrar y anote tanto el nombre del PVC como el nombre del PV asociado.
oc get pvc -
Reduzca la escala de su aplicación que utiliza PVC.
oc scale deployment DEPLOYMENT --replicas 0 -
Edite el objeto PV que utiliza su aplicación para cambiar la política de recuperación a
Retainy clase de almacenamiento paraibmc-vpc-file-min-iops.kubectl edit pv PVspec: accessModes: - ReadWriteMany capacity: storage: 20Gi claimRef: apiVersion: v1 kind: PersistentVolumeClaim name: <pvc-name> namespace: default ... persistentVolumeReclaimPolicy: Retain # Change delete to retain storageClassName: ibmc-vpc-file-min-iops # Enter a new storage class volumeMode: Filesystem -
Elimine el objeto de PVC existente.
kubectl delete pvc PVC -
Edite el PV nuevamente y elimine el
claimRefsección.kubectl edit pv PVspec: accessModes: - ReadWriteMany capacity: storage: 20Gi #claimRef: #apiVersion: v1 #kind: PersistentVolumeClaim #name: <pvc-name> #namespace: default #resourceVersion: "381270" #uid: 4042f319-1233-4187-8549-8249a840a8dd -
Cree un PVC que tenga el mismo nombre y el mismo tamaño que su PVC anterior. Esto debe hacerse uno por uno para todos los PVC afectados.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: <pvc-name> spec: accessModes: - ReadWriteMany resources: requests: storage: <size>Gi storageClassName: ibmc-vpc-file-min-iops -
Amplíe su aplicación que utilizaba PVC.
k scale deployment DEPLOYMENT --replicas x -
Para continuar usando la expansión de volumen, consulte Configurar la expansión de volumen.
Configuración de la expansión del volumen
Para suministrar volúmenes que admitan la expansión, debe utilizar la clase de almacenamiento que tiene allowVolumeExpansion establecido en true.
El complemento de clúster de File Storage for VPC admite la expansión tanto en modo en línea como fuera de línea. Sin embargo, la expansión solo es posible dentro del tamaño y el rango de IOPs establecidos en el perfil File Storage for VPC.
Se introdujeron nuevas clases de almacenamiento con la versión 2.0. La expansión de volumen no funciona para recursos compartidos que utilizan clases de almacenamiento de versiones anteriores del complemento.
Antes de empezar
-
Para utilizar la ampliación de volumen, asegúrese de actualizar el complemento al menos a la versión 2.0.
-
Asegúrate de que tu aplicación utiliza una de las clases de almacenamiento más recientes. Para conocer los pasos de migración, consulte Migrar a una nueva clase de almacenamiento
-
Si no tiene una aplicación en ejecución, comience implementando la ejemplo de inicio rápido PVC e implementación.
Expansión de un volumen montado
-
Después de montar la PVC mediante un pod de app, puede ampliar el volumen editando el valor del campo
spec.resources.requests.storagede la PVC. Para ampliar el volumen, edite la PVC y aumente el valor del campospec.resources.requests.storage.kubectl edit pvc my-pvcspec: accessModes: - ReadWriteMany resources: requests: storage: 50Gi -
Guarde y cierre la PVC. Espere unos minutos a que se expanda el volumen.
-
Comprueba que el volumen esté expandido.
kubectl get pvcSalida de ejemplo
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE my-pvc Bound pvc-25b6912e-75bf-41ca-b6b2-567fa4f9d245 50Gi RWX ibmc-vpc-file-min-iops 3m31s
Conexión del almacenamiento de archivos existente a una app
Crea una solicitud de volumen persistente (PVC) para aprovisionar de forma estática un File Storage for VPC e para tu clúster. El suministro estático permite a los administradores de clúster poner los dispositivos de almacenamiento existentes a disposición de un clúster.
-
Obtenga el ID del clúster.
ibmcloud ks cluster ls -
Obtén el ID de tu grupo de seguridad
kube-<clusterID>.ibmcloud is sg kube-CLUSTER_ID | grep ID -
Cree una compartición de archivos. Para obtener más información, consulte Creación de comparticiones de archivos y destinos de montaje.
ibmcloud is share-create --name my-file-share --zone us-south-2 --profile dp2 --size 1000 --iops 1000 -
Cree un destino de montaje compartido y especifique el ID del grupo de seguridad
kube-<clusterID>que recuperó anteriormente en la opción--vni-sgs.ibmcloud is share-mount-target-create my-file-share --subnet my-subnet --name NAME --vni-name my-share-vni-1 --vni-sgs kube-CLUSTER_ID --resource-group-name Default --vpc ID -
Antes de poder crear un volumen persistente (PV), recupere los detalles sobre la compartición de archivos.
ibmcloud is shares -
Consulta los detalles de tu participación. Anote los destinos de montaje.
ibmcloud is share SHARE-IDMandato de ejemplo.
ibmcloud is share r134-bad98878-1f63-45d2-a3fd-60447094c2e6Salida de ejemplo
ID r134-bad98878-1f63-45d2-a3fd-60447094c2e6 Name pvc-e7e005a9-e96b-41ad-9d6e-74650a9110a0 CRN crn:v1:staging:public:is:us-south-1:a/77f2bceddaeb577dcaddb4073fe82c1c::share:r134-bad98878-1f63-45d2-a3fd-60447094c2e6 Lifecycle state stable Access control mode security_group Zone us-south-1 Profile dp2 Size(GB) 10 IOPS 100 User Tags clusterid:cpjao3l20dl78jadqkd0,namespace:default,provisioner:vpc.file.csi.ibm.io,pv:pvc-e7e005a9-e96b-41ad-9d6e-74650a9110a0,pvc:pv-file,reclaimpolicy:delete,storageclass:custom-eni Encryption provider_managed Mount Targets ID Name r134-aa2aabb8-f616-47be-886b-99220852b728 pvc-e7e005a9-e96b-41ad-9d6e-74650a9110a0 Resource group ID Name 300b9469ee8676f9a038ecdf408c1a9d Default Created 2024-06-11T19:55:11+05:30 Replication role none Replication status none Replication status reasons Status code Status message -
Obtenga el
nfsServerPath, también denominadoMount Path.ibmcloud is share-mount-target SHARE-ID SHARE-TARGET-IDMandato de ejemplo.
ibmcloud is share-mount-target r134-bad98878-1f63-45d2-a3fd-60447094c2e6 r134-aa2aabb8-f616-47be-886b-99220852b728Salida de ejemplo
ID r134-aa2aabb8-f616-47be-886b-99220852b728 Name pvc-e7e005a9-e96b-41ad-9d6e-74650a9110a0 VPC ID Name r134-f05922d4-d8ab-4f64-9a3d-82664b303bc1 vpc-public Access control mode security_group Resource type share_mount_target Virtual network interface ID Name 0716-6407fb4b-e962-49c4-8556-dc94f4574b4b defective-chloride-huffy-gladly Lifecycle state stable Mount path 10.240.0.23:/89d8a454_f552_42bf_8374_4d31481edf4d Transit Encryption none Created 2024-06-11T19:55:12+05:30 -
Cree un archivo de configuración PV denominado
static-file-share.yamlque haga referencia a la compartición de archivos.apiVersion: v1 kind: PersistentVolume metadata: name: static-file-share spec: mountOptions: - hard - nfsvers=4.1 - sec=sys accessModes: - ReadWriteMany capacity: storage: 10Gi csi: volumeAttributes: nfsServerPath: NFS-SERVER-PATH driver: vpc.file.csi.ibm.io volumeHandle: FILE-SHARE-ID#SHARE-TARGET-ID -
Cree el PV.
oc apply -f static-file-share.yaml -
Cree una PVC.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-static spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: "" #Leave the storage class blank. -
Cree la PVC para enlazar el PV.
oc apply -f pvc-static.yaml -
Cree un nombre de archivo de despliegue
testpod.yamlpara adjuntar su fileshare a un pod de aplicación.apiVersion: apps/v1 kind: Deployment metadata: name: testpod labels: app: testpod spec: selector: matchLabels: app: busybox template: metadata: labels: app: busybox spec: containers: - name: busybox image: busybox:1.28 command: [ "sh", "-c", "sleep 1h" ] volumeMounts: - name: my-vol mountPath: /data/demo # Mount path for the application. volumes: - name: pvc-name persistentVolumeClaim: claimName: pvc-static # The name of the PVC that you created earlierspec.containers.volumeMounts.mountPath- Especifique la vía de acceso absoluta del directorio en el que está montado el volumen dentro del contenedor. Los datos que se escriben en la vía de acceso de montaje se almacenan en el directorio
rootde la instancia de File Storage for VPC físicos. Si desea compartir un volumen entre diferentes aplicaciones, puede especificar subrutas del volumen para cada una de sus aplicaciones. volumeMounts.name- Especifique el nombre del volumen que se va a montar en el pod.
volume.name- Especifique el nombre del volumen que se va a montar en el pod. Normalmente, este nombre es el mismo que
volumeMounts.name. volumes.persistentVolumeClaim.claimName- Introduce el nombre del PVC al que está vinculado el PV que deseas utilizar.
-
Cree el despliegue.
oc apply -f testpod.yaml
Creación de su propia clase de almacenamiento
Puedes crear tu propia clase de almacenamiento personalizada con la configuración que prefieras para tu instancia de File Storage for VPC. Para mantener los costes bajos, puede aprovisionar inicialmente un PVC con un caudal mínimo y, más adelante, acceder al PVC y ajustar el caudal a medida que se definan mejor las necesidades.
Si necesita las características siguientes, debe crear su propia clase de almacenamiento.
- La app debe ejecutarse como no root.
- El clúster está en un grupo de recursos diferente de la VPC y la subred.
- Debe limitar el acceso de compartición de archivos a los pods en un nodo determinado o en una zona determinada.
- Es necesario que traiga su propio cifrado (BYOK) utilizando un proveedor de KMS como HPCS o Key Protect.
- Debe especificar manualmente la subred o la dirección IP de la Interfaz de red virtual(VNI).
- Necesitas más control sobre la capacidad y el ancho de banda. En este caso, puede utilizar el perfil
rfs. Para obtener más información, consulte Descripción general de los archivos compartidos regionales. - Si desea redondear automáticamente al alza la capacidad solicitada del PVC hasta la capacidad mínima admitida para un perfil
dp2de IOPS fijo. Para obtener más información, consulte Activación del redondeo automático de la capacidad para perfiles de IOPS fijos.
Si su clúster y su VPC no están en el mismo grupo de recursos, debe especificar el ID del grupo de recursos de la VPC en la sección resourceGroup y el ID del grupo de seguridad kube-<clusterID> en la sección securityGroupIDs.
Puede encontrar el ID del grupo de seguridad kube-<clusterID> ejecutando ibmcloud is sg kube-CLUSTER_ID | grep ID.
-
Crea un archivo de configuración de clase de almacenamiento. El siguiente ejemplo utiliza el perfil
dp2. Elija entre una clase de almacenamiento de primera generación y una de segunda generación.Ejemplo de primera generación:
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ibmc-vpc-file-custom-sc labels: app.kubernetes.io/name: ibm-vpc-file-csi-driver provisioner: vpc.file.csi.ibm.io mountOptions: - hard - nfsvers=4.1 - sec=sys parameters: profile: "dp2" # or rfs billingType: "hourly" # hourly or monthly encrypted: "false" encryptionKey: "" # If encrypted is true, then a user must specify the CRK-CRN. resourceGroup: "" # Resource group ID. By default, the resource group of the cluster will be used from storage-secrete-store secret. isENIEnabled: "true" # VPC File Share VNI feature will be used by all PVCs created with this storage class. securityGroupIDs: "" # By default cluster security group i.e kube-<clusterID> will be used. User can provide their own comma separated SGs. subnetID: "" # User can provide subnetID in which the VNI will be created. Zone and region are mandatory for this. If not provided CSI driver will use the subnetID available in the cluster's VPC zone. region: "" # VPC CSI driver will select a region from cluster node's topology. The user can override this default. zone: "" # VPC CSI driver will select a region from cluster node's topology. The user can override this default. primaryIPID: "" # Existing ID of reserved IP from the same subnet as the file share zone. Zone and region are mandatory for this. SubnetID is not mandatory for this. primaryIPAddress: "" # IPAddress for VNI to be created in the subnet of the zone. Zone, region and subnetID are mandatory for this. iops: "" # Example: 100, this option is valid only for the dp2 profile. allowCapacityRoundoffForIops: "true" # Optional. Enables automatic capacity roundoff for fixed IOPS dp2 profiles. When set to "true", if the requested PVC size is lower than the minimum supported capacity for the requested IOPS, the driver automatically provisions the volume at the minimum supported capacity. Disabled by default. Requires a Virtual Private Endpoint Gateway (VPEG) to IBM Global Catalog. throughput: "" # Example: 2000, this option is valid only for the rfs profile tags: "" # User can add a list of tags "a, b, c" that will be used at the time of provisioning file share, by default CSI driver has its own tags. uid: "0" # The initial user identifier for the file share, by default its root. gid: "0" # The initial group identifier for the file share, by default its root. classVersion: "1" reclaimPolicy: "Delete" allowVolumeExpansion: trueEjemplo de segunda generación:
Si aprovisiona un PVC de 10Gi utilizando la clase de almacenamiento de primera generación
ibmc-vpc-file-min-iops, la IOPS máxima es de 1.000. La asignación predeterminada es 100 y el rendimiento está fijado en 210 Mbps, que no se puede ajustar.Sin embargo, si se aprovisiona un PVC de 10Gi utilizando la clase de almacenamiento de segunda generación
ibmc-vpc-file-regional, las IOPS se fijan en 35.000 y el rendimiento máximo se puede ajustar hasta 8192 Mbps, aunque por defecto es de 8 Mbps.Por otro ejemplo, si inicialmente aprovisionas un PVC con un tamaño inferior a 16 TB e IOPS 500 fijas utilizando la clase de almacenamiento de primera generación
ibmc-vpc-file-500-iops, las IOPS y el rendimiento son fijos y se calculan en función del tamaño y las IOPS.Para ampliar ese PVC más allá de 16 TB, entonces la primera generación de la clase de almacenamiento
ibmc-vpc-file-500-iopsno puede funcionar. En cambio, si se utiliza la clase de almacenamiento de segunda generaciónibmc-vpc-file-regional-max-bandwidth, se puede aprovisionar un PVC de cualquier tamaño de hasta 32 TB y tiene hasta 35000 IOPS y un rendimiento predeterminado de 8192 Mbps, que se puede ajustar.apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ibmc-vpc-file-regional-max-bandwidth labels: app.kubernetes.io/name: ibm-vpc-file-csi-driver annotations: version: v2.0 revision: "1" provisioner: vpc.file.csi.ibm.io mountOptions: - hard - nfsvers=4.1 - sec=sys parameters: profile: "rfs" # general-purpose, sdp, 5iops-tier, 10iops-tier, or custom billingType: "hourly" encrypted: "false" encryptionKey: "" resourceGroup: "" throughput: "8192" # Example: 2000 classVersion: "1" isENIEnabled: "true" # VPC File Share ENI/VNI feature will be used by all PVCs created with this storage class. securityGroupIDs: "" # By default cluster security group i.e kube-<clusterID> will be used. User can provide their own command separated SGs. subnetID: "" # User can provide subnetID in which the ENI/VNI will be created.If not provided CSI driver will use the subnetID available in the cluster' VPC zone. primaryIPID: "" # Existing ID of reserved IP from any of subnets within the VPC,subnetID is not mandatory for this. primaryIPAddress: "" # IPAddress for ENI/VNI to be created in the respective subnet,subnetID is mandatory for this. uid: "0" # The initial user identifier for the file share, by default its root. gid: "0" # The initial group identifier for the file share, by default its root. allowVolumeExpansion: true # Select true or false. Only supported on version 3.0.1 and later reclaimPolicy: "Delete" -
Cree la clase de almacenamiento personalizada en su clúster.
oc apply -f custom-storageclass.yaml -
Verifique que la clase de almacenamiento está disponible en el clúster.
oc get scSalida de ejemplo
ibmc-vpc-file-custom-sc vpc.file.csi.ibm.io
Configuración de la clase de almacenamiento predeterminada
- Cambiar la clase de almacenamiento predeterminada solo está disponible para la versión del complemento 2.0 o posterior.
- Puede establecer la clase de almacenamiento predeterminada en una de las clases File Storage for VPC preinstaladas o en su propia clase de almacenamiento personalizada. Si está utilizando una clase de almacenamiento personalizada, asegúrese
de que el aprovisionador se establece en
vpc.file.csi.ibm.io. - Si se establecen varias clases de almacenamiento como predeterminadas en un clúster, puede utilizarse cualquiera de ellas. Como práctica recomendada, y para garantizar que se utiliza la clase de almacenamiento correcta, elimine cualquier clase de almacenamiento predeterminada existente en el clúster antes de establecer una nueva clase predeterminada. Si también se ha instalado el complemento de almacenamiento en bloques de VPC, es posible que ya se haya establecido una clase de almacenamiento en bloques de VPC como predeterminada. Para eliminarlo antes de establecer un nuevo valor por defecto, consulta Cambiar la clase de almacenamiento predeterminada para el almacenamiento en bloques de VPC.
-
Edita el configmap
addon-vpc-file-csi-driver-configmapy especifica el nombre de la clase de almacenamiento en el parámetroSET_DEFAULT_STORAGE_CLASS.oc edit cm addon-vpc-file-csi-driver-configmap -n kube-systemSalida de ejemplo
SET_DEFAULT_STORAGE_CLASS: "ibmc-vpc-file-eit" -
Verifique que el valor predeterminado se establece correctamente mediante la descripción de la
file-csi-driver-statusconfigmap.oc describe cm file-csi-driver-status -n kube-systemEjemplo de salida.
events: ---- - event: EnableVPCFileCSIDriver description: 'VPC File CSI Driver enable successful, DriverVersion: v2.0.6' timestamp: "2024-09-20 12:01:02" - event: Change default storage class request description: Successfully set 'ibmc-vpc-file-eit' as default storage class timestamp: "2024-09-20 12:01:36"
Despliegue de una app que se ejecuta como no root
Los parámetros « uid » y « gid » de la clase de almacenamiento establecen los identificadores iniciales de usuario y grupo para el recurso compartido de archivos a nivel de infraestructura. Para obtener información
general sobre cómo funcionan los identificadores complementarios en el almacenamiento de archivos de VPC, consulta « Identificadores complementarios para recursos compartidos de archivos de VPC ».
-
Cree su propia clase de almacenamiento y especifique el ID de grupo o el ID de usuario que desea utilizar para la app.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ibmc-vpc-file-custom-sc labels: app.kubernetes.io/name: ibm-vpc-file-csi-driver provisioner: vpc.file.csi.ibm.io mountOptions: - hard - nfsvers=4.1 - sec=sys parameters: profile: "dp2" iops: "100" billingType: "hourly" # hourly or monthly encrypted: "false" uid: "3000" # The initial user identifier for the file share. gid: "1000" # The initial group identifier for the file share. classVersion: "1" reclaimPolicy: "Delete" allowVolumeExpansion: true -
Guarde el YAML siguiente en un archivo denominado
my-pvc.yaml.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: ibmc-vpc-file-custom-sc -
Cree la PVC.
oc apply -f my-pvc.yaml -
Cree un pod que monte la PVC.
apiVersion: v1 kind: Pod metadata: name: security-context-demo spec: securityContext: runAsUser: 3000 runAsGroup: 1000 volumes: - name: sec-ctx-vol persistentVolumeClaim: claimName: my-pvc containers: - name: sec-ctx-demo image: busybox:1.28 command: [ "sh", "-c", "sleep 1h" ] volumeMounts: - name: sec-ctx-vol mountPath: /data/demo securityContext: allowPrivilegeEscalation: false -
Comprueba que el pod esté en funcionamiento.
oc get pods
Configuración del cifrado KMS para File Storage for VPC
Utilice un proveedor de servicios de gestión de claves (KMS), como IBM® Key Protect o Hyper Protect Crypto Services, para crear una clave raíz privada que utilizará en su instancia de File Storage for VPC para cifrar los datos a medida que se escriben en el almacenamiento. Una vez creada la clave raíz privada, crea tu propia clase de almacenamiento o un secreto de Kubernetes con tu clave raíz y, a continuación, utiliza esta clase de almacenamiento o este secreto para aprovisionar tu instancia de File Storage for VPC.
-
Crea una instancia del proveedor KMS que desees utilizar.
-
Crea una clave raíz en tu instancia de KMS.
- Clave raíz de Key Protect.
- Clave raíz de Hyper Protect Crypto Services. De forma predeterminada, la clave raíz se crea sin fecha de caducidad.
-
Complete los requisitos previos para el cifrado gestionado por el cliente y autorice a File Storage for VPC a acceder a IBM® Key Protect. Asegúrese de dar File Storage for VPC al menos
Readeracceso a su instancia KMS. -
Cree una clase de almacenamiento personalizada y especifique los detalles de su KMS.
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: custom-sc-encrypted labels: app.kubernetes.io/name: ibm-vpc-file-csi-driver provisioner: vpc.file.csi.ibm.io mountOptions: - hard - nfsvers=4.1 - sec=sys parameters: profile: "dp2" billingType: "hourly" # hourly or monthly encrypted: "true" encryptionKey: "" # Specify the root key CRN. resourceGroup: "" # Resource group ID. By default, the resource group of the cluster will be used from storage-secrete-store secret. isENIEnabled: "true" # VPC File Share VNI feature will be used by all PVCs created with this storage class. securityGroupIDs: "" # By default cluster security group i.e kube-<clusterID> will be used. User can provide their own comma separated SGs. subnetID: "" # User can provide subnetID in which the VNI will be created. Zone and region are mandatory for this. If not provided CSI driver will use the subnetID available in the cluster's VPC zone. region: "" # VPC CSI driver will select a region from cluster node's topology. The user can override this default. zone: "" # VPC CSI driver will select a region from cluster node's topology. The user can override this default. primaryIPID: "" # Existing ID of reserved IP from the same subnet as the file share zone. Zone and region are mandatory for this. SubnetID is not mandatory for this. primaryIPAddress: "" # IPAddress for VNI to be created in the subnet of the zone. Zone, region and subnetID are mandatory for this. tags: "" # User can add a list of tags "a, b, c" that will be used at the time of provisioning file share, by default CSI driver has its own tags. uid: "0" # The initial user identifier for the file share, by default its root. gid: "0" # The initial group identifier for the file share, by default its root. classVersion: "1" reclaimPolicy: "Delete" allowVolumeExpansion: true -
Cree la clase de almacenamiento.
oc apply -f encrypted-class.yaml -
Guarde el YAML siguiente en un archivo denominado
my-pvc.yaml.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: custom-sc-encrypted -
Cree la PVC.
oc apply -f my-pvc.yaml -
Guarde la siguiente configuración de despliegue en el archivo denominado
deployment.yamly haga referencia a la PVC que ha creado en el paso anterior.apiVersion: apps/v1 kind: Deployment metadata: name: my-deployment labels: app: my-deployment spec: selector: matchLabels: app: busybox template: metadata: labels: app: busybox spec: containers: - name: busybox image: busybox:1.28 command: [ "sh", "-c", "sleep 1h" ] volumeMounts: - name: my-vol mountPath: /data/demo # Mount path for the application. volumes: - name: my-vol persistentVolumeClaim: claimName: my-pvc # Your PVC name.volumeMounts.mountPath- En la sección de montajes de volúmenes de contenedor, especifique la vía de acceso absoluta del directorio en el que está montado el volumen dentro del contenedor. Los datos que se escriben en la vía de acceso de montaje se almacenan en
el directorio
rootde la instancia de File Storage for VPC físicos. Si desea compartir un volumen entre diferentes aplicaciones, puede especificar subrutas del volumen para cada una de sus aplicaciones. volumeMounts.name- En la sección de montajes de volúmenes de contenedor, especifique el nombre del volumen que se va a montar en el pod.
volume.name- En la sección de volúmenes, especifique el nombre del volumen que se va a montar en el pod. Normalmente, este nombre es el mismo que
volumeMounts.name.
-
Cree el despliegue.
oc apply -f deployment.yaml
Configuración del cifrado en tránsito (EIT)
Para configurar el cifrado en tránsito para File Storage for VPC, consulta « Cifrado en tránsito para IBM Cloud File Storage for VPC ». Este tema abarca tanto los recursos compartidos
de archivos zonales (perfil « dp2 ») como los recursos compartidos de archivos regionales (perfil « rfs », versión beta).
Actualización de las solicitudes y los límites de recursos de los contenedores
Puedes personalizar las solicitudes y los límites de recursos de CPU y memoria para los contenedores que se ejecutan en el complemento « File Storage for VPC ». Ajustar estos valores puede ayudarte a optimizar el rendimiento en clústeres de gran tamaño o en entornos con recursos limitados.
Los parámetros siguen el patrón de nomenclatura <ContainerName>CPULimit, <ContainerName>CPURequest, <ContainerName>MemoryLimit y <ContainerName>MemoryRequest. Aplícalos
a los contenedores del controlador y del servidor de nodos.
-
Edita el mapa de configuración «
addon-vpc-file-csi-driver-configmap» y añade los parámetros de recurso para los contenedores que quieras ajustar. En el siguiente ejemplo se configuran los valores de CPU y memoria para los contenedores del controlador y del servidor de nodos.oc edit cm addon-vpc-file-csi-driver-configmap -n kube-systemValores de ejemplo:
controllerCPULimit: "200m" controllerCPURequest: "100m" controllerMemoryLimit: "256Mi" controllerMemoryRequest: "128Mi" nodeServerCPULimit: "200m" nodeServerCPURequest: "100m" nodeServerMemoryLimit: "256Mi" nodeServerMemoryRequest: "128Mi" -
Comprueba que los cambios en el recurso se hayan aplicado correctamente consultando el mapa de configuración «
file-csi-driver-status». Busca un evento de «Successfully set container resources» en la sección «events».oc describe cm file-csi-driver-status -n kube-systemSalida de ejemplo:
events: ---- - description: Successfully set container resources event: Change container resources timestamp: "2026-06-26 08:32:05"
Limitación del acceso de compartición de archivos por agrupación de nodos trabajadores, zona o nodo trabajador
El comportamiento predeterminado del complemento de clúster File Storage for VPC es que los pods de cualquier nodo pueden acceder a las comparticiones de archivos. También puede aplicar un control más granular sobre cómo los pods acceden a los compartimientos de archivos. Por ejemplo, puede limitar el acceso de compartición de archivos sólo a los pods de un nodo específico, en una zona específica, en una agrupación de nodos trabajadores específica. Revise los siguientes casos de ejemplo para ver cómo puede configurar el acceso de pod a las comparticiones de archivos.
Cuando se crea un PVC, se crea un objetivo de uso compartido de archivos por PVC y se reserva una IP VNI en esa subred de la zona. Esto significa que el número máximo de PVC para el almacenamiento de archivos de VPC depende de las direcciones IP disponibles en esa subred.
Si utiliza las siguientes características de VNI para limitar el acceso de pod a sus comparticiones de archivos, es posible que su app no esté altamente disponible.
Antes de empezar
Para limitar el acceso de compartición de archivos por nodo, zona o grupo de recursos, primero debe crear un grupo de seguridad de VPC personalizado.
-
Liste los clústeres y anote el ID de clúster donde desea desplegar el almacenamiento de archivos.
ibmcloud ks cluster ls -
Obtenga los datos de su pool de trabajadores.
ibmcloud ks worker-pool ls --cluster CLUSTER -
Obtén los detalles de tu subred.
ibmcloud ks worker-pool get WORKER_POOL --cluster CLUSTER | grep -A 3 Subnets -
Obtenga sus CIDR de subred. Repite este paso para cada subred. Este rango CIDR se utilizará más adelante.
ibmcloud is subnet SUBNET_ID | grep "IPv4 CIDR" -
Liste los grupos de seguridad y anote el grupo de seguridad de ID
kube-<clusterID>para el clúster. Necesitará el ID de grupo de seguridad más adelante al añadir reglas de grupo de seguridad.ibmcloud is sgSalida de ejemplo
ID Name Rules Targets VPC Resource group r006-4aaec88f-4986-4b7c-a737-401f7fef1555 kube-clusterID 15 0 my-vpc default -
Cree un grupo de seguridad personalizado en la misma VPC que el clúster. Puede utilizar este grupo de seguridad para controlar el acceso a los compartimientos de archivos añadiendo reglas de grupo de seguridad.
ibmcloud is security-group-create my-custom-security-group VPC-ID -
Cree su propia clase de almacenamiento y especifique el ID del grupo de seguridad personalizado que ha creado anteriormente. Todas las PVC creadas a partir de esta clase de almacenamiento están en el grupo de seguridad personalizado.
-
Crea un PVC que utilice tu propia clase de almacenamiento.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-custom-vni spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: "" # For example: my-custom-storage-class -
Después de que el PV se enlace a la PVC, obtenga los detalles del PV y anote el valor
nfsServerPathpara encontrar la dirección IP de VNI.kubectl get pv pvc-XXXX -o yaml | grep nfsServerPathSalida de ejemplo
nfsServerPath: XXX.XX.XX.XXX:/XX # VNI IP address
Limitación del acceso de compartición de archivos a los pods en un nodo trabajador
-
Asegúrese de haber completado los requisitos previos.
-
Añada la regla siguiente al grupo de seguridad personalizado que ha creado anteriormente.
ibmcloud is sg-rulec CUSTOM-SG inbound tcp --port-min 111 --port-max 2049 --remote 10.240.0.20 # Worker node IP -
Añade la siguiente regla al grupo de seguridad
kube-clusterID.ibmcloud is sg-rulec kube-<cluster-id> outbound tcp --port-min 111 --port-max 2049 --remote 10.240.0.10 # VNI IP -
Cree un despliegue que utilice la PVC. Sólo los pods que se despliegan en el nodo trabajador que coincide con la regla que ha creado pueden montar o utilizar la PVC. Los pods desplegados en otros nodos se atascan en el estado
creatingdel contenedor.
Limitación del acceso de compartición de archivos a pods en nodos trabajadores en una sola zona
-
Asegúrese de haber completado los requisitos previos.
-
Añada la regla siguiente al grupo de seguridad personalizado que ha creado anteriormente.
ibmcloud is sg-rulec CUSTOM-SG inbound tcp --port-min 111 --port-max 2049 --remote 10.240.0.0/24 # zone subnet cidr range -
Añade la siguiente regla al grupo de seguridad
kube-clusterID. Especifique la dirección IP de la interfaz de red virtual (VNI).ibmcloud is sg-rulec kube-<cluster-ID> outbound tcp --port-min 111 --port-max 2049 --remote 10.240.0.10 # VNI IP -
Cree un despliegue que utilice la PVC. Sólo los pods desplegados en la zona que se lista en la regla anterior pueden montar la PVC. Los pods que se despliegan en otras zonas no pueden acceder a la PVC y están atascados en el estado
creatingdel contenedor.
Limitación del acceso de compartición de archivos a pods en nodos trabajadores de una única agrupación de nodos trabajadores
-
Asegúrese de haber completado los requisitos previos.
-
Cree reglas de entrada para cada rango de subred del grupo de trabajadores.
ibmcloud is sg-rulec CUSTOM-SG inbound tcp --port-min 111 --port-max 2049 --remote 10.240.0.0/24 # zone 1 subnet cidr range ibmcloud is sg-rulec CUSTOM-SG inbound tcp --port-min 111 --port-max 2049 --remote 10.240.1.0/24 # zone 2 subnet cidr range -
Añade la siguiente regla al grupo de seguridad
kube-clusterID. Especifique la dirección IP de la interfaz de red virtual (VNI) como remota o de origen.ibmcloud is sg-rulec kube-<cluster-ID> outbound tcp --port-min 111 --port-max 2049 --remote 10.240.0.10 # VNI IP -
Implementa una aplicación que utilice el PVC que has creado anteriormente. Sólo los pods de las agrupaciones de nodos trabajadores indicadas en la regla anterior pueden montar la PVC. O, si despliega la app en un daemonset, los pods solo se desplegarán correctamente en los nodos trabajadores para los que ha creado reglas de grupo de seguridad. Los pods de las agrupaciones de nodos trabajadores que no están en la agrupación de nodos trabajadores especificada fallan con un error
MountVolume.SetUp failed for volume "pvc-184b8c92-33ea-4874-b2ac-17665e53c060" : rpc error: code = DeadlineExceeded desc = context deadline exceeded.
Limitación del acceso de compartición de archivos a pods en nodos trabajadores en varias agrupaciones de nodos trabajadores
-
Asegúrese de haber completado los requisitos previos.
-
Añade las siguientes reglas a tu grupo de seguridad personalizado. Especifique las agrupaciones de nodos trabajadores y los rangos CIDR de subred como el remoto o el origen.
ibmcloud is sg-rulec CUSTOM-SG inbound tcp --port-min 111 --port-max 2049 --remote 10.240.1.0/24 # worker pool 1, zone 1 subnet CIDR range ibmcloud is sg-rulec CUSTOM-SG inbound tcp --port-min 111 --port-max 2049 --remote 10.240.1.0/24 # worker pool 1, zone 2 subnet CIDR range ibmcloud is sg-rulec CUSTOM-SG inbound tcp --port-min 111 --port-max 2049 --remote 10.241.0.0/24 # worker pool 2, zone 1 subnet CIDR range ibmcloud is sg-rulec CUSTOM-SG inbound tcp --port-min 111 --port-max 2049 --remote 10.241.1.0/24 # worker pool 2, zone 2subnet CIDR range -
Añade la siguiente regla al grupo de seguridad
kube-<clusterID>. Especifique la dirección IP de la interfaz de red virtual (VNI) como remota o de origen.ibmcloud is sg-rulec kube-<clusterID> outbound tcp --port-min 111 --port-max 2049 --remote 10.240.1.7 # VNI-IP -
Cree un despliegue que utilice la PVC. Sólo los pods desplegados en la zona indicada en la regla pueden montar la PVC. Los pods desplegados en los nodos trabajadores restringidos se atascan en el estado
creatingdel contenedor.