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 resourceGroup ainsi que l'ID du groupe de sécurité kube-<clusterID> dans la section securityGroupIDs avant 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.

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é.

  1. Récupérez l'identifiant de votre cluster.
    ibmcloud oc cluster ls
    
  2. Obtenez l'ID du groupe de sécurité kube-<clusterID>.
    ibmcloud is sg kube-CLUSTER_ID  | grep ID
    
  3. 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.

  1. Accédez à votre cluster Red Hat OpenShift.

  2. 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
    
  3. Sauvegardez le fichier YAML suivant dans un fichier. Cet exemple crée une réclamation nommée my-pvc en utilisant la classe de stockage ibmc-vpc-file-min-iops avec une taille de gigaoctet 10Gi.

    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.
    
  4. Créez le PVC (circuit virtuel permanent).

    oc apply -f my-pvc.yaml
    
  5. Vérifiez que votre PVC est créée et liée au volume persistant (PV).

    oc describe pvc my-pvc
    

    Exemple 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
    
  6. Sauvegardez la configuration de déploiement suivante dans le fichier deployment.yaml et 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 root dans 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.
  7. Créez le déploiement.

    oc apply -f deployment.yaml
    
  8. Vérifiez que le montage du volume persistant (PV) a abouti.

    oc describe deployment my-deployment
    

    Le 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
    
  9. 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.
  1. Recherchez le PVC que vous souhaitez migrer et notez le nom du PVC et le nom du PV associé.

    oc get pvc
    
  2. Réduisez votre application qui utilise le PVC.

    oc scale deployment DEPLOYMENT --replicas 0
    
  3. Modifiez l'objet PV que votre application utilise pour modifier la stratégie de récupération en Retain et classe de stockage à ibmc-vpc-file-min-iops.

    kubectl edit pv PV
    
    spec:
      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
    
  4. Supprimez l'objet PVC existant.

    kubectl delete pvc PVC
    
  5. Modifiez à nouveau le PV et supprimez le claimRef section.

    kubectl edit pv PV
    
    spec:
      accessModes:
      - ReadWriteMany
      capacity:
        storage: 20Gi
      #claimRef:
        #apiVersion: v1
        #kind: PersistentVolumeClaim
        #name: <pvc-name>
        #namespace: default
        #resourceVersion: "381270"
        #uid: 4042f319-1233-4187-8549-8249a840a8dd
    
  6. 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
    
  7. Faites évoluer votre application qui utilisait le PVC.

    k scale deployment DEPLOYMENT --replicas x
    
  8. 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

