Acessar instâncias gerenciadas do Lustre no GKE usando o driver CSI gerenciado do Lustre


Este guia descreve como se conectar a uma instância do Managed Lustre usando o driver CSI do Managed Lustre. Isso permite acessar as instâncias do Managed Lustre atuais como volumes para suas cargas de trabalho com estado de maneira controlada e previsível.

Antes de começar

Antes de começar, veja se você realizou as seguintes tarefas:

  • Ative a API Google Cloud Managed Lustre e a API Google Kubernetes Engine.
  • Ativar APIs
  • Se você quiser usar a Google Cloud CLI para essa tarefa, instale e, em seguida, inicialize a CLI gcloud. Se você instalou a gcloud CLI anteriormente, instale a versão mais recente executando gcloud components update.

Configure as variáveis de ambiente

Configure as seguintes variáveis de ambiente:

export CLUSTER_NAME=CLUSTER_NAME
export PROJECT_ID=PROJECT_ID
export NETWORK_NAME=LUSTRE_NETWORK
export LOCATION=ZONE

Substitua:

  • CLUSTER_NAME: o nome do cluster.
  • PROJECT_ID: o ID do projeto do Trusted Cloud by S3NS .
  • LUSTRE_NETWORK: a rede de nuvem privada virtual compartilhada em que residem o cluster do GKE e a instância gerenciada do Lustre.
  • ZONE: a zona geográfica do cluster do GKE. Por exemplo, us-central1-a.

Configurar o driver CSI do Lustre gerenciado

Esta seção aborda como ativar e desativar o driver CSI do Lustre gerenciado, se necessário.

Ativar o driver CSI do Lustre gerenciado em um novo cluster do GKE

Para ativar o driver CSI do Lustre gerenciado ao criar um cluster do GKE, siga estas etapas:

Piloto automático

gcloud container clusters create-auto "${CLUSTER_NAME}" \
    --location=${LOCATION} \
    --network="${NETWORK_NAME}" \
    --cluster-version=1.33.2-gke.1111000 \
    --enable-lustre-csi-driver \
    --enable-legacy-lustre-port

Padrão

gcloud container clusters create "${CLUSTER_NAME}" \
    --location=${LOCATION} \
    --network="${NETWORK_NAME}" \
    --cluster-version=1.33.2-gke.1111000 \
    --addons=LustreCsiDriver \
    --enable-legacy-lustre-port

Ativar o driver CSI gerenciado do Lustre em um cluster do GKE atual

Se você quiser ativar o driver CSI do Lustre gerenciado em um cluster do GKE, use o seguinte comando:

gcloud container clusters update ${CLUSTER_NAME} \
    --location=${LOCATION} \
    --enable-legacy-lustre-port

Depois que o driver CSI gerenciado do Lustre for ativado no cluster, talvez você perceba que os nós foram recriados e que os nós de CPU parecem estar usando uma imagem de GPU na saída do console ou da CLITrusted Cloud . Exemplo:

config:
  imageType: COS_CONTAINERD
  nodeImageConfig:
    image: gke-1330-gke1552000-cos-121-18867-90-4-c-nvda

Esse comportamento é esperado. A imagem da GPU está sendo reutilizada em nós da CPU para instalar com segurança os módulos do kernel do Lustre gerenciado. Você não vai receber cobranças excessivas pelo uso da GPU.

Desativar o driver CSI do Lustre gerenciado

É possível desativar o driver CSI do Lustre gerenciado em um cluster do GKE usando a Google Cloud CLI.

gcloud container clusters update ${CLUSTER_NAME} \
    --location=${LOCATION} \
    --update-addons=LustreCsiDriver=DISABLED

Depois que o driver CSI for desativado, os nós serão recriados automaticamente, e os módulos do kernel do Lustre gerenciado serão desinstalados dos nós do GKE.

Acessar uma instância do Managed Lustre usando o driver CSI do Managed Lustre

Se você já provisionou uma instância do Managed Lustre na mesma rede que o cluster do GKE, siga estas instruções para provisionar estaticamente um PersistentVolume que se refere à sua instância.

As seções a seguir descrevem o processo típico de acesso a uma instância gerenciada do Lustre usando o driver CSI do Lustre gerenciado:

  1. Crie um PersistentVolume que se refira à instância do Managed Lustre.
  2. Usar um PersistentVolumeClaim para acessar o volume.
  3. Criar uma carga de trabalho que consuma o volume.

