Une nouvelle version de GKE sur AWS a été publiée le 2 novembre. Consultez les notes de version pour plus d'informations.

Utiliser des ressources StorageClass avec vos charges de travail

GKE sur AWS déploie automatiquement le pilote CSI (Container Storage Interface) pour Amazon EBS afin de provisionner et gérer les volumes Amazon EBS dans vos clusters.

La version du pilote CSI pour EBS de GKE sur AWS est liée à une version Kubernetes de GKE sur AWS. Il s'agit généralement du dernier pilote disponible au moment de la publication de la version de GKE. Lorsque le cluster est mis à niveau, les pilotes sont automatiquement mis à jour.

Avant de commencer

  • Dans votre répertoire anthos-aws, utilisez anthos-gke pour basculer vers le contexte de votre cluster d'utilisateur.
    cd anthos-aws
    env HTTP_PROXY=http://localhost:8118 \
    anthos-gke aws clusters get-credentials CLUSTER_NAME

Utiliser la ressource StorageClass par défaut

La création d'un objet PersistentVolumeClaim sans le champ spec.storageClassName définit le provisionnement d'un volume gp2 à l'aide de la ressource StorageClass par défaut du pilote CSI pour EBS de GKE sur AWS.

Le code YAML suivant crée un objet PersistentVolumeClaim (PVC) nommé mypvc avec une taille de 30 GiB.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 30Gi

Utiliser une autre ressource StorageClass préinstallée

Le pilote CSI pour EBS de GKE sur AWS inclut également la ressource StorageClass premium-rwo, qui provisionne des volumes io1 à haut débit.

Vous pouvez l'utiliser en le spécifiant dans le fichier spec.storageclassName du PVC.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: mypvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 30Gi
  storageclassName: premium-rwo

Utiliser une ressource StorageClass personnalisée

Vous pouvez créer des ressources StorageClasses supplémentaires pour les volumes EBS ou utiliser des pilotes CSI (Container Storage Interface).

  1. Indiquez si vous utilisez un volume EBS ou un autre pilote CSI.

    Volume EBS

    Vous pouvez créer votre propre ressource StorageClass personnalisée qui spécifie un type de volume EBS, un type de système de fichiers et d'autres paramètres. Vous trouverez des paramètres StorageClass supplémentaires sur la page GitHub du pilote CSI pour EBS de GKE sur AWS.

    Pour configurer une ressource StorageClass personnalisée, copiez le fichier manifeste YAML suivant dans un fichier et modifiez les paramètres class-name avec le nom de votre nouvelle ressource StorageClass.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: CLASS_NAME
    provisioner: ebs.csi.aws.com
    volumeBindingMode: WaitForFirstConsumer
    

    Par exemple, le code YAML suivant crée une nouvelle ressource StorageClass qui provisionne des volumes EBS HDD à débit optimisé formatés avec le système de fichiers XFS.

    Enregistrez le fichier YAML en tant que my-custom-class.yaml.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: my-custom-class
    provisioner: ebs.csi.aws.com
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      csi.storage.k8s.io/fsType: xfs
      type: st1
    

    Pilote CSI

    Vous pouvez spécifier un autre pilote CSI dans le champ provisioner.

    Pour créer une ressource StorageClass avec un autre pilote CSI, vous pouvez commencer avec l'exemple de code YAML ci-dessous.

    Copiez le code YAML suivant et terminez la configuration en remplaçant les valeurs :

    • class-name est le nom de la ressource StorageClass (par exemple, my-custom-class).
    • csi-driver-name est le nom du pilote CSI (par exemple, csi.example.com).
    • Les sous-champs sous parameters sont déterminés par votre pilote CSI.
    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: class-name
    provisioner: csi-driver-name
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      ...
    
  2. Appliquez le code YAML à votre cluster.

    env HTTP_PROXY=http://localhost:8118 \
      kubectl apply -f my-custom-class.yaml
    

Créer un objet PersistentVolumeClaim avec une ressource StorageClass personnalisée

  1. Une fois créée, vous pouvez spécifier votre ressource StorageClass personnalisée dans un objet PVC. L'exemple ci-dessous crée un objet PVC nommé my-pvc qui référence la ressource StorageClass my-custom-class.

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: my-pvc
    spec:
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 30Gi
      storageclassName: my-custom-class
    

Définir la ressource StorageClass par défaut

GKE sur AWS utilise une ressource StorageClass par défaut appelée standard-rwo qui provisionne les volumes EBS gp2.

En tant qu'administrateur de cluster, vous souhaiterez peut-être modifier la classe de stockage par défaut. Ainsi, toutes les requêtes de stockage qui ne spécifient pas de StorageClass seront traitées en fonction de la ressource StorageClass de votre choix. Cette section décrit la procédure à suivre pour modifier la valeur par défaut.

Pour modifier la ressource StorageClass par défaut, procédez comme suit :

  1. Mettez à jour l'annotation is-default-class de la ressource StorageClass standard-rwo avec kubectl patch.

    env HTTP_PROXY=http://localhost:8118 \
      kubectl patch storageclass standard-rwo -p \
      '{"metadata": {"annotations":{"storageclass.kubernetes.io/is-default-class":"false"}}}'
    
  2. Créez une ressource StorageClass comportant l'annotation storageclass.kubernetes.io/is-default-class: true. Cette ressource StorageClass peut être destinée au pilote ebs.csi.aws.com driver ou à un autre pilote de stockage. Pour savoir comment installer d'autres pilotes de stockage, consultez la section Installer un pilote CSI.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: CLASS_NAME
      annotations:
        storageclass.kubernetes.io/is-default-class: true
    provisioner: ebs.csi.aws.com
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      type: EBS_VOLUME_TYPE
    

    Par exemple, le code YAML suivant crée une nouvelle ressource StorageClass par défaut qui provisionne des volumes EBS HDD à débit optimisé formatés avec le système de fichiers XFS. Enregistrez le fichier YAML en tant que my-custom-class.yaml.

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: my-custom-default-class
      annotations:
        storageclass.kubernetes.io/is-default-class: "true"
    provisioner: ebs.csi.aws.com
    volumeBindingMode: WaitForFirstConsumer
    parameters:
      csi.storage.k8s.io/fsType: xfs
      type: st1
    
  3. Appliquez la nouvelle classe personnalisée à votre cluster.

    env HTTP_PROXY=http://localhost:8118 \
      kubectl apply -f my-custom-class.yaml
    

Après avoir appliqué ce fichier manifeste, les nouvelles requêtes de stockage seront créées à l'aide de la ressource StorageClass my-custom-default-class.

Référencer la ressource StorageClass dans un StatefulSet

Pour utiliser votre nouvelle StorageClass, vous pouvez faire référence à cette ressource dans la spécification volumeClaimTemplates d'un StatefulSet.

Lorsque vous référencez une ressource StorageClass dans la spécification volumeClaimTemplates d'un StatefulSet, Kubernetes fournit un espace de stockage stable à l'aide de PersistentVolumes (PVs). Kubernetes appelle l'approvisionneur défini dans la StorageClass pour créer un volume de stockage. Une fois le volume provisionné, Kubernetes crée automatiquement un PV.

Voici un StatefulSet faisant référence à la ressource StorageClass my-custom-class et provisionnant un volume de 1 GiB :

apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: web
spec:
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: k8s.gcr.io/nginx-slim:0.8
        volumeMounts:
        - name: www
          mountPath: /usr/share/nginx/html
  volumeClaimTemplates: # This is the specification in which you reference the StorageClass
  - metadata:
      name: www
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi
      storageClassName: my-custom-class # This field references the existing StorageClass

Étapes suivantes