Provisionner des disques persistants régionaux et des volumes Hyperdisk équilibrés à haute disponibilité


Cette page explique comment activer le provisionnement dynamique des volumes Hyperdisk équilibrés à haute disponibilité et des disques persistants régionaux, et comment les provisionner manuellement dans Google Kubernetes Engine (GKE). Pour connaître la compatibilité avec les types de machines, consultez Limites pour les disques régionaux et Séries de machines compatibles avec Hyperdisk. En règle générale, vous devez utiliser des volumes Hyperdisk équilibrés à haute disponibilité pour les séries de machines de troisième génération ou ultérieures, et des disques persistants régionaux pour les séries de machines de deuxième génération ou antérieures. Pour en savoir plus sur la génération des séries de machines, consultez la terminologie Compute Engine.

Pour créer des solutions de bout en bout pour les applications hautement disponibles dotées de disques persistants régionaux, consultez Augmenter la disponibilité des applications avec état avec l'opérateur HA avec état. Cette fonctionnalité n'est pas compatible avec les volumes Hyperdisk équilibré à haute disponibilité.

Haute disponibilité sur Hyperdisk équilibré

Cet exemple montre comment les volumes Hyperdisk équilibrés à haute disponibilité peuvent être provisionnés de manière dynamique, au besoin, ou manuellement par l'administrateur du cluster.

Provisionnement dynamique

  1. Enregistrez le fichier manifeste suivant dans un fichier nommé balanced-ha-storage.yaml.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: balanced-ha-storage
    provisioner: pd.csi.storage.gke.io
    volumeBindingMode: WaitForFirstConsumer
    allowVolumeExpansion: true
    parameters:
      type: hyperdisk-balanced-high-availability
      provisioned-throughput-on-create: "250Mi"
      provisioned-iops-on-create: "7000"
    allowedTopologies:
    - matchLabelExpressions:
      - key: topology.gke.io/zone
        values:
        - ZONE1
        - ZONE2
    

    Remplacez les éléments suivants :

    • ZONE1 et ZONE2 : zones de la région dans lesquelles le volume provisionné de manière dynamique sera répliqué.
  2. Créez la StorageClass :

    kubectl create -f hdb-ha-example-class.yaml
    
  3. Enregistrez le fichier manifeste de PersistentVolumeClaim suivant dans un fichier nommé pvc-example.yaml :

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ACCESS_MODE
      storageClassName: balanced-ha-storage
      resources:
        requests:
          storage: 20Gi
    

    Remplacez les éléments suivants :

    • ACCESS_MODE : Hyperdisk équilibré à haute disponibilité est compatible avec ReadWriteOnce, ReadWriteMany et ReadWriteOncePod. Pour connaître les différences et les cas d'utilisation de chaque mode d'accès, consultez Modes d'accès aux volumes persistants.
  4. Appliquez la PersistentVolumeClaim qui fait référence à la StorageClass que vous avez créée précédemment :

    kubectl apply -f pvc-example.yaml
    

Provisionnement manuel

  1. Suivez la documentation Compute Engine pour créer manuellement un volume Hyperdisk équilibré à haute disponibilité.

  2. Enregistrez le fichier manifeste PersistentVolume suivant dans un fichier nommé pv-example.yaml. Le fichier manifeste fait référence au volume Hyperdisk équilibré à haute disponibilité que vous venez de créer :

    apiVersion: v1
    kind: PersistentVolume
    metadata:
      name: pv-demo
    spec:
      capacity:
        storage: 500Gi
      accessModes:
        - ACCESS_MODE
      claimRef:
        namespace: default
        name: podpvc
      csi:
        driver: pd.csi.storage.gke.io
        volumeHandle: projects/PROJECT_ID/regions/REGION/disks/gce-disk-1
      nodeAffinity:
        required:
          nodeSelectorTerms:
            - matchExpressions:
              - key: topology.gke.io/zone
                operator: In
                values:
                - ZONE1
                - ZONE2
    

    Remplacez les éléments suivants :

    • PROJECT_ID : ID du projet du volume que vous avez créé.
    • REGION : région du disque que vous avez créé. Pour connaître la disponibilité régionale la plus récente, consultez la documentation Compute Engine.
    • ZONE1, ZONE2 : zones de la région dans lesquelles le volume que vous avez créé est répliqué.
    • ACCESS_MODE : Hyperdisk équilibré à haute disponibilité est compatible avec ReadWriteOnce, ReadWriteMany et ReadWriteOncePod. Pour connaître les différences et les cas d'utilisation de chaque mode d'accès, consultez Modes d'accès aux volumes persistants.
  3. Créez le PersistentVolume qui fait référence au volume Hyperdisk Balanced à haute disponibilité que vous avez créé précédemment :

    kubectl apply -f pv-example.yaml
    
  4. Enregistrez le fichier manifeste de PersistentVolumeClaim suivant dans un fichier nommé pvc-example.yaml :

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc
    spec:
      accessModes:
      - ACCESS_MODE
      storageClassName: balanced-ha-storage
      resources:
        requests:
          storage: 20Gi
    

    Remplacez les éléments suivants :

    • ACCESS_MODE : Hyperdisk équilibré à haute disponibilité est compatible avec ReadWriteOnce, ReadWriteMany et ReadWriteOncePod. Il doit s'agir du même mode d'accès que celui spécifié dans PersistentVolume à l'étape précédente. Pour connaître les différences et les cas d'utilisation de chaque mode d'accès, consultez Modes d'accès aux volumes persistants.
  5. Appliquez la PersistentVolumeClaim qui fait référence au PersistentVolume que vous avez créé précédemment :

    kubectl apply -f pvc-example.yaml
    

