Création d'un stockage de système de fichiers persistant à l'aide du plugiciel de volume CSI

Sur Compute Cloud@Customer, vous pouvez provisionner une revendication de volume persistant sur un nouveau système de fichiers à l'aide du plugiciel de volume CSI. Utilisez la commande kubectl pour créer la classe de stockage et la revendication de volume persistant. Le plugiciel de volume CSI provisionne la revendication de volume persistant sur un nouveau système de fichiers.

Vous ne pouvez avoir qu'une seule cible de montage et un seul système de fichiers par VCN. Vous pouvez avoir plusieurs classes de stockage, des volumes persistants et des revendications de volumes persistants par grappe. Toutes les classes de stockage, les volumes persistants et les revendications de volumes persistants d'une grappe partagent un système NFS.

  1. Créez une classe de stockage qui utilise le provisionneur fss.csi.oraclecloud.com.

    $ kubectl create -f sc.yaml

    Le contenu du fichier manifeste sc.yaml est le suivant :

    kind: StorageClass
    apiVersion: storage.k8s.io/v1
    metadata:
      name: fss-dyn-storage
    provisioner: fss.csi.oraclecloud.com
    parameters:
      availabilityDomain: AD-1
      compartmentOcid: ocid1.compartment.unique_ID
      mountTargetSubnetOcid: ocid1.subnet.unique_ID
      exportPath: AUTOSELECT
      exportOptions: "[{\"source\":\"0.0.0.0/0\",\"requirePrivilegedSourcePort\":false,\"access\":\"READ_WRITE\",\"identitySquash\":\"NONE\"}]"
      encryptInTransit: "false"
    • Le nom de la nouvelle classe de stockage est fss-dyn-storage.

    • mountTargetSubnetOcid ou mountTargetOcid est requis. La valeur de mountTargetSubnetOcid est l'OCID du sous-réseau dans lequel le plugiciel CSI doit créer une cible de montage. La valeur de mountTargetOcid est l'OCID d'une cible de montage existante. Si vous spécifiez mountTargetSubnetOcid et mountTargetOcid, mountTargetOcid est utilisé et mountTargetSubnetOcid est ignoré.

      Pour vous assurer que la cible de montage peut être atteinte à partir des noeuds de travail, spécifiez le sous-réseau qui a une configuration telle que le sous-réseau de "travailleur" décrit sous Création de ressources de réseau OKE ou créez la cible de montage sur le sous-réseau qui a une configuration telle que le sous-réseau de travail. Assurez-vous que le port TCP 2049 vers le serveur NFS est ouvert sur ce sous-réseau.

    • compartmentOcid est facultatif. Cette valeur est l'OCID du compartiment dans lequel le nouveau système de fichiers (et la nouvelle cible de montage, si mountTargetSubnetOcid est spécifié) seront créés. La valeur par défaut est le même compartiment que la grappe.

    • Vous devez spécifier AUTOSELECT comme valeur pour exportPath.

    • La valeur exportOptions est l'entrée des options d'exportation NFS dans l'exportation du système de fichiers qui définit l'accès accordé aux clients NFS lorsqu'ils se connectent à une cible de montage. source peut être une adresse IP unique ou un intervalle de blocs CIDR. Cette valeur est un jeu de paramètres au format JSON.

    • La valeur de encryptInTransit indique si les données en transit doivent être chiffrées.

  2. Créez une revendication de volume persistant à provisionner par le nouveau système de fichiers dans le service File Storage.

    $ kubectl create -f fss-dyn-claim.yaml

    Le contenu du fichier manifeste fss-dyn-claim.yaml est le suivant :

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: fss-dynamic-claim
    spec:
      accessModes:
      - ReadWriteMany
      storageClassName: "fss-dyn-storage"
      resources:
        requests:
          storage: 50Gi
  3. Vérifiez que la PVC a été liée au nouveau volume persistant.

    $ kubectl get pvc
    NAME              STATUS VOLUME                                       CAPACITY ACCESS MODES STORAGECLASS    AGE
    fss-dynamic-claim Bound  csi-fss-f6823a66-8b6f-4c42-9d1f-d25723e69257 50Gi     RWX          fss-dyn-storage 6m47s
  4. Utilisez la nouvelle revendication de volume persistant lorsque vous créez des objets tels que des pods.

    Voici un exemple de création d'objet :

    $ kubectl create nginx.yaml

    Voici le contenu du fichier nginx.yaml. Voir claimName sur la dernière ligne :

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx-deployment
    spec:
      replicas: 3
      selector:
        matchLabels:
          app: nginx
      template:
        metadata:
          labels:
            app: nginx
        spec:
          containers:
          - name: nginx
            image: nginx_image_url
            ports:
            - name: http
              containerPort: 80
            volumeMounts:
            - name: persistent-storage
              mountPath: /usr/share/nginx/html
          volumes:
          - name: persistent-storage
            persistentVolumeClaim:
              claimName: fss-dynamic-claim

    Vérifiez que l'objet est créé et déployé :

    $ kubectl get deploy
    NAME             READY UP-TO-DATE AVAILABLE AGE
    nginx-deployment 3/3   3          0         104s