Accéder aux instances Managed Lustre sur GKE avec le pilote CSI Managed Lustre

Ce guide explique comment créer un volume Kubernetes reposant sur le pilote CSI Managed Lustre dans GKE avec le provisionnement dynamique. Le pilote CSI Managed Lustre vous permet de créer du stockage à la demande avec des instances Managed Lustre et d'y accéder en tant que volumes pour vos charges de travail avec état.

Avant de commencer

Avant de commencer, effectuez les tâches suivantes :

  • Activez l'API Google Cloud Managed Lustre et l'API Google Kubernetes Engine.
  • Activer les API
  • Si vous souhaitez utiliser Google Cloud CLI pour cette tâche, installez puis initialisez gcloud CLI. Si vous avez déjà installé la gcloud CLI, obtenez la dernière version en exécutant la commande gcloud components update. Il est possible que les versions antérieures de gcloud CLI ne permettent pas d'exécuter les commandes de ce document.

Configurer des variables d'environnement

Configurez les variables d'environnement suivantes :

export CLUSTER_NAME=CLUSTER_NAME
export PROJECT_ID=PROJECT_ID
export NETWORK_NAME=LUSTRE_NETWORK
export IP_RANGE_NAME=LUSTRE_IP_RANGE
export FIREWALL_RULE_NAME=LUSTRE_FIREWALL_RULE
export LOCATION=ZONE
export CLUSTER_VERSION=CLUSTER_VERSION

Remplacez les éléments suivants :

  • CLUSTER_NAME : nom du cluster.
  • PROJECT_ID : ID de votre projet Google Cloud .
  • LUSTRE_NETWORK : réseau de cloud privé virtuel (VPC) partagé dans lequel résident le cluster GKE et l'instance Lustre gérée.
  • LUSTRE_IP_RANGE : nom de la plage d'adresses IP créée pour le peering de réseau VPC avec Managed Lustre.
  • LUSTRE_FIREWALL_RULE : nom de la règle de pare-feu permettant le trafic TCP à partir de la plage d'adresses IP.
  • ZONE : zone géographique de votre cluster GKE (par exemple, us-central1-a).
  • CLUSTER_VERSION : version du cluster GKE.

Configurer un réseau VPC

Vous devez spécifier le même réseau VPC lorsque vous créez l'instance Managed Lustre et vos clusters GKE, ou les connecter via Network Connectivity Center si vous utilisez un réseau VPC appairé.

  1. Pour activer la mise en réseau des services, exécutez la commande suivante :

    gcloud services enable servicenetworking.googleapis.com \
        --project=${PROJECT_ID}
    
  2. Créez un réseau VPC. Définir l'indicateur --mtu sur 8896 permet d'améliorer les performances de 10 %.

    gcloud compute networks create ${NETWORK_NAME} \
        --subnet-mode=auto --project=${PROJECT_ID} \
        --mtu=8896
    
  3. Créez une plage d'adresses IP.

    gcloud compute addresses create ${IP_RANGE_NAME} \
        --global \
        --purpose=VPC_PEERING \
        --prefix-length=20 \
        --description="Managed Lustre VPC Peering" \
        --network=${NETWORK_NAME} \
        --project=${PROJECT_ID}
    
  4. Obtenez la plage CIDR associée à la plage que vous avez créée à l'étape précédente.

    CIDR_RANGE=$(
      gcloud compute addresses describe ${IP_RANGE_NAME} \
          --global  \
          --format="value[separator=/](address, prefixLength)" \
          --project=${PROJECT_ID}
    )
    
  5. Créez une règle de pare-feu pour autoriser le trafic TCP provenant de la plage d'adresses IP que vous avez créée.

    gcloud compute firewall-rules create ${FIREWALL_RULE_NAME} \
        --allow=tcp:988,tcp:6988 \
        --network=${NETWORK_NAME} \
        --source-ranges=${CIDR_RANGE} \
        --project=${PROJECT_ID}
    
  6. Pour configurer l'appairage de réseau pour votre projet, vérifiez que vous disposez des autorisations IAM nécessaires, en particulier du rôle compute.networkAdmin ou servicenetworking.networksAdmin.

    1. Accédez à la console Google Cloud  > IAM et administration, puis recherchez le principal propriétaire de votre projet.
    2. Cliquez sur l'icône en forme de crayon, puis sur + AJOUTER UN AUTRE RÔLE.
    3. Sélectionnez Administrateur de réseaux Compute ou Administrateur de Service Networking.
    4. Cliquez sur Enregistrer.
  7. Connectez le peering.

    gcloud services vpc-peerings connect \
        --network=${NETWORK_NAME} \
        --project=${PROJECT_ID} \
        --ranges=${IP_RANGE_NAME} \
        --service=servicenetworking.googleapis.com
    

Configurer le pilote CSI Lustre géré