Disques persistants régionaux

Comme pour les disques persistants zonaux, les disques persistants régionaux peuvent être provisionnés de manière dynamique, au besoin, ou manuellement par l'administrateur du cluster. Le provisionnement dynamique est toutefois recommandé. Pour utiliser des disques persistants régionaux de type pd-standard, définissez l'attribut spec.resources.requests.storage de PersistentVolumeClaim sur au moins 200 Gio. Si votre cas d'utilisation nécessite un volume plus faible, envisagez d'utiliser pd-balanced ou pd-ssd à la place.

Provisionnement dynamique

Pour activer le provisionnement dynamique des disques persistants régionaux, créez une StorageClass avec le paramètre replication-type et spécifiez des contraintes de zone dans allowedTopologies.

Par exemple, le fichier manifeste suivant décrit une StorageClass nommée regionalpd-storageclass qui utilise des disques persistants standards et qui réplique les données sur les zones europe-west1-b et europe-west1-c :

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: regionalpd-storageclass
provisioner: pd.csi.storage.gke.io
parameters:
  type: pd-balanced
  replication-type: regional-pd
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:
  - key: topology.gke.io/zone
    values:
    - europe-west1-b
    - europe-west1-c

Si vous utilisez un cluster régional, vous pouvez laisser allowedTopologies non spécifié. Le cas échéant, lorsque vous créez un pod qui utilise un PersistentVolumeClaim qui utilise cette StorageClass, un disque persistant régional est provisionné avec deux zones. Une zone est identique à celle dans laquelle le pod est programmé. L'autre zone est choisie de manière aléatoire parmi les zones disponibles pour le cluster.

Lorsque vous utilisez un cluster zonal, allowedTopologies doit être défini.

Une fois l'objet StorageClass créé, créez un objet PersistentVolumeClaim en utilisant le champ storageClassName pour faire référence à StorageClass. Par exemple, le fichier manifeste suivant crée un objet PersistentVolumeClaim nommé regional-pvc et fait référence à regionalpd-storageclass :

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: regional-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 500Gi
  storageClassName: regionalpd-storageclass

Comme la StorageClass est configurée avec volumeBindingMode: WaitForFirstConsumer, le PersistentVolume n'est provisionné qu'une fois qu'un pod utilisant l'objet PersistentVolumeClaim a été créé.

Le fichier manifeste suivant est un exemple de pod utilisant l'objet PersistentVolumeClaim précédemment créé :

kind: Pod
apiVersion: v1
metadata:
  name: task-pv-pod
spec:
  volumes:
    - name: task-pv-storage
      persistentVolumeClaim:
        claimName: regional-pvc
  containers:
    - name: task-pv-container
      image: nginx
      ports:
        - containerPort: 80
          name: "http-server"
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: task-pv-storage

Provisionnement manuel

Commencez par créer un disque persistant régional à l'aide de la commande gcloud compute disks create. L'exemple suivant crée un disque nommé gce-disk-1, répliqué sur les zones europe-west1-b et europe-west1-c :

gcloud compute disks create gce-disk-1 \
   --size 500Gi \
   --region europe-west1 \
   --replica-zones europe-west1-b,europe-west1-c

Vous pouvez ensuite créer un objet PersistentVolume qui fait référence au disque persistant régional que vous venez de créer. Outre les objets de Utiliser des disques persistants préexistants en tant que ressources PersistentVolume, le PersistentVolume pour un disque persistant régional doit également spécifier unnode-affinity. Si vous utilisez un StorageClass, il doit spécifier le pilote CSI de disque persistant.

Voici un exemple de fichier manifeste StorageClass qui utilise des disques persistants standards et qui réplique les données sur les zones europe-west1-b et europe-west1-c:

kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: regionalpd-storageclass
provisioner: pd.csi.storage.gke.io
parameters:
  type: pd-balanced
  replication-type: regional-pd
volumeBindingMode: WaitForFirstConsumer
allowedTopologies:
- matchLabelExpressions:
  - key: topology.gke.io/zone
    values:
    - europe-west1-b
    - europe-west1-c

Voici un exemple de fichier manifeste qui crée un objet PersistentVolume nommé pv-demo et fait référence à regionalpd-storageclass:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: pv-demo
spec:
  storageClassName: "regionalpd-storageclass"
  capacity:
     storage: 500Gi
  accessModes:
     - ReadWriteOnce
  claimRef:
    namespace: default
    name: pv-claim-demo
  csi:
    driver: pd.csi.storage.gke.io
    volumeHandle: projects/PROJECT_ID/regions/europe-west1/disks/gce-disk-1
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
          - key: topology.gke.io/zone
            operator: In
            values:
               - europe-west1-b
               - europe-west1-c

Notez les points suivants pour l'exemple PersistentVolume:

  • Le champ volumeHandle contient des informations sur l'appel gcloud compute disks create, y compris votre PROJECT_ID.
  • Le champ claimRef.namespace doit être spécifié même s'il est défini sur default.

Nommer les disques persistants

Kubernetes n'arrive pas à différencier les disques persistants zonaux et régionaux qui portent le même nom. Pour contourner ce problème, assurez-vous que les disques persistants sont dotés de noms uniques. Ce problème n'apparaît pas lorsque vous utilisez des disques persistants provisionnés dynamiquement.

Étape suivante