Criar um PersistentVolume

  1. Para localizar sua instância do Managed Lustre, execute o seguinte comando.

    gcloud lustre instances list \
        --project=${PROJECT_ID} \
        --location=${LOCATION}
    

    A saída será parecida com esta: Antes de prosseguir para a próxima etapa, anote os campos Managed Lustre instance name, filesystem e mountPoint.

    capacityGib: '18000'
    createTime: '2025-04-28T22:42:11.140825450Z'
    filesystem: testlfs
    gkeSupportEnabled: true
    mountPoint: 10.90.1.4@tcp:/testlfs
    name: projects/my-project/locations/us-central1-a/instances/my-lustre
    network: projects/my-project/global/networks/default
    perUnitStorageThroughput: '1000'
    state: ACTIVE
    updateTime: '2025-04-28T22:51:41.559098631Z'
    
  2. Salve o manifesto em um arquivo chamado lustre-pv.yaml.

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: lustre-pv
    spec:
      storageClassName: "STORAGE_CLASS_NAME"
      capacity:
        storage: 18000Gi
      accessModes:
        - ReadWriteMany
      persistentVolumeReclaimPolicy: Retain
      volumeMode: Filesystem
      claimRef:
        namespace: default
        name: lustre-pvc
      csi:
        driver: lustre.csi.storage.gke.io
        volumeHandle: "PROJECT_ID/LOCATION/INSTANCE_NAME"
      volumeAttributes:
        ip: IP_ADDRESS
        filesystem: FILESYSTEM
    

    Substitua:

    • storageClassName: o nome do StorageClass. O valor pode ser uma string vazia, mas precisa atender à especificação do PersistentVolumeClaim.
    • volumeHandle: o identificador do volume.
      • PROJECT_ID: o ID do projeto do Trusted Cloud by S3NS .
      • LOCATION: o local zonal da sua instância do Lustre. É necessário especificar uma zona compatível para o driver CSI do Managed Lustre.
      • INSTANCE_NAME: o nome da sua instância do Lustre.
    • ip: o endereço IP da sua instância do Lustre. Você obtém isso do campo mountPoint na saída do comando anterior.
    • filesystem: o nome do sistema de arquivos da sua instância do Managed Lustre.

    Para conferir a lista completa de campos aceitos no objeto PersistentVolume, consulte a documentação de referência do driver CSI do Lustre gerenciado.

  3. Execute este comando para criar o PersistentVolume:

    kubectl apply -f lustre-pv.yaml
    

Usar o PersistentVolumeClaim para acessar o volume

É possível criar um recurso PersistentVolumeClaim que faz referência ao StorageClass do driver CSI do Lustre gerenciado.

O arquivo de manifesto a seguir mostra um exemplo de como criar um PersistentVolumeClaim no ReadWriteMany modo de acesso , que faz referência ao StorageClass criado anteriormente.

  1. Salve o manifesto em um arquivo chamado lustre-pvc.yaml.

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

    Substitua STORAGE_SIZE pelo tamanho de armazenamento. Por exemplo, 18000Gi. Ele precisa corresponder à especificação no seu PersistentVolume.

  2. Execute este comando para criar o PersistentVolumeClaim:

      kubectl create -f lustre-pvc.yaml
    

Criar uma carga de trabalho que consuma o volume

Esta seção mostra como criar um pod que consome o recurso PersistentVolumeClaim criado anteriormente.

Vários pods podem compartilhar o mesmo recurso PersistentVolumeClaim.

  1. Salve o manifesto em um arquivo chamado my-pod.yaml.

      apiVersion: v1
      kind: Pod
      metadata:
        name: my-pod
      spec:
        containers:
        - name: nginx
          image: nginx
          volumeMounts:
            - name: lustre-volume
              mountPath: /data
        volumes:
        - name: lustre-volume
          persistentVolumeClaim:
            claimName: lustre-pvc
    
  2. Execute o comando a seguir para aplicar o manifesto ao cluster:

      kubectl apply -f my-pod.yaml
    

    O pod aguarda até que o GKE provisione o PersistentVolumeClaim antes de começar a ser executado. Essa operação pode levar vários minutos para ser concluída.

  3. Verifique se ele está em execução:

      kubectl get pods
    

    Pode levar alguns minutos para o pod atingir o estado Running.

    O resultado será assim:

      NAME           READY   STATUS    RESTARTS   AGE
      my-pod         1/1     Running   0          11s
    

Usar fsGroup com volumes do Managed Lustre

É possível mudar a propriedade do grupo do diretório raiz do sistema de arquivos montado para corresponder a um fsGroup solicitado pelo usuário e especificado no SecurityContext do pod.

Solução de problemas

Para orientações sobre solução de problemas, consulte a página de solução de problemas na documentação do Lustre gerenciado.

Limpar

Para evitar cobranças na sua conta do Trusted Cloud by S3NS , exclua os recursos de armazenamento criados neste guia.

  1. Exclua o pod e o PersistentVolumeClaim.

    kubectl delete pod my-pod
    kubectl delete pvc lustre-pvc
    
  2. Verifique o status do PersistentVolume. Depois de excluir o pod e o PersistentVolumeClaim, o PersistentVolume vai informar um estado "Released":

    kubectl get pv
    

    O resultado será assim:

    NAME        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS     CLAIM                 STORAGECLASS   REASON   AGE
    lustre-pv   18000Gi      RWX            Retain        Released   default/preprov-pvc                           2m28s
    
  3. Reutilize o PersistentVolume. Para reutilizar o PersistentVolume, remova a referência de reivindicação (claimRef):

    kubectl patch pv lustre-pv --type json -p '[{"op": "remove", "path": "/spec/claimRef"}]'
    

    O PersistentVolume agora vai informar um status "Available", indicando que ele está pronto para ser vinculado a um novo PersistentVolumeClaim. Verifique o status do PersistentVolume:

    kubectl get pv
    

    O resultado será assim:

    NAME        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
    lustre-pv   18000Gi      RWX           Retain         Available                                   19m
    
  4. Exclua o PersistentVolume se ele não for mais necessário. Se o PersistentVolume não for mais necessário, exclua-o:

    kubectl delete pv lustre-pv
    

    A exclusão do PersistentVolume não remove a instância do Managed Lustre.

A seguir