Creación de Almacenamiento Persistente del Sistema de Archivos con el Plugin de Volumen CSI

En Compute Cloud@Customer, puede aprovisionar una PVC en un nuevo sistema de archivos mediante el plugin de volumen CSI. Utilice el comando kubectl para crear la clase de almacenamiento y la reclamación de volúmenes persistentes. El plugin de volumen CSI aprovisiona la PVC en un nuevo sistema de archivos.

Solo puede tener un destino de montaje y un sistema de archivos por VCN. Puede tener varias clases de almacenamiento, volúmenes persistentes y reclamaciones de volúmenes persistentes por cluster. Todas las clases de almacenamiento, los volúmenes persistentes y las reclamaciones de volúmenes persistentes en un cluster comparten un NFS.

  1. Cree una nueva clase de almacenamiento que utilice el aprovisionador fss.csi.oraclecloud.com.

    $ kubectl create -f sc.yaml

    A continuación, se muestra el contenido del archivo de manifiesto sc.yaml:

    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"
    • El nombre de la nueva clase de almacenamiento es fss-dyn-storage.

    • Se necesita mountTargetSubnetOcid o mountTargetOcid. El valor de mountTargetSubnetOcid es el OCID de la subred en la que desea que el plugin CSI cree un destino de montaje. El valor de mountTargetOcid es el OCID de un destino de montaje existente. Si especifica mountTargetSubnetOcid y mountTargetOcid, se utiliza mountTargetOcid y se ignora mountTargetSubnetOcid.

      Para garantizar que se pueda acceder al destino de montaje desde los nodos de trabajador, especifique la subred que tiene configuración como la subred "worker" que se describe en Creating OKE Network Resources o cree el destino de montaje en la subred que tiene configuración como la subred de trabajador. Asegúrese de que el puerto TCP 2049 para el servidor NFS esté abierto en esa subred.

    • compartmentOcid es opcional. Este valor es el OCID del compartimento en el que se creará el nuevo sistema de archivos (y el nuevo destino de montaje, si se especifica mountTargetSubnetOcid). El valor por defecto es el mismo compartimento que el cluster.

    • Debe especificar AUTOSELECT como valor para exportPath.

    • El valor exportOptions es la entrada de opciones de exportación NFS dentro de la exportación del sistema de archivos que define el acceso otorgado a los clientes NFS cuando se conectan a un destino de montaje. source puede ser una única dirección IP o un rango de bloques CIDR. Este valor es un juego de parámetros en formato JSON.

    • El valor de encryptInTransit especifica si se deben cifrar los datos en tránsito.

  2. Cree una PVC para que la aprovisione el nuevo sistema de archivos en el servicio File Storage.

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

    A continuación, se muestra el contenido del archivo de manifiesto fss-dyn-claim.yaml:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: fss-dynamic-claim
    spec:
      accessModes:
      - ReadWriteMany
      storageClassName: "fss-dyn-storage"
      resources:
        requests:
          storage: 50Gi
  3. Verifique que la PVC se haya enlazado al nuevo volumen persistente.

    $ 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. Utilice la nueva PVC al crear objetos como pods.

    A continuación se muestra un ejemplo de creación de objetos:

    $ kubectl create nginx.yaml

    A continuación se muestra el contenido del archivo nginx.yaml. Consulte claimName en la última línea:

    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

    Verifique que el objeto se ha creado y desplegado:

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