Déployer un exemple de charge de travail avec état dans le mode automatique EKS - Amazon EKS

Aidez à améliorer cette page

Pour contribuer à ce guide de l’utilisateur, cliquez sur le lien Modifier cette page sur GitHub qui se trouve dans le volet droit de chaque page.

Déployer un exemple de charge de travail avec état dans le mode automatique EKS

Ce tutoriel vous guidera dans le déploiement d’un exemple d’application avec état dans votre cluster du mode automatique EKS. L’application écrit des horodatages dans un volume persistant, démontrant ainsi les capacités de provisionnement et de persistance automatiques des volumes EBS du mode automatique EKS.

Prérequis

  • Un cluster du mode automatique EKS

  • L’interface AWS CLI configurée avec les autorisations appropriées

  • kubectl installé et configuré

Étape 1 : configurer votre environnement

  1. Définissez vos variables d’environnement :

    export CLUSTER_NAME=my-auto-cluster export AWS_REGION="us-west-2"
  2. Mettez à jour votre kubeconfig :

    aws eks update-kubeconfig --name "${CLUSTER_NAME}"

Étape 2 : créer la classe de stockage

La StorageClass définit la manière dont le mode automatique EKS provisionnera les volumes EBS.

Le mode automatique EKS ne crée pas de StorageClass pour vous. Vous devez créer une StorageClass faisant référence à ebs.csi.eks.amazonaws.com pour utiliser les fonctionnalités de stockage du mode automatique EKS.

  1. Créez un fichier nommé storage-class.yaml:

    apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: auto-ebs-sc annotations: storageclass.kubernetes.io/is-default-class: "true" provisioner: ebs.csi.eks.amazonaws.com volumeBindingMode: WaitForFirstConsumer parameters: type: gp3 encrypted: "true"
  2. Appliquez le StorageClass :

    kubectl apply -f storage-class.yaml

Composants clés :

  • provisioner: ebs.csi.eks.amazonaws.com : utilise le mode automatique EKS

  • volumeBindingMode: WaitForFirstConsumer : retarde la création du volume jusqu’à ce qu’un pod en ait besoin

  • type: gp3 : spécifie le type de volume EBS

  • encrypted: "true" : EBS utilisera la clé aws/ebs par défaut pour activer le chiffrement sur les volumes créés avec cette classe. Cette action est facultative, mais recommandée.

  • storageclass.kubernetes.io/is-default-class: "true" : Kubernetes utilisera cette classe de stockage par défaut, à moins que vous ne spécifiiez une autre classe de volume dans une demande de volume persistant. Soyez prudent lorsque vous définissez cette valeur si vous migrez depuis un autre contrôleur de stockage. (facultatif)

Étape 3 : créer la revendication de volume persistant

La PVC demande du stockage à la StorageClass.

  1. Créez un fichier nommé pvc.yaml:

    apiVersion: v1 kind: PersistentVolumeClaim metadata: name: auto-ebs-claim spec: accessModes: - ReadWriteOnce storageClassName: auto-ebs-sc resources: requests: storage: 8Gi
  2. Appliquez le PVC :

    kubectl apply -f pvc.yaml

Composants clés :

  • accessModes: ReadWriteOnce : le volume peut être monté par un nœud à la fois

  • storage: 8Gi : demande un volume de 8 Gio

  • storageClassName: auto-ebs-sc : fait référence à la StorageClass que nous avons créée

Étape 4 : déployer l’application

Le déploiement exécute un conteneur qui écrit des horodatages sur le volume persistant.

  1. Créez un fichier nommé deployment.yaml:

    apiVersion: apps/v1 kind: Deployment metadata: name: inflate-stateful spec: replicas: 1 selector: matchLabels: app: inflate-stateful template: metadata: labels: app: inflate-stateful spec: terminationGracePeriodSeconds: 0 nodeSelector: eks.amazonaws.com/compute-type: auto containers: - name: bash image: public.ecr.aws/docker/library/bash:4.4 command: ["/usr/local/bin/bash"] args: ["-c", "while true; do echo $(date -u) >> /data/out.txt; sleep 60; done"] resources: requests: cpu: "1" volumeMounts: - name: persistent-storage mountPath: /data volumes: - name: persistent-storage persistentVolumeClaim: claimName: auto-ebs-claim
  2. Appliquez le déploiement :

    kubectl apply -f deployment.yaml

Composants clés :

  • Conteneur bash simple qui écrit des horodatages dans un fichier

  • Monte le PVC à /data

  • Demande 1 cœur de processeur

  • Utilise le sélecteur de nœuds pour les nœuds gérés par EKS

Étape 5 : vérifier la configuration

  1. Vérifiez que le pod est en cours d’exécution :

    kubectl get pods -l app=inflate-stateful
  2. Vérifiez que le PVC est lié :

    kubectl get pvc auto-ebs-claim
  3. Vérifiez le volume EBS :

    # Get the PV name PV_NAME=$(kubectl get pvc auto-ebs-claim -o jsonpath='{.spec.volumeName}') # Describe the EBS volume aws ec2 describe-volumes \ --filters Name=tag:CSIVolumeName,Values=${PV_NAME}
  4. Vérifiez que les données sont écrites :

    kubectl exec "$(kubectl get pods -l app=inflate-stateful \ -o=jsonpath='{.items[0].metadata.name}')" -- \ cat /data/out.txt

Étape 6 : nettoyage

Exécutez la commande suivante pour supprimer toutes les ressources créées dans ce tutoriel :

# Delete all resources in one command kubectl delete deployment/inflate-stateful pvc/auto-ebs-claim storageclass/auto-ebs-sc

Ce qui se passe dans les coulisses

  1. Le PVC demande du stockage à la StorageClass

  2. Lorsque le pod est planifié :

    1. Le mode automatique EKS provisionne un volume EBS

    2. Crée un PersistentVolume

    3. Attache le volume au nœud

  3. Le pod monte le volume et commence à écrire les horodatages

Contrôleur d’instantané

Le mode automatique EKS est compatible avec le Kubernetes CSI Snapshotter, également appelé contrôleur d’instantané. Cependant, le mode automatique EKS n’inclut pas le contrôleur d’instantané. Vous êtes responsable de l’installation et de la configuration du contrôleur d’instantané. Pour de plus amples informations, consultez Activer la fonctionnalité d’instantané pour les volumes CSI.

Veuillez consulter la classe VolumeSnapshotClass suivante qui fait référence à la capacité de stockage du mode automatique EKS.

apiVersion: snapshot.storage.k8s.io/v1 kind: VolumeSnapshotClass metadata: name: auto-ebs-vsclass driver: ebs.csi.eks.amazonaws.com deletionPolicy: Delete

En savoir plus sur le contrôleur de snapshots CSI Kubernetes.