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
-
kubectlinstallé et configuré-
Pour de plus amples informations, consultez Configuration pour utiliser Amazon EKS.
-
Étape 1 : configurer votre environnement
-
Définissez vos variables d’environnement :
export CLUSTER_NAME=my-auto-cluster export AWS_REGION="us-west-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.
-
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" -
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/ebspar 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.
-
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 -
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 à laStorageClassque 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.
-
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 -
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
-
Vérifiez que le pod est en cours d’exécution :
kubectl get pods -l app=inflate-stateful -
Vérifiez que le PVC est lié :
kubectl get pvc auto-ebs-claim -
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} -
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
-
Le PVC demande du stockage à la
StorageClass -
Lorsque le pod est planifié :
-
Le mode automatique EKS provisionne un volume EBS
-
Crée un PersistentVolume
-
Attache le volume au nœud
-
-
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.