Provisionando PVCs no Armazenamento de Arquivos com o Lustre Service

Descubra como provisionar reivindicações de volume persistentes para clusters que você criou usando o Kubernetes Engine (OKE) montando sistemas de arquivos do File Storage com o serviço Lustre.

O serviço Oracle Cloud Infrastructure File Storage with Lustre é um serviço de armazenamento totalmente gerenciado projetado para atender às demandas de treinamento e inferência de IA/ML e necessidades de computação de alto desempenho. Você usa o plug-in Lustre CSI para conectar clusters a sistemas de arquivos no File Storage com o serviço Lustre.

Você pode usar o File Storage com o serviço Lustre para provisionar reivindicações de volume persistente (PVCs), criando manualmente um sistema de arquivos no File Storage com o serviço Lustre, definindo e criando um volume persistente (PV) suportado pelo novo sistema de arquivos e, finalmente, definindo uma nova PVC. Quando você cria a PVC, o Kubernetes Engine vincula a PVC ao PV suportado pelo Armazenamento de Arquivos com o serviço Lustre.

O driver Lustre CSI é o software geral que permite que os sistemas de arquivos Lustre sejam usados com o Kubernetes por meio da Container Storage Interface (CSI). O plug-in Lustre CSI é um componente específico dentro do driver, responsável por interagir com o servidor de API do Kubernetes e gerenciar o ciclo de vida dos volumes Lustre.

Observe o seguinte:

  • O driver Lustre CSI é suportado em clusters criados pelo Kubernetes Engine que estão executando o Kubernetes versão 1.29 ou posterior.
  • O driver Lustre CSI é suportado no Oracle Linux 8 x86 e no Ubuntu x86 22.04.
  • Para usar um sistema de arquivos Lustre com um cluster criado pelo Kubernetes Engine, o pacote do cliente Lustre deve ser instalado nos nós de trabalho que precisam montar o sistema de arquivos. Para obter mais informações sobre clientes Lustre, consulte Montando e Acessando um Lustre File System.

Provisionando uma PVC para um Sistema de Arquivos Existente