Cette section explique comment activer et désactiver le pilote CSI Managed Lustre, si nécessaire.

Ports de communication Lustre

Le pilote CSI Lustre géré GKE utilise différents ports pour communiquer avec les instances Lustre gérées, en fonction de la version de votre cluster GKE et des configurations Lustre gérées existantes.

  • Port par défaut (recommandé) : pour les nouveaux clusters GKE exécutant la version 1.33.2-gke.4780000 ou ultérieure, le pilote utilise le port 988 pour la communication Lustre par défaut.

  • Ancien port : utilisez le port 6988 en ajoutant l'indicateur --enable-legacy-lustre-port à vos commandes gcloud dans les scénarios suivants :

    • Versions antérieures de GKE : si votre cluster GKE exécute une version antérieure à 1.33.2-gke.4780000, l'indicateur --enable-legacy-lustre-port permet de contourner un conflit de port avec gke-metadata-server sur les nœuds GKE.
    • Instances Lustre existantes : si vous vous connectez à une instance Managed Lustre existante qui a été créée avec l'indicateur gke-support-enabled, vous devez toujours inclure --enable-legacy-lustre-port dans vos commandes gcloud, quelle que soit la version de votre cluster. Sans cet indicateur, votre cluster GKE ne pourra pas monter l'instance Lustre existante. Pour en savoir plus sur l'option gke-support-enabled, consultez la description des options facultatives dans Créer une instance.

Vous pouvez configurer les clusters nouveaux et existants pour qu'ils utilisent le port par défaut 988 ou l'ancien port 6988.

Activer le pilote CSI Lustre géré sur un nouveau cluster GKE

Les sections suivantes décrivent comment activer le pilote CSI Lustre géré sur un nouveau cluster GKE.

Utiliser le port par défaut 988

Pour activer le pilote CSI Lustre géré lorsque vous créez un cluster GKE exécutant la version 1.33.2-gke.4780000 ou ultérieure, exécutez la commande suivante :

Autopilot

gcloud container clusters create-auto "${CLUSTER_NAME}" \
    --location=${LOCATION} \
    --network="${NETWORK_NAME}" \
    --cluster-version=${CLUSTER_VERSION} \
    --enable-lustre-csi-driver

Standard

gcloud container clusters create "${CLUSTER_NAME}" \
    --location=${LOCATION} \
    --network="${NETWORK_NAME}" \
    --cluster-version=${CLUSTER_VERSION} \
    --addons=LustreCsiDriver

Utiliser l'ancien port 6988

Pour activer le pilote CSI Lustre géré lorsque vous créez un cluster GKE exécutant une version antérieure à 1.33.2-gke.4780000, exécutez la commande suivante :

Autopilot

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

Standard

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

Activer le pilote CSI Lustre géré sur des clusters GKE existants

Les sections suivantes décrivent comment activer le pilote CSI Lustre géré sur des clusters GKE existants.

Utiliser le port par défaut 988

Pour activer le pilote CSI Managed Lustre sur un cluster GKE existant exécutant la version 1.33.2-gke.4780000 ou ultérieure, exécutez la commande suivante :

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

Utiliser l'ancien port 6988

Pour activer le pilote CSI Lustre géré sur un cluster GKE existant, vous devrez peut-être utiliser l'ancien port 6988 en ajoutant l'indicateur --enable-legacy-lustre-port. Cette option est obligatoire dans les cas suivants :

  • Si votre cluster GKE exécute une version antérieure à 1.33.2-gke.4780000.
  • Si vous souhaitez connecter ce cluster à une instance Managed Lustre existante qui a été créée avec l'indicateur gke-support-enabled.

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

Mise à niveau des nœuds requise sur les clusters existants

L'activation du pilote CSI Managed Lustre sur des clusters existants peut déclencher la recréation de nœuds afin de mettre à jour les modules de noyau nécessaires pour le client Managed Lustre. Pour une disponibilité immédiate, nous vous recommandons de mettre à niveau manuellement vos pools de nœuds.

Les clusters GKE d'un version disponible sont mis à niveau selon leur déploiement planifié, ce qui peut prendre plusieurs semaines en fonction de votre période de maintenance. Si vous utilisez une version statique de GKE, vous devez mettre à niveau manuellement vos pools de nœuds.

Après la mise à niveau du pool de nœuds, il est possible que les nœuds de processeur semblent utiliser une image GPU dans la sortie de la consoleGoogle Cloud ou de la CLI. Exemple :

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

Ce comportement est normal. L'image GPU est réutilisée sur les nœuds de processeur pour installer de manière sécurisée les modules du noyau Lustre géré. L'utilisation du GPU ne vous sera pas facturée.

Désactiver le pilote CSI Lustre géré

Vous pouvez désactiver le pilote CSI Managed Lustre sur un cluster GKE existant à l'aide de Google Cloud CLI.

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

