Criando Armazenamento Persistente do Sistema de Arquivos Usando o Plug-in de Volume CSI

No Compute Cloud@Customer, você pode provisionar uma PVC em um novo sistema de arquivos usando o plug-in de volume CSI. Use o comando kubectl para criar a classe de armazenamento e a reivindicação de volume persistente. O plug-in de volume CSI provisiona a PVC em um novo sistema de arquivos.

Você só pode ter um ponto de acesso NFS e um sistema de arquivos por VCN. Você pode ter várias classes de armazenamento, volumes persistentes e reivindicações de volume persistentes por cluster. Todas as classes de armazenamento, volumes persistentes e reivindicações de volume persistente em um cluster compartilham um NFS.

  1. Crie uma nova classe de armazenamento que use o provisionador fss.csi.oraclecloud.com.

    $ kubectl create -f sc.yaml

    A seguir está o conteúdo do arquivo de manifesto 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"
    • O nome da nova classe de armazenamento é fss-dyn-storage.

    • mountTargetSubnetOcid ou mountTargetOcid é obrigatório. O valor de mountTargetSubnetOcid é o OCID da sub-rede na qual você deseja que o plug-in CSI crie um ponto de acesso NFS. O valor de mountTargetOcid é o OCID de um ponto de acesso NFS existente. Se você especificar mountTargetSubnetOcid e mountTargetOcid, mountTargetOcid será usado e mountTargetSubnetOcid será ignorado.

      Para garantir que o ponto de acesso NFS possa ser acessado pelos nós de trabalho, especifique a sub-rede que tem configuração como a sub-rede "trabalhador" descrita em Criando Recursos de Rede do OKE ou crie o ponto de acesso NFS na sub-rede que tem configuração como a sub-rede de trabalho. Certifique-se de que a porta TCP 2049 para o servidor NFS esteja aberta nessa sub-rede.

    • O compartmentOcid é opcional. Esse valor é o OCID do compartimento no qual o novo sistema de arquivos (e o novo ponto de acesso NFS, se mountTargetSubnetOcid for especificado) serão criados. O valor padrão é o mesmo compartimento do cluster.

    • Especifique AUTOSELECT como o valor de exportPath.

    • O valor exportOptions é a entrada de opções de exportação NFS dentro da exportação do sistema de arquivos que define o acesso concedido aos clientes NFS quando se conectam a um destino de montagem. O source pode ser um único endereço IP ou faixa de blocos CIDR. Este valor é um conjunto de parâmetros no formato JSON.

    • O valor de encryptInTransit especifica se os dados serão criptografados em trânsito.

  2. Crie uma PVC a ser provisionada pelo novo sistema de arquivos no serviço File Storage.

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

    A seguir está o conteúdo do arquivo de manifesto 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 se a PVC foi vinculada ao novo volume 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. Use a nova PVC ao criar objetos, como pods.

    Veja a seguir um exemplo de criação de objeto:

    $ kubectl create nginx.yaml

    Veja a seguir o conteúdo do arquivo nginx.yaml. Consulte claimName na última linha:

    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 se o objeto foi criado e implantado:

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