Para criar uma PVC em um sistema de arquivos existente no serviço File Storage com Lustre (usando chaves de criptografia gerenciadas pela Oracle para criptografar dados em repouso):

  1. Crie um sistema de arquivos no serviço File Storage com Lustre, selecionando a opção de criptografia Criptografar usando chaves gerenciadas pela Oracle. Consulte Creating a Lustre File System.
  2. Crie regras de segurança em um grupo de segurança de rede (recomendado) ou em uma lista de segurança para o sistema de arquivos Lustre e para a sub-rede de nós de trabalho do cluster.
    As regras de segurança a serem criadas dependem dos locais de rede relativos do sistema de arquivos Lustre e dos nós de trabalho que atuam como cliente, de acordo com os seguintes cenários:

    Esses cenários, as regras de segurança a serem criadas e onde criá-las, são totalmente descritos na documentação do serviço File Storage com Lustre (consulte Regras de Segurança Obrigatórias da VCN).

  3. Crie um PV suportado pelo sistema de arquivos no File Storage com o serviço Lustre da seguinte forma:
    1. Crie um arquivo de manifesto para definir um PV e, na seção csi:, defina:

      • driver a lustre.csi.oraclecloud.com
      • volumeHandle a <MGSAddress>@<LNetName>:/<MountName>

        em que:

        • <MGSAddress> é o endereço do serviço de Gerenciamento do sistema de arquivos no serviço File Storage com Lustre
        • <LNetName> é o nome da rede LNet do sistema de arquivos no serviço File Storage com Lustre.
        • <MountName> é o nome da montagem usado ao criar o sistema de arquivos no serviço File Storage com Lustre.

        Por exemplo: 10.0.2.6@tcp:/testlustrefs

      • fsType a lustre
      • (opcional, mas recomendado) volumeAttributes.setupLnet a "true" se quiser que o driver Lustre CSI execute a configuração de lnet (Lustre Network) antes de montar o sistema de arquivos.
      • (opcional) volumeAttributes.lustreSubnetCidr para o bloco CIDR da sub-rede em que a VNIC secundária do nó de trabalho está localizada, para garantir que o nó de trabalho tenha conectividade de rede com o sistema de arquivos Lustre. Por exemplo, 10.0.2.0/24.

        Observação

        Não especifique volumeAttributes.lustreSubnetCidr se estiver usando a interface padrão do nó de trabalho (a VNIC principal) para estabelecer conexão com o sistema de arquivos Lustre.
      • (opcional) volumeAttributes.lustrePostMountParameters para definir parâmetros Lustre. Por exemplo:
        ...
            volumeAttributes:
              lustrePostMountParameters: '[{"*.*.*MDT*.lru_size": 11200},{"at_history" :
            600}]'

      Por exemplo, o seguinte arquivo de manifesto (denominado lustre-PV-example.yaml) define um PV chamado lustre-pv-example apoiado por um sistema de arquivos Lustre:

      apiVersion: v1
      kind: PersistentVolume
      metadata:
        name: lustre-pv-example
      spec:
        capacity:
          storage: 31Ti
        volumeMode: Filesystem
        accessModes:
          - ReadWriteMany
        persistentVolumeReclaimPolicy: Retain
        csi:
          driver: lustre.csi.oraclecloud.com
          volumeHandle: "10.0.2.6@tcp:/testlustrefs"
          fsType: lustre
          volumeAttributes:
            setupLnet: "true"
    2. Crie o PV do arquivo de manifesto digitando:
      kubectl apply -f <filename>

      Por exemplo:

      kubectl apply -f lustre-pv-example.yaml
    3. Verifique se o PV foi criado com sucesso digitando:

      kubectl get pv <pv-name>

      Por exemplo:

      kubectl get pv lustre-pv-example

      Saída do exemplo:

      NAME                   CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS   CLAIM                           STORAGECLASS   REASON   AGE
      lustre-pv-example      m31Ti      RWX            Retain           Bound                                                            56m
      
  4. Crie uma PVC que seja provisionada pelo PV que você criou, da seguinte forma:
    1. Crie um arquivo de manifesto para definir a PVC e definir:
      • storageClassName a "" Observe que você deve especificar um valor vazio para storageClassName, mesmo que a classe de armazenamento não seja aplicável no caso de provisionamento estático do armazenamento persistente. Se você não especificar um valor vazio para storageClassName, a classe de armazenamento padrão (oci-bv) será usada, o que causará um erro.
      • volumeName para o nome do PV que você criou (por exemplo, lustre-pv-example)

      Por exemplo, o seguinte arquivo de manifesto (denominado lustre-PVC-example.yaml) define uma PVC chamada lustre-pvc-example que se vinculará a um PV chamado lustre-pv-example:

      apiVersion: v1
      kind: PersistentVolumeClaim
      metadata:
        name: lustre-pvc-example
      spec:
        accessModes:
          - ReadWriteMany
        storageClassName: ""
        volumeName: lustre-pv-example
        resources:
          requests:
            storage:  31Ti

      Observe que o elemento requests: storage: deve estar presente no arquivo de manifesto da PVC, e seu valor deve corresponder ao valor especificado para o elemento capacity: storage: no arquivo de manifesto do PV. Além disso, o valor do elemento requests: storage: é ignorado.

    2. Crie a PVC a partir do arquivo de manifesto digitando:
      kubectl apply -f <filename>
      Por exemplo:
      kubectl apply -f lustre-pvc-example.yaml
    3. Verifique se a PVC foi criada e vinculada ao PV com sucesso digitando:

      kubectl get pvc <pvc-name>

      Por exemplo:

      kubectl get pvc lustre-pvc-example

      Saída do exemplo:

      NAME                    STATUS   VOLUME                 CAPACITY   ACCESS MODES   STORAGECLASS   AGE
      lustre-pvc-example      Bound    lustre-pv-example       31Ti      RWX                           57m

    A PVC é vinculada ao PV suportado pelo Armazenamento de Arquivos com o sistema de arquivos do serviço Lustre. Os dados são criptografados em repouso, usando chaves de criptografia gerenciadas pela Oracle.

  5. Use a nova PVC ao criar outros objetos, como implantações. Por exemplo:
    1. Crie um manifesto chamado luxre-app-example-deployment.yaml para definir uma implantação chamada lustre-app-example-deployment que use a PVC lustre-pvc-example, da seguinte forma:
      apiVersion: apps/v1
      kind: Deployment
      metadata:
        name: lustre-app-example-deployment
      spec:
        selector:
          matchLabels:
            app: lustre-app-example
        replicas: 2
        template:
          metadata:
            labels:
              app: lustre-app-example
          spec:
            containers:
            - args:
              - -c
              - while true; do echo $(date -u) >> /lustre/data/out.txt; sleep 60; done
              command:
              - /bin/sh
              image: busybox:latest
              imagePullPolicy: Always
              name: lustre-app-example
              volumeMounts:
              - mountPath: /lustre/data
                name: lustre-volume
            restartPolicy: Always
            volumes:
            - name: lustre-volume
              persistentVolumeClaim:
                claimName: lustre-pvc-example
    2. Crie a implantação a partir do arquivo de manifesto digitando:
      kubectl apply -f lustre-app-example-deployment.yaml
    3. Verifique se os pods de implantação foram criados com sucesso e estão em execução digitando:
      kubectl get pods

      Saída do exemplo:

      NAME                                             READY   STATUS              RESTARTS   AGE
      lustre-app-example-deployment-7767fdff86-nd75n   1/1     Running             0          8h
      lustre-app-example-deployment-7767fdff86-wmxlh   1/1     Running             0          8h