Une fois le pilote CSI désactivé, GKE recrée automatiquement vos nœuds et désinstalle les modules de noyau Lustre gérés.

Créer un volume à l'aide du pilote CSI Lustre géré

Les sections suivantes décrivent la procédure de création standard d'un volume Kubernetes reposant sur une instance Managed Lustre dans GKE :

  1. Créez une StorageClass.
  2. Utiliser un objet PersistentVolumeClaim pour accéder au volume
  3. Créer une charge de travail qui utilise le volume.

Créer un objet StorageClass

Lorsque le pilote CSI Managed Lustre est activé, GKE crée automatiquement un objet StorageClass pour le provisionnement d'instances Managed Lustre. La StorageClass dépend du niveau de performances Managed Lustre et est l'une des suivantes :

  • lustre-rwx-125mbps-per-tib
  • lustre-rwx-250mbps-per-tib
  • lustre-rwx-500mbps-per-tib
  • lustre-rwx-1000mbps-per-tib

GKE fournit une StorageClass par défaut pour chaque niveau de performances Managed Lustre compatible. Cela simplifie le provisionnement dynamique des instances Managed Lustre, car vous pouvez utiliser les StorageClasses intégrées sans avoir à définir les vôtres.

Pour les clusters zonaux, le pilote CSI provisionne des instances Managed Lustre dans la même zone que le cluster. Pour les clusters régionaux, il provisionne l'instance dans l'une des zones de la région.

L'exemple suivant montre comment créer une StorageClass personnalisée avec des exigences de topologie spécifiques :

  1. Enregistrez le fichier manifeste suivant dans un fichier nommé lustre-class.yaml :

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: lustre-class
    provisioner: lustre.csi.storage.gke.io
    volumeBindingMode: Immediate
    reclaimPolicy: Delete
    parameters:
      perUnitStorageThroughput: "1000"
      network: LUSTRE_NETWORK
    allowedTopologies:
    - matchLabelExpressions:
      - key: topology.gke.io/zone
        values:
        - us-central1-a
    

    Pour obtenir la liste complète des champs compatibles avec StorageClass, consultez la documentation de référence sur le pilote CSI Lustre géré.

  2. Créez l'objet StorageClass en exécutant la commande suivante :

    kubectl apply -f lustre-class.yaml
    

Utiliser un objet PersistentVolumeClaim pour accéder au volume

Cette section explique comment créer une ressource PersistentVolumeClaim qui fait référence à la StorageClass du pilote CSI Managed Lustre.

  1. Enregistrez le fichier manifeste suivant dans un fichier nommé lustre-pvc.yaml :

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: lustre-pvc
    spec:
      accessModes:
      - ReadWriteMany
      resources:
        requests:
          storage: 9000Gi
      storageClassName: lustre-class
    

    Pour obtenir la liste complète des champs compatibles avec PersistentVolumeClaim, consultez la documentation de référence sur le pilote CSI Lustre géré.

  2. Créez la PersistentVolumeClaim en exécutant la commande suivante :

    kubectl apply -f lustre-pvc.yaml
    

Créer une charge de travail pour utiliser le volume

Cette section présente un exemple de création d'un pod qui utilise la ressource PersistentVolumeClaim que vous avez créée précédemment.

Plusieurs pods peuvent partager la même ressource PersistentVolumeClaim.

  1. Enregistrez le fichier manifeste suivant dans un fichier nommé 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. Appliquez le fichier manifeste au cluster.

    kubectl apply -f my-pod.yaml
    
  3. Vérifier que le pod est en cours d'exécution. Le pod s'exécute une fois que le PersistentVolumeClaim est provisionné. Cette opération peut durer quelques minutes.

    kubectl get pods
    

    Le résultat ressemble à ce qui suit :

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

Utiliser fsGroup avec des volumes Managed Lustre

Vous pouvez modifier la propriété de groupe du répertoire racine du système de fichiers installé pour qu'il corresponde à un fsGroup demandé par l'utilisateur et spécifié dans le SecurityContext du pod. fsGroup ne modifiera pas de manière récursive la propriété de l'ensemble du système de fichiers Managed Lustre installé. Seul le répertoire racine du point de montage est concerné.

Dépannage

Pour obtenir des conseils de dépannage, consultez la page Dépannage dans la documentation Managed Lustre.

Effectuer un nettoyage

Pour éviter que des frais ne soient facturés sur votre compte Google Cloud , supprimez les ressources de stockage que vous avez créées dans ce guide.

  1. Supprimez le pod et l'objet PersistentVolumeClaim.

    kubectl delete pod my-pod
    kubectl delete pvc lustre-pvc
    
  2. Vérifiez l'état de PersistentVolume.

    kubectl get pv
    

    Le résultat ressemble à ce qui suit :

    No resources found
    

    La suppression complète de l'instance Managed Lustre sous-jacente peut prendre quelques minutes.

Étapes suivantes