Aceda a instâncias do Lustre geridas existentes no GKE através do controlador CSI do Lustre gerido

Este guia descreve como pode estabelecer ligação a uma instância do Lustre gerida existente através do controlador CSI do Lustre gerido. Isto permite-lhe aceder a instâncias do Lustre geridas existentes como volumes para as suas cargas de trabalho com estado, de forma controlada e previsível.

Antes de começar

Antes de começar, certifique-se de que realizou as seguintes tarefas:

  • Ative a API Google Cloud Managed Lustre e a API Google Kubernetes Engine.
  • Ativar APIs
  • Se quiser usar a CLI gcloud para esta tarefa, instale-a e, em seguida, inicialize-a. Se instalou anteriormente a CLI gcloud, execute gcloud components update para obter a versão mais recente.
  • Para ver as limitações e os requisitos, consulte a [vista geral do controlador CSI].
  • Certifique-se de que ativa o controlador CSI Lustre gerido. Está desativado por predefinição nos clusters Standard e Autopilot.

Configure 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 o seguinte:

  • CLUSTER_NAME: o nome do cluster.
  • PROJECT_ID: o seu Google Cloud ID do projeto.
  • LUSTRE_NETWORK: a rede de nuvem privada virtual partilhada onde residem o cluster do GKE e a instância do Managed Lustre.
  • ZONE: a zona geográfica do seu cluster do GKE; por exemplo, us-central1-a.

Configure o controlador CSI Lustre gerido

Esta secção aborda como pode ativar e desativar o controlador CSI Lustre gerido, se necessário.

Ative o controlador CSI Lustre gerido num novo cluster do GKE

Para ativar o controlador CSI Lustre gerido quando criar um novo cluster do GKE, siga estes passos:

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

Standard

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

Ative o controlador CSI Lustre gerido num cluster do GKE existente

Se quiser ativar o controlador CSI Lustre gerido num cluster do GKE existente, use o seguinte comando:

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

Depois de o controlador CSI Lustre gerido ser ativado no cluster, pode reparar que os nós foram recriados e que os nós da CPU parecem estar a usar uma imagem de GPU no resultado da consola ou da CLI.Google Cloud Por exemplo:

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

Este comportamento é o esperado. A imagem da GPU está a ser reutilizada em nós da CPU para instalar em segurança os módulos do kernel do Lustre gerido. Não lhe é cobrado um valor excessivo pela utilização da GPU.

Desative o controlador CSI Lustre gerido

Pode desativar o controlador CSI Lustre gerido num cluster do GKE existente através da CLI Google Cloud.

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

Assim que o controlador CSI for desativado, os nós são recriados automaticamente e os módulos do kernel do Lustre gerido são desinstalados dos nós do GKE.

Aceda a uma instância do Lustre gerido existente através do controlador CSI do Lustre gerido

Se já aprovisionou uma instância do Lustre gerida na mesma rede que o cluster do GKE, pode seguir estas instruções para aprovisionar estaticamente um PersistentVolume que se refere à sua instância.

As secções seguintes descrevem o processo típico de acesso a uma instância do Lustre gerida existente através do controlador CSI do Lustre gerido:

  1. Crie um PersistentVolume que faça referência à instância do Lustre gerido.
  2. Use um PersistentVolumeClaim para aceder ao volume.
  3. Crie uma carga de trabalho que consuma o volume.

Crie um PersistentVolume

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

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

    O resultado deve ser semelhante ao seguinte. Antes de avançar para o passo seguinte, certifique-se de que anota os campos nome da instância do Lustre gerida, sistema de ficheiros e mountPoint.

    capacityGib: '9000'
    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. Guarde o seguinte manifesto num ficheiro com o nome lustre-pv.yaml:

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: lustre-pv
    spec:
      storageClassName: "STORAGE_CLASS_NAME"
      capacity:
        storage: 9000Gi
      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 o seguinte:

    • storageClassName: o nome da sua StorageClass. O valor pode ser uma string vazia, mas tem de cumprir a especificação do seu PersistentVolumeClaim.
    • volumeHandle: o identificador deste volume.
      • PROJECT_ID: o Google Cloud ID do projeto.
      • LOCATION: a localização zonal da sua instância do Lustre. Tem de especificar uma zona suportada para o controlador CSI Lustre gerido.
      • INSTANCE_NAME: o nome da sua instância do Lustre.
    • ip: o endereço IP da sua instância do Lustre. Obtém este valor do campo mountPoint no resultado do comando anterior.
    • filesystem: o nome do sistema de ficheiros da sua instância do Managed Lustre.

    Para ver a lista completa de campos suportados no objeto PersistentVolume, consulte a documentação de referência do controlador CSI do Lustre gerido.

  3. Execute este comando para criar o PersistentVolume:

    kubectl apply -f lustre-pv.yaml
    

Use o PersistentVolumeClaim para aceder ao volume

Pode criar um recurso PersistentVolumeClaim que faça referência à StorageClass do controlador CSI Lustre gerido.

O ficheiro de manifesto seguinte mostra um exemplo de como criar um PersistentVolumeClaim no ReadWriteMany modo de acesso , que faz referência à StorageClass que criou anteriormente.

  1. Guarde o seguinte manifesto num ficheiro com o nome 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 do armazenamento; por exemplo, 9000Gi. Tem de corresponder à especificação no seu PersistentVolume.

  2. Execute este comando para criar o PersistentVolumeClaim:

    kubectl create -f lustre-pvc.yaml
    

Crie uma carga de trabalho que consuma o volume

Esta secção mostra como criar um Pod que consuma o recurso PersistentVolumeClaim que criou anteriormente.

Vários pods podem partilhar o mesmo recurso PersistentVolumeClaim.

  1. Guarde o seguinte manifesto num ficheiro com o nome 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 seguinte comando para aplicar o manifesto ao cluster:

    kubectl apply -f my-pod.yaml
    

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

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

    kubectl get pods
    

    O Pod pode demorar alguns minutos a atingir o estado Running.

    O resultado é semelhante ao seguinte:

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

Use fsGroup com volumes Lustre geridos

Pode alterar a propriedade do grupo do diretório de nível raiz do sistema de ficheiros montado para corresponder a um fsGroup pedido pelo utilizador especificado no SecurityContext do pod.

Resolução de problemas

Para ver orientações de resolução de problemas, consulte a página de resolução de problemas na documentação do Lustre gerido.

Limpar

Para evitar incorrer em cobranças na sua conta do Google Cloud , elimine os recursos de armazenamento que criou neste guia.

  1. Elimine o pod e o PersistentVolumeClaim.

    kubectl delete pod my-pod
    kubectl delete pvc lustre-pvc
    
  2. Verifique o estado do PersistentVolume. Depois de eliminar o Pod e o PersistentVolumeClaim, o PersistentVolume deve comunicar um estado "Released":

    kubectl get pv
    

    O resultado é semelhante ao seguinte:

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

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

    O PersistentVolume deve agora comunicar um estado "Disponível", o que indica que está pronto para ser associado a um novo PersistentVolumeClaim. Verifique o estado do PersistentVolume:

    kubectl get pv
    

    O resultado é semelhante ao seguinte:

    NAME        CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM   STORAGECLASS   REASON   AGE
    lustre-pv   9000Gi      RWX           Retain         Available                                   19m
    
  4. Elimine o PersistentVolume se já não for necessário. Se o PersistentVolume já não for necessário, elimine-o:

    kubectl delete pv lustre-pv
    

    A eliminação do PersistentVolume não remove a instância do Lustre gerida subjacente.

O que se segue?