Provisionando uma PVC em um Sistema de Arquivos Existente com Opções de Montagem

Você pode otimizar o desempenho e controlar o acesso a um sistema de arquivos Lustre existente especificando opções de montagem para o PV. A especificação de opções de montagem permite ajustar como os pods interagem com o sistema de arquivos.

Para incluir opções de montagem:

  1. Comece seguindo as instruções em Provisioning a PVC on an Existing File System.
  2. No manifesto PV descrito em Provisionando uma PVC em um Sistema de Arquivos Existente, adicione o campo spec.mountOptions, que permite especificar como o PV deve ser montado por pods.

    Por exemplo, no arquivo de manifesto lustre-pv-example.yaml mostrado em Provisionando uma PVC em um sistema de arquivos existente, você pode incluir o campo mountOptions da seguinte forma:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: lustre-pv-example
    spec:
      capacity:
        storage: 31Ti
      volumeMode: Filesystem
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      mountOptions:
        - ro 
      csi:
        driver: lustre.csi.oraclecloud.com
        volumeHandle: "10.0.2.6@tcp:/testlustrefs"
        fsType: lustre
        volumeAttributes:
          setupLnet: "true"

    Neste exemplo, o campo mountOptions é definido como ro, indicando que os pods devem ter acesso somente leitura ao sistema de arquivos. Para obter mais informações sobre opções de montagem PV, consulte Volumes Persistentes na documentação do Kubernetes.

Criptografando Dados em Repouso em um Sistema de Arquivos Existente

O serviço File Storage com Lustre sempre criptografa dados em repouso, usando chaves de criptografia gerenciadas pela Oracle por padrão. No entanto, você tem a opção de especificar a criptografia em repouso usando suas próprias chaves de criptografia principais que você gerencia no serviço Vault.

Para obter mais informações sobre como criar o File Storage com sistemas de arquivos Lustre que usam chaves de criptografia gerenciadas pela Oracle ou suas próprias chaves de criptografia principais que você mesmo gerencia, consulte Atualizando a Criptografia do Sistema de Arquivos.