Ajout de File Storage for VPC à des applications
Red Hat OpenShift on IBM Cloud fournit des classes de stockage prédéfinies que vous pouvez utiliser pour provisionner de l' File Storage for VPC e pour les applications de votre cluster. Chaque classe de stockage spécifie la taille disponible, les IOPS, le système de fichiers et la politique de conservation pour le partage de fichiers que vous provisionnez. Vous pouvez également créer vos propres classes de stockage adaptées à votre cas d'utilisation.
Passez en revue les remarques et considérations suivantes avant de poursuivre.
- Une fois que vous avez mis à disposition un type de stockage à l'aide d'une classe de stockage, vous ne pouvez pas modifier le type ou la règle de conservation de l'unité de stockage. Toutefois, vous pouvez modifier la taille et les IOPS si vous souhaitez augmenter la capacité de stockage et les performances. Pour modifier le type et la politique de conservation de votre stockage, vous devez créer une nouvelle instance de stockage et copier les données de l'ancienne instance vers la nouvelle.
- Si votre cluster et votre VPC se trouvent dans des groupes de ressources distincts, vous devez créer votre propre classe de stockage et fournir l'ID de votre groupe de ressources VPC dans la section
resourceGroupainsi que l'ID du groupe de sécuritékube-<clusterID>dans la sectionsecurityGroupIDsavant de pouvoir approvisionner les partages de fichiers. Pour récupérer l'identifiant du groupe de sécurité, procédez comme suit. Pour plus d'informations, voir Créer sa propre classe de stockage. - De nouvelles règles de groupe de sécurité ont été introduites dans les versions de cluster 4.11 et ensuite. Ces changements de règles signifient que vous devez synchroniser vos groupes de sécurité avant de pouvoir utiliserFile Storage for VPC. Pour plus d'informations, voir AjouterFile Storage for VPC aux applications.
- De nouvelles classes de stockage ont été ajoutées avec la version2.0 du module complémentaire. Vous ne pouvez plus provisionner de nouveaux partages de fichiers utilisant les anciennes classes de stockage. Les volumes existants qui utilisent les anciennes classes de stockage continuent de fonctionner, mais vous ne pouvez pas étendre les volumes créés à l'aide des anciennes classes. Pour plus d'informations, consultez le Migration vers une nouvelle classe de stockage.
- La création d'un PVC à l'aide de StorageClassSecrets n'est pas prise en charge.
- Assurez-vous que l'utilisateur qui crée le cluster dispose des autorisations Reader, Writer et Operator pour VPC Infrastructure Services.
- Veillez à configurer une autorisation de service de l'infrastructure VPC vers KMS/HPCS si vous prévoyez d'utiliser le cryptage sur vos partages de fichiers.
IBM Cloud modifie ses services de gestion de clés dédiés. Hyper Protect Crypto Services sera remplacé par Key Protect Dedicated.
- Par défaut, le module complémentaire de cluster File Storage for VPC met à disposition des partages de fichiers dans le groupe de sécurité
kube-<clusterID>. Cela signifie que les pods peuvent accéder aux partages de fichiers entre les noeuds et les zones. - Si vous utilisez des restrictions basées sur le contexte, veillez à configurer vos zones et règles réseau. Pour plus d'informations, voir Protection des services d'infrastructure Virtual Private Cloud(VPC)avec des restrictions basées sur le contexte.
De nouvelles règles de groupe de sécurité ont été introduites dans les versions 4.11 et ultérieures. Ces modifications apportées aux règles signifient que vous devez synchroniser vos groupes de sécurité avant de pouvoir utiliser File Storage for VPC. Si votre cluster a été initialement créé sous la version 4.11 ou une version antérieure, exécutez les commandes suivantes pour synchroniser les paramètres de votre groupe de sécurité.
- Récupérez l'identifiant de votre cluster.
ibmcloud oc cluster ls - Obtenez l'ID du groupe de sécurité
kube-<clusterID>.ibmcloud is sg kube-CLUSTER_ID | grep ID - Synchronisez le groupe de sécurité
kube-<clusterID>en utilisant l'ID que vous avez récupéré à l'étape précédente.ibmcloud ks security-group sync -c CLUSTER_ID --security-group ID
Guide de démarrage rapide pour l' File Storage for VPC
Créez une revendication de volume persistant (PVC) pour provisionner dynamiquement des volumes de stockage File Storage for VPC pour votre cluster. L'approvisionnement dynamique crée automatiquement le volume persistant (PV) correspondant et organise le partage de fichiers dans votre compte.
Désormais disponible, vous pouvez choisir une classe de stockage de deuxième génération.
-
Passez en revue les classes de stockage préinstallées en exécutant la commande suivante. Pour plus d'informations, voir la rubrique de référence de la classe de stockage.
oc get sc | grep vpc-file -
Sauvegardez le fichier YAML suivant dans un fichier. Cet exemple crée une réclamation nommée
my-pvcen utilisant la classe de stockageibmc-vpc-file-min-iopsavec une taille de gigaoctet10Gi.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. -
Créez le PVC (circuit virtuel permanent).
oc apply -f my-pvc.yaml -
Vérifiez que votre PVC est créée et liée au volume persistant (PV).
oc describe pvc my-pvcExemple de sortie
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 -
Sauvegardez la configuration de déploiement suivante dans le fichier
deployment.yamlet référencez la réservation de volume persistant que vous avez créée à l'étape précédente.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- Dans la section container.volume.mounts, entrez le chemin d'accès absolu du répertoire où est monté le volume dans le conteneur. Les données écrites dans le chemin de montage sont stockées sous le répertoire
rootdans votre instance File Storage for VPC physique. Si vous souhaitez partager un volume entre différentes applications, vous pouvez spécifier des sous-chemins d'accès au volume pour chacune de vos applications. volumeMounts.name- Dans la section container.volume.mounts, entrez le nom du volume à monter sur votre pod.
volume.name- Dans la section volumes, entrez le nom du volume à monter sur votre pod. Généralement, ce nom est identique à
volumeMounts.name. claimName- Dans la section volumes.persistent.volume.claim, entrez le nom de la PVC qui lie le volume persistant que vous souhaitez utiliser.
-
Créez le déploiement.
oc apply -f deployment.yaml -
Vérifiez que le montage du volume persistant (PV) a abouti.
oc describe deployment my-deploymentLe point de montage est indiqué dans la zone Volume Mounts et le volume est indiqué dans la zone 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 -
Facultatif: une fois que votre pod est en cours d'exécution, essayez d' étendre votre volume de stockage.
Migration vers une nouvelle classe de stockage
- De nouvelles classes de stockage ont été ajoutées avec la version2.0 du module complémentaire.
- Vous ne pouvez plus provisionner de nouveaux partages de fichiers utilisant les anciennes classes de stockage.
- Les volumes existants qui utilisent les anciennes classes de stockage continuent de fonctionner, mais vous ne pouvez pas étendre les volumes créés à l'aide des anciennes classes.
- Si vous avez besoin de la fonctionnalité d'extension de volume, suivez les étapes suivantes pour migrer vos applications vers une classe de stockage plus récente.
- Si vous n'avez pas besoin de la fonctionnalité d'extension de volume, vous n'avez pas besoin de migrer et vos PVC continuent de fonctionner normalement.
- Les étapes suivantes couvrent la migration manuelle.
-
Recherchez le PVC que vous souhaitez migrer et notez le nom du PVC et le nom du PV associé.
oc get pvc -
Réduisez votre application qui utilise le PVC.
oc scale deployment DEPLOYMENT --replicas 0 -
Modifiez l'objet PV que votre application utilise pour modifier la stratégie de récupération en
Retainet classe de stockage àibmc-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 -
Supprimez l'objet PVC existant.
kubectl delete pvc PVC -
Modifiez à nouveau le PV et supprimez le
claimRefsection.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 -
Créez un PVC qui a le même nom et la même taille que votre PVC précédent. Cela doit être fait un par un pour tous les PVC concernés.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: <pvc-name> spec: accessModes: - ReadWriteMany resources: requests: storage: <size>Gi storageClassName: ibmc-vpc-file-min-iops -
Faites évoluer votre application qui utilisait le PVC.
k scale deployment DEPLOYMENT --replicas x -
Pour continuer à utiliser l'extension de volume, voir Configuration de l'extension du volume.
Configuration de l'extension de volume
Pour fournir des volumes qui prennent en charge l'extension, vous devez utiliser la classe de stockage ayant allowVolumeExpansion définie sur true.
Le module complémentaire de cluster File Storage for VPC prend en charge l'extension en modes en ligne et hors ligne. Cependant, l'extension n'est possible que dans les limites de taille et de plage d'IOP définies dans le profil d' File Storage for VPC.
De nouvelles classes de stockage ont été introduites avec la version 2.0. L'expansion du volume ne fonctionne pas pour les partages qui utilisent les classes de stockage des versions antérieures du module complémentaire.
Avant de commencer
-
Pour utiliser l'extension de volume, assurez-vous de mettre à jour votre module complémentaire avec au moins la version 2.0.
-
Assurez-vous que votre application utilise l'une des classes de stockage les plus récentes. Pour les étapes de migration, voir Migration vers une nouvelle classe de stockage
-
Si vous n'avez pas d'application en cours d'exécution, commencez par déployer le exemple de démarrage rapide PVC et déploiement.
Développement d'un volume monté
-
Une fois la PVC montée par un pod d'application, vous pouvez étendre le volume en modifiant la valeur de la zone
spec.resources.requests.storagedans votre PVC. Pour étendre le volume, modifiez la PVC et augmentez la valeur indiquée dans la zonespec.resources.requests.storage.kubectl edit pvc my-pvcspec: accessModes: - ReadWriteMany resources: requests: storage: 50Gi -
Enregistrez et fermez le PVC. Attendez quelques minutes que le volume soit étendu.
-
Vérifiez que votre volume est étendu.
kubectl get pvcExemple de sortie
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
Association d'un stockage de fichiers existant à une application
Créez une revendication de volume persistant (PVC) afin d'allouer de manière statique des ressources File Storage for VPC à votre cluster. La mise à disposition statique permet aux administrateurs de cluster de mettre des unités de stockage existantes à la disposition d'un cluster.
-
Obtenez l'ID de votre cluster.
ibmcloud ks cluster ls -
Obtenez l'ID de votre
kube-<clusterID>groupe de sécurité.ibmcloud is sg kube-CLUSTER_ID | grep ID -
Créez un partage de fichiers. Pour plus d'informations, voir Création de partages de fichiers et de cibles de montage.
ibmcloud is share-create --name my-file-share --zone us-south-2 --profile dp2 --size 1000 --iops 1000 -
Créez une cible de montage de partage et spécifiez l'identifiant du groupe de sécurité
kube-<clusterID>que vous avez récupéré plus tôt dans l'option--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 -
Avant de créer un volume persistant, extrayez les détails relatifs à votre partage de fichiers.
ibmcloud is shares -
Découvrez les détails de votre part. Notez les cibles de montage.
ibmcloud is share SHARE-IDExemple de commande.
ibmcloud is share r134-bad98878-1f63-45d2-a3fd-60447094c2e6Exemple de sortie
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 -
Obtenez le
nfsServerPath, également appeléMount Path.ibmcloud is share-mount-target SHARE-ID SHARE-TARGET-IDExemple de commande.
ibmcloud is share-mount-target r134-bad98878-1f63-45d2-a3fd-60447094c2e6 r134-aa2aabb8-f616-47be-886b-99220852b728Exemple de sortie
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 -
Créez un fichier de configuration de volume persistant appelé
static-file-share.yamlqui fait référence à votre partage de fichiers.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 -
Créez le volume persistant.
oc apply -f static-file-share.yaml -
Créez une réservation de volume persistant.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-static spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: "" #Leave the storage class blank. -
Créez la réservation de volume persistant pour lier votre volume persistant.
oc apply -f pvc-static.yaml -
Créez un nom de fichier de déploiement
testpod.yamlpour attacher votre partage de fichiers à un module d'application.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- Entrez le chemin d'accès absolu du répertoire où est monté le volume dans le conteneur. Les données écrites dans le chemin de montage sont stockées sous le répertoire
rootdans votre instance File Storage for VPC physique. Si vous souhaitez partager un volume entre différentes applications, vous pouvez spécifier des sous-chemins d'accès au volume pour chacune de vos applications. volumeMounts.name- Entrez le nom du volume à monter sur votre pod.
volume.name- Entrez le nom du volume à monter sur votre pod. Généralement, ce nom est identique à
volumeMounts.name. volumes.persistentVolumeClaim.claimName- Saisissez le nom du PVC auquel est associé le PV que vous souhaitez utiliser.
-
Créez le déploiement.
oc apply -f testpod.yaml
Création de votre propre classe de stockage
Vous pouvez créer votre propre classe de stockage personnalisée avec les paramètres de votre choix pour votre instance d' File Storage for VPC. Pour maintenir les coûts à un niveau bas, vous pouvez initialement provisionner un PVC avec un débit minimum, puis accéder ultérieurement au PVC et ajuster le débit au fur et à mesure que les besoins sont mieux définis.
Si vous avez besoin des fonctions suivantes, vous devez créer votre propre classe de stockage.
- Votre application doit être exécutée en tant qu'utilisateur non root.
- Votre cluster se trouve dans un groupe de ressources différent de votre VPC et de votre sous-réseau.
- Vous devez limiter l'accès au partage de fichiers aux pods sur un noeud donné ou dans une zone donnée.
- Vous devez utiliser votre propre chiffrement (BYOK) à l'aide d'un fournisseur KMS tel que HPCS ou Key Protect.
- Vous devez spécifier manuellement le sous-réseau ou l'adresse IP de l'interface VNI(Virtual Network Interface).
- Vous avez besoin d'un meilleur contrôle de la capacité et de la largeur de bande. Dans ce cas, vous pouvez utiliser le profil
rfs. Pour plus d'informations, voir la présentation des partages de fichiers régionaux. - Vous souhaitez arrondir automatiquement à la hausse la capacité PVC demandée à la capacité minimale prise en charge pour un profil
dp2IOPS fixe. Pour plus d'informations, consultez la section Activation de l'arrondi automatique de la capacité pour les profils IOPS fixes.
Si votre cluster et votre VPC ne font pas partie du même groupe de ressources, vous devez spécifier l'ID du groupe de ressources VPC dans la section resourceGroup et l'ID du groupe de sécurité kube-<clusterID> dans la section securityGroupIDs. Vous pouvez trouver l'ID du groupe de sécurité kube-<clusterID> en exécutant ibmcloud is sg kube-CLUSTER_ID | grep ID.
-
Créer un fichier de configuration de classe de stockage. L'exemple suivant utilise le profil
dp2. Choisissez entre une classe de stockage de première et de deuxième génération.Exemple de première génération :
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: trueExemple de deuxième génération :
Si vous provisionnez un PVC 10Gi en utilisant la classe de stockage
ibmc-vpc-file-min-iopsde première génération, l'IOPS maximum est de 1 000. L'allocation par défaut est de 100 et le débit est fixé à 210 Mbps, ce qui n'est pas réglable.Cependant, si vous provisionnez un PVC 10Gi en utilisant la classe de stockage
ibmc-vpc-file-regionalde deuxième génération, l'IOPS est fixé à 35 000 et le débit maximum peut être réglé jusqu'à 8192 Mbps, même si la valeur par défaut est de 8 Mbps.Autre exemple, si vous provisionnez initialement un PVC d'une taille inférieure à 16 To et d'un IOPS fixe de 500 en utilisant la classe de stockage de première génération
ibmc-vpc-file-500-iops, l'IOPS et le débit sont fixes et calculés en fonction de la taille et de l'IOPS.Pour étendre ce PVC au-delà de 16 To, la classe de stockage
ibmc-vpc-file-500-iopsde première génération ne peut pas fonctionner. En utilisant la classe de stockage de deuxième générationibmc-vpc-file-regional-max-bandwidthà la place, un PVC de n'importe quelle taille peut être provisionné jusqu'à 32 To et dispose d'un maximum de 35 000 IOPS et d'un débit par défaut de 8192 Mbps, qui peut être ajusté.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" -
Créez la classe de stockage personnalisée dans votre cluster.
oc apply -f custom-storageclass.yaml -
Vérifiez que votre classe de stockage est disponible dans le cluster.
oc get scExemple de sortie
ibmc-vpc-file-custom-sc vpc.file.csi.ibm.io
Définition de la classe de stockage par défaut
- La modification de la classe de stockage par défaut n'est disponible que pour la version du module complémentaire 2.0 ou ultérieure.
- Vous pouvez définir la classe de stockage par défaut sur l'une des classes préinstallées File Storage for VPC ou sur votre propre classe de stockage personnalisée. Si vous utilisez une classe de stockage personnalisée, assurez-vous que le
provisionneur est défini sur
vpc.file.csi.ibm.io. - Si plusieurs classes de stockage sont définies par défaut dans un cluster, n'importe laquelle des classes de stockage par défaut peut être utilisée. Pour garantir l'utilisation de la bonne classe de stockage, supprimez toutes les classes de stockage par défaut existantes dans le cluster avant de définir une nouvelle classe par défaut. Si le module complémentaire de stockage en blocs VPC est également installé, une classe de stockage en blocs VPC peut déjà être définie par défaut. Pour la supprimer avant de définir une nouvelle valeur par défaut, consultez la section Modification de la classe de stockage par défaut pour le stockage en blocs VPC.
-
Modifiez la carte de configuration
addon-vpc-file-csi-driver-configmapet spécifiez le nom de la classe de stockage dans le paramètreSET_DEFAULT_STORAGE_CLASS.oc edit cm addon-vpc-file-csi-driver-configmap -n kube-systemExemple de sortie
SET_DEFAULT_STORAGE_CLASS: "ibmc-vpc-file-eit" -
Vérifiez que la valeur par défaut est correctement définie en décrivant le
file-csi-driver-statusconfigmap.oc describe cm file-csi-driver-status -n kube-systemExemple de sortie.
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"
Déploiement d'une application qui s'exécute en tant qu'application non root
Les paramètres « uid » et « gid » de la classe de stockage définissent les identifiants initiaux de l'utilisateur et du groupe pour le partage de fichiers au niveau de l'infrastructure. Pour en savoir plus sur le fonctionnement
des identifiants supplémentaires dans le stockage de fichiers VPC, consultez la section « Identifiants supplémentaires pour les partages de fichiers VPC ».
-
Créez votre propre classe de stockage et spécifiez l'ID groupe ou l'ID utilisateur que vous souhaitez utiliser pour votre application.
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 -
Sauvegardez le fichier YAML suivant dans un fichier appelé
my-pvc.yaml.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: ibmc-vpc-file-custom-sc -
Créez le PVC (circuit virtuel permanent).
oc apply -f my-pvc.yaml -
Créez un pod qui monte la réservation de volume persistant.
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 -
Vérifiez que le pod est en cours d'exécution.
oc get pods
Mise en place du cryptage KMS pour File Storage for VPC
Utilisez un fournisseur de service de gestion des clés (KMS), tel que IBM® Key Protect ou Hyper Protect Crypto Services, pour créer une clé racine privée que vous utiliserez dans votre instance d’ File Storage for VPC afin de chiffrer les données au moment de leur écriture sur le stockage. Après avoir créé la clé racine privée, créez votre propre classe de stockage ou un secret Kubernetes à l’aide de votre clé racine, puis utilisez cette classe de stockage ou ce secret pour provisionner votre instance File Storage for VPC.
-
Créez une instance du fournisseur KMS que vous souhaitez utiliser.
-
Créez une clé racine dans votre instance KMS.
- Clé racine Key Protect.
- Clé racine Hyper Protect Crypto Services. Par défaut, la clé racine est créée sans date d'expiration.
-
Complétez les conditions préalables pour le chiffrement géré par le client et autorisez File Storage for VPC à accéder à IBM® Key Protect. Veillez à donner à File Storage for VPC au moins
Readerl'accès à votre instance KMS. -
Créez une classe de stockage personnalisée et spécifiez les détails de votre 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 -
Créez la classe de stockage.
oc apply -f encrypted-class.yaml -
Sauvegardez le fichier YAML suivant dans un fichier appelé
my-pvc.yaml.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: my-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: custom-sc-encrypted -
Créez le PVC (circuit virtuel permanent).
oc apply -f my-pvc.yaml -
Sauvegardez la configuration de déploiement suivante dans le fichier
deployment.yamlet référencez la réservation de volume persistant que vous avez créée à l'étape précédente.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- Dans la section container.volume.mounts, entrez le chemin d'accès absolu du répertoire où est monté le volume dans le conteneur. Les données écrites dans le chemin de montage sont stockées sous le répertoire
rootdans votre instance File Storage for VPC physique. Si vous souhaitez partager un volume entre différentes applications, vous pouvez spécifier des sous-chemins d'accès au volume pour chacune de vos applications. volumeMounts.name- Dans la section container.volume.mounts, entrez le nom du volume à monter sur votre pod.
volume.name- Dans la section volumes, entrez le nom du volume à monter sur votre pod. Généralement, ce nom est identique à
volumeMounts.name.
-
Créez le déploiement.
oc apply -f deployment.yaml
Configuration du chiffrement en transit (EIT)
Pour configurer le chiffrement en transit pour File Storage for VPC, consultez la section « Chiffrement en transit pour IBM Cloud File Storage for VPC ». Ce sujet traite à la
fois des partages de fichiers zonaux (profil « dp2 ») et des partages de fichiers régionaux (profil « rfs », version bêta).
Mise à jour des demandes et des limites de ressources des conteneurs
Vous pouvez personnaliser les demandes et les limites de ressources CPU et mémoire pour les conteneurs exécutés dans le module complémentaire « File Storage for VPC ». Le réglage de ces valeurs peut vous aider à optimiser les performances dans le cas de grands clusters ou d'environnements aux ressources limitées.
Les paramètres suivent le schéma de nommage suivant : <ContainerName>CPULimit, <ContainerName>CPURequest, <ContainerName>MemoryLimit et <ContainerName>MemoryRequest.
Appliquez-les aux conteneurs du contrôleur et du serveur de nœuds.
-
Modifiez la carte de configuration «
addon-vpc-file-csi-driver-configmap» et ajoutez les paramètres de ressource correspondant aux conteneurs que vous souhaitez configurer. L'exemple suivant définit les valeurs relatives au processeur et à la mémoire pour les conteneurs du contrôleur et du serveur de nœuds.oc edit cm addon-vpc-file-csi-driver-configmap -n kube-systemExemples de valeurs :
controllerCPULimit: "200m" controllerCPURequest: "100m" controllerMemoryLimit: "256Mi" controllerMemoryRequest: "128Mi" nodeServerCPULimit: "200m" nodeServerCPURequest: "100m" nodeServerMemoryLimit: "256Mi" nodeServerMemoryRequest: "128Mi" -
Vérifiez que les modifications apportées à la ressource ont bien été appliquées en consultant la configuration « configmap » de l'
file-csi-driver-status. Recherchez un événement «Successfully set container resources» dans la rubrique «events».oc describe cm file-csi-driver-status -n kube-systemExemple de sortie :
events: ---- - description: Successfully set container resources event: Change container resources timestamp: "2026-06-26 08:32:05"
Limitation de l'accès au partage de fichiers par pool de noeuds worker, zone ou noeud worker
Le comportement par défaut du module complémentaire de cluster File Storage for VPC est que les pods de n'importe quel noeud peuvent accéder aux partages de fichiers. Vous pouvez également appliquer un contrôle plus granulaire sur la manière dont les pods accèdent à vos partages de fichiers. Par exemple, vous pouvez limiter l'accès au partage de fichiers à des pods uniquement sur un noeud spécifique, dans une zone spécifique, sur un pool de noeuds worker spécifique. Passez en revue les scénarios suivants pour savoir comment configurer l'accès de pod à vos partages de fichiers.
Lorsqu'un PVC est créé, il crée une cible de partage de fichiers par PVC et une IP VNI est réservée sur ce sous-réseau dans la zone. Cela signifie que le nombre maximal de réservations de volume persistant pour le stockage de fichiers VPC dépend des adresses IP disponibles sur ce sous-réseau.
Si vous utilisez les fonctions VNI suivantes pour limiter l'accès de pod à vos partages de fichiers, votre application risque de ne pas être hautement disponible.
Avant de commencer
Pour limiter l'accès au partage de fichiers par noeud, zone ou groupe de ressources, vous devez d'abord créer un groupe de sécurité VPC personnalisé.
-
Répertoriez vos clusters et notez l'ID de cluster dans lequel vous souhaitez déployer le stockage de fichiers.
ibmcloud ks cluster ls -
Obtenez les détails de votre bassin d'emploi.
ibmcloud ks worker-pool ls --cluster CLUSTER -
Obtenez les détails de votre sous-réseau.
ibmcloud ks worker-pool get WORKER_POOL --cluster CLUSTER | grep -A 3 Subnets -
Obtenez les CIDR de vos sous-réseaux. Répétez cette étape pour chaque sous-réseau. Vous utiliserez cette plage CIDR ultérieurement.
ibmcloud is subnet SUBNET_ID | grep "IPv4 CIDR" -
Répertoriez vos groupes de sécurité et notez le groupe de sécurité ID
kube-<clusterID>de votre cluster. Vous aurez besoin de l'ID de groupe de sécurité ultérieurement lors de l'ajout de règles de groupe de sécurité.ibmcloud is sgExemple de sortie
ID Name Rules Targets VPC Resource group r006-4aaec88f-4986-4b7c-a737-401f7fef1555 kube-clusterID 15 0 my-vpc default -
Créez un groupe de sécurité personnalisé dans le même VPC que votre cluster. Vous pouvez utiliser ce groupe de sécurité pour contrôler l'accès à vos partages de fichiers en ajoutant des règles de groupe de sécurité.
ibmcloud is security-group-create my-custom-security-group VPC-ID -
Créez votre propre classe de stockage et entrez l'ID du groupe de sécurité personnalisé que vous avez créé précédemment. Toutes les réservations de volume persistant créées à partir de cette classe de stockage se trouvent dans votre groupe de sécurité personnalisé.
-
Créez un PVC utilisant votre propre classe de stockage.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-custom-vni spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: "" # For example: my-custom-storage-class -
Une fois le volume persistant lié à la PVC, obtenez les détails du volume persistant et notez la valeur
nfsServerPathpour trouver l'adresse IP VNI.kubectl get pv pvc-XXXX -o yaml | grep nfsServerPathExemple de sortie
nfsServerPath: XXX.XX.XX.XXX:/XX # VNI IP address
Limitation de l'accès au partage de fichiers aux pods sur un noeud worker
-
Assurez-vous d'avoir rempli les conditions préalables.
-
Ajoutez la règle suivante au groupe de sécurité personnalisé que vous avez créé précédemment.
ibmcloud is sg-rulec CUSTOM-SG inbound tcp --port-min 111 --port-max 2049 --remote 10.240.0.20 # Worker node IP -
Ajoutez la règle suivante au groupe de sécurité
kube-clusterID.ibmcloud is sg-rulec kube-<cluster-id> outbound tcp --port-min 111 --port-max 2049 --remote 10.240.0.10 # VNI IP -
Créez un déploiement qui utilise votre PVC. Seuls les pods déployés sur le noeud worker qui correspond à la règle que vous avez créée peuvent monter ou utiliser la réservation de volume persistant. Les pods déployés sur d'autres noeuds sont bloqués à l'état
creatingde conteneur.
Limitation de l'accès au partage de fichiers aux pods sur les noeuds worker dans une zone unique
-
Assurez-vous d'avoir rempli les conditions préalables.
-
Ajoutez la règle suivante au groupe de sécurité personnalisé que vous avez créé précédemment.
ibmcloud is sg-rulec CUSTOM-SG inbound tcp --port-min 111 --port-max 2049 --remote 10.240.0.0/24 # zone subnet cidr range -
Ajoutez la règle suivante au groupe de sécurité
kube-clusterID. Indiquez l'adresse IP de l'interface de réseau virtuel (VNI).ibmcloud is sg-rulec kube-<cluster-ID> outbound tcp --port-min 111 --port-max 2049 --remote 10.240.0.10 # VNI IP -
Créez un déploiement qui utilise votre PVC. Seuls les pods déployés dans la zone répertoriée dans la règle précédente peuvent monter la réservation de volume persistant. Les pods déployés dans d'autres zones ne peuvent pas accéder à la réservation de volume persistant et sont bloqués à l'état
creatingConteneur.
Limitation de l'accès au partage de fichiers aux pods sur les noeuds worker dans un pool de noeuds worker unique
-
Assurez-vous d'avoir rempli les conditions préalables.
-
Créez des règles entrantes pour chaque plage de sous-réseaux du pool de nœuds de calcul.
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 -
Ajoutez la règle suivante au groupe de sécurité
kube-clusterID. Indiquez l'adresse IP de l'interface de réseau virtuel (VNI) comme source ou distante.ibmcloud is sg-rulec kube-<cluster-ID> outbound tcp --port-min 111 --port-max 2049 --remote 10.240.0.10 # VNI IP -
Déployez une application qui utilise le PVC que vous avez créé précédemment. Seuls les pods des pools de noeuds worker indiqués dans la règle précédente peuvent monter la réservation de volume persistant. Ou bien, si vous déployez votre application dans un daemonset, les pods ne seront déployés que sur les noeuds worker pour lesquels vous avez créé des règles de groupe de sécurité. Les pods des pools de noeuds worker qui ne se trouvent pas dans le pool de noeuds worker spécifié échouent avec une erreur
MountVolume.SetUp failed for volume "pvc-184b8c92-33ea-4874-b2ac-17665e53c060" : rpc error: code = DeadlineExceeded desc = context deadline exceeded.
Limitation de l'accès au partage de fichiers aux pods sur les noeuds worker dans plusieurs pools de noeuds worker
-
Assurez-vous d'avoir rempli les conditions préalables.
-
Ajoutez les règles suivantes à votre groupe de sécurité personnalisé. Indiquez les pools de noeuds worker et les plages CIDR de sous-réseau comme source ou distante.
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 -
Ajoutez la règle suivante au groupe de sécurité
kube-<clusterID>. Indiquez l'adresse IP de l'interface de réseau virtuel (VNI) comme source ou distante.ibmcloud is sg-rulec kube-<clusterID> outbound tcp --port-min 111 --port-max 2049 --remote 10.240.1.7 # VNI-IP -
Créez un déploiement qui utilise votre PVC. Seuls les pods déployés dans la zone indiquée dans la règle peuvent monter la réservation de volume persistant. Les pods déployés sur les noeuds worker restreints sont bloqués à l'état
creatingde conteneur.