Développement d'un volume monté

  1. 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.storage dans votre PVC. Pour étendre le volume, modifiez la PVC et augmentez la valeur indiquée dans la zone spec.resources.requests.storage.

    kubectl edit pvc my-pvc
    
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 50Gi
    
  2. Enregistrez et fermez le PVC. Attendez quelques minutes que le volume soit étendu.

  3. Vérifiez que votre volume est étendu.

    kubectl get pvc
    

    Exemple 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.

  1. Obtenez l'ID de votre cluster.

    ibmcloud ks cluster ls
    
  2. Obtenez l'ID de votre kube-<clusterID> groupe de sécurité.

    ibmcloud is sg kube-CLUSTER_ID  | grep ID
    
  3. 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
    
  4. 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
    
  5. Avant de créer un volume persistant, extrayez les détails relatifs à votre partage de fichiers.

    ibmcloud is shares
    
  6. Découvrez les détails de votre part. Notez les cibles de montage.

    ibmcloud is share SHARE-ID
    

    Exemple de commande.

    ibmcloud is share r134-bad98878-1f63-45d2-a3fd-60447094c2e6
    

    Exemple 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      
    
  7. Obtenez le nfsServerPath, également appelé Mount Path.

    ibmcloud is share-mount-target SHARE-ID SHARE-TARGET-ID
    

    Exemple de commande.

    ibmcloud is share-mount-target  r134-bad98878-1f63-45d2-a3fd-60447094c2e6 r134-aa2aabb8-f616-47be-886b-99220852b728
    

    Exemple 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
    
  8. Créez un fichier de configuration de volume persistant appelé static-file-share.yaml qui 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
    
  9. Créez le volume persistant.

    oc apply -f static-file-share.yaml
    
  10. 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.
    
  11. Créez la réservation de volume persistant pour lier votre volume persistant.

    oc apply -f pvc-static.yaml
    
  12. Créez un nom de fichier de déploiement testpod.yaml pour 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 earlier
    
    spec.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 root dans 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.
  13. 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 dp2 IOPS 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.

  1. 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: true
    

    Exemple de deuxième génération :

    Si vous provisionnez un PVC 10Gi en utilisant la classe de stockage ibmc-vpc-file-min-iops de 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-regional de 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-iops de première génération ne peut pas fonctionner. En utilisant la classe de stockage de deuxième génération ibmc-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"
    
  2. Créez la classe de stockage personnalisée dans votre cluster.

    oc apply -f custom-storageclass.yaml
    
  3. Vérifiez que votre classe de stockage est disponible dans le cluster.

    oc get sc
    

    Exemple 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.
  1. Modifiez la carte de configuration addon-vpc-file-csi-driver-configmap et spécifiez le nom de la classe de stockage dans le paramètre SET_DEFAULT_STORAGE_CLASS.

    oc edit cm addon-vpc-file-csi-driver-configmap -n kube-system
    

    Exemple de sortie

    SET_DEFAULT_STORAGE_CLASS: "ibmc-vpc-file-eit"
    
  2. Vérifiez que la valeur par défaut est correctement définie en décrivant le file-csi-driver-status configmap.

    oc describe cm file-csi-driver-status -n kube-system
    

    Exemple 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 ».

  1. 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
    
  2. 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
    
  3. Créez le PVC (circuit virtuel permanent).

    oc apply -f my-pvc.yaml
    
  4. 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
    
  5. 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.

  1. Créez une instance du fournisseur KMS que vous souhaitez utiliser.

  2. Créez une clé racine dans votre instance KMS.

  3. 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 Reader l'accès à votre instance KMS.

  4. 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
    
  5. Créez la classe de stockage.

    oc apply -f encrypted-class.yaml
    
  6. 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
    
  7. Créez le PVC (circuit virtuel permanent).

    oc apply -f my-pvc.yaml
    
  8. Sauvegardez la configuration de déploiement suivante dans le fichier deployment.yaml et 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 root dans 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.
  9. 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.

  1. 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-system
    

    Exemples de valeurs :

    controllerCPULimit: "200m"
    controllerCPURequest: "100m"
    controllerMemoryLimit: "256Mi"
    controllerMemoryRequest: "128Mi"
    nodeServerCPULimit: "200m"
    nodeServerCPURequest: "100m"
    nodeServerMemoryLimit: "256Mi"
    nodeServerMemoryRequest: "128Mi"
    
  2. 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-system
    

    Exemple 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é.

  1. Répertoriez vos clusters et notez l'ID de cluster dans lequel vous souhaitez déployer le stockage de fichiers.

    ibmcloud ks cluster ls
    
  2. Obtenez les détails de votre bassin d'emploi.

    ibmcloud ks worker-pool ls --cluster CLUSTER
    
  3. Obtenez les détails de votre sous-réseau.

    ibmcloud ks worker-pool get WORKER_POOL --cluster CLUSTER | grep -A 3 Subnets
    
  4. 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"
    
  5. 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 sg
    

    Exemple de sortie

    ID                                          Name                                             Rules   Targets   VPC       Resource group
    r006-4aaec88f-4986-4b7c-a737-401f7fef1555   kube-clusterID                       15      0         my-vpc   default
    
  6. 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
    
  7. 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é.

  8. 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
    
  9. Une fois le volume persistant lié à la PVC, obtenez les détails du volume persistant et notez la valeur nfsServerPath pour trouver l'adresse IP VNI.

    kubectl get pv pvc-XXXX -o yaml | grep nfsServerPath
    

    Exemple 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

  1. Assurez-vous d'avoir rempli les conditions préalables.

  2. 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
    
  3. 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
    
  4. 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 creating de conteneur.

Limitation de l'accès au partage de fichiers aux pods sur les noeuds worker dans une zone unique

  1. Assurez-vous d'avoir rempli les conditions préalables.

  2. 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
    
  3. 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
    
  4. 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 creating Conteneur.

Limitation de l'accès au partage de fichiers aux pods sur les noeuds worker dans un pool de noeuds worker unique

  1. Assurez-vous d'avoir rempli les conditions préalables.

  2. 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
    
  3. 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
    
  4. 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

  1. Assurez-vous d'avoir rempli les conditions préalables.

  2. 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
    
  3. 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
    
  4. 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 creating de conteneur.