Création d’une classe de stockage - 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.

Création d’une classe de stockage

Une StorageClass dans le mode automatique Amazon EKS définit la façon dont les volumes Amazon EBS sont automatiquement provisionnés lorsque les applications demandent du stockage persistant. Cette page explique comment créer et configurer une StorageClass compatible avec le mode automatique Amazon EKS pour le provisionnement de volumes EBS.

En configurant une StorageClass, vous pouvez définir les paramètres par défaut de vos volumes EBS, notamment le type de volume, le chiffrement, le nombre d’IOPS et d’autres paramètres liés au stockage. Vous pouvez également configurer la StorageClass pour utiliser des clés AWS KMS pour la gestion du chiffrement.

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.

Tout d’abord, 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" allowedTopologies: - matchLabelExpressions: - key: eks.amazonaws.com/compute-type values: - auto provisioner: ebs.csi.eks.amazonaws.com volumeBindingMode: WaitForFirstConsumer parameters: type: gp3 encrypted: "true"

Ensuite, appliquez la classe de stockage à votre cluster.

kubectl apply -f storage-class.yaml

Composants clés :

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

  • allowedTopologies : en spécifiant matchLabelExpressions pour filtrer selon eks.amazonaws.com/compute-type:auto, vous vous assurez que si vos pods ont besoin qu’un volume soit automatiquement provisionné via le mode automatique, ceux-ci ne seront pas programmés sur des nœuds qui ne sont pas gérés par le mode automatique.

  • 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 chiffre tous les volumes créés avec la StorageClass. EBS utilisera l’alias de clé aws/ebs par défaut. Pour plus d’informations, consultez Fonctionnement du chiffrement Amazon EBS dans le Guide de l’utilisateur Amazon EBS. Cette valeur 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. Cette valeur est facultative. Faites preuve de prudence lorsque vous définissez cette valeur si vous effectuez une migration depuis un autre contrôleur de stockage.

Utilisation d’une clé KMS autogérée pour chiffrer les volumes EBS

Pour utiliser une clé KMS autogérée afin de chiffrer des volumes EBS automatisés par le mode automatique EKS, vous devez :

  1. Créer une clé KMS autogérée.

  2. Créez une nouvelle politique permettant l’accès à la clé KMS.

  3. Attachez la politique au rôle du cluster EKS.

    • Utilisez la console AWS pour trouver l’ARN du rôle du cluster EKS. Les informations relatives au rôle sont visibles dans la section Présentation. Pour de plus amples informations, consultez Rôle IAM de cluster Amazon EKS.

  4. Mettez à jour la StorageClass pour faire référence à l’ID de la clé KMS dans le champ parameters.kmsKeyId.

Exemple de politique IAM KMS autogérée

Mettez à jour les valeurs suivantes dans la politique ci-dessous :

  • <account-id> : votre ID de compte AWS, par exemple 111122223333

  • <aws-region> : la région AWS de votre cluster, par exemple us-west-2

{ "Version": "2012-10-17", "Id": "key-auto-policy-3", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::<account-id>:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access through EBS for all principals in the account that are authorized to use EBS", "Effect": "Allow", "Principal": { "AWS": "*" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:CreateGrant", "kms:DescribeKey" ], "Resource": "*", "Condition": { "StringEquals": { "kms:CallerAccount": "<account-id>", "kms:ViaService": "ec2.<aws-region>.amazonaws.com" } } } ] }

Exemple de StorageClass KMS autogérée

parameters: type: gp3 encrypted: "true" kmsKeyId: <custom-key-arn>

Référence des paramètres StorageClass

Pour des informations générales sur les ressources StorageClass de Kubernetes, consultez Classes de stockage dans la documentation Kubernetes.

La section parameters de la ressource StorageClass est spécifique à AWS. Utilisez le tableau ci-dessous pour consulter les options disponibles.

Paramètres Valeurs Par défaut Description

« csi.storage.k8s.io/fstype »

xfs, ext2, ext3, ext4

ext4

Type de système de fichiers qui sera formaté lors de la création du volume. Ce paramètre n’est pas sensible à la casse !

« type »

io1, io2, gp2, gp3, sc1, st1, standard, sbp1, sbg1

gp3

Type de volume EBS.

« iopsPerGB »

Nombre d’opérations d’E/S par seconde par Gio. Peut être utilisé pour les volumes IO1, IO2 et GP3.

« allowAutoIOPSPerGBIncrease »

true, false

false

Lorsque "true", le pilote CSI augmente automatiquement le nombre d’IOPS d’un volume lorsque iopsPerGB * <volume size> est trop faible pour entrer dans la plage d’IOPS prise en charge par AWS. Cela permet au provisionnement dynamique de réussir en tout temps, même si l’utilisateur spécifie une capacité PVC trop faible ou une valeur iopsPerGB insuffisante. Cependant, cette fonctionnalité peut entraîner des coûts plus élevés, car ces volumes obtiennent un niveau d’IOPS supérieur à celui demandé dans iopsPerGB.

« iops »

Nombre d’opérations d’E/S par seconde. Peut être utilisé pour les volumes IO1, IO2 et GP3.

« throughput »

125

Le débit est exprimé en Mio/s. Efficace uniquement lorsque le type de volume gp3 est spécifié.

« encrypted »

true, false

false

Indique si le volume doit être chiffré ou non. Les valeurs valides sont « true » ou « false ».

« blockExpress »

true, false

false

Permet la création de volumes io2 Block Express.

« kmsKeyId »

ARN complet de la clé à utiliser pour chiffrer le volume. Si aucune clé n’est spécifiée, AWS utilisera la clé KMS par défaut de la région du volume. Si elle n’a pas été modifiée, cette clé autogénérée s’appelera /aws/ebs.

« blockSize »

Taille des blocs utilisée lors du formatage du système de fichiers sous-jacent. Prise en charge uniquement sur les nœuds Linux et pour les types de systèmes de fichiers ext2, ext3, ext4 ou xfs.

« inodeSize »

Taille des inodes utilisée lors du formatage du système de fichiers. Prise en charge uniquement sur les nœuds Linux et pour les types de systèmes de fichiers ext2, ext3, ext4 ou xfs.

« bytesPerInode »

Nombre de bytes-per-inode utilisé lors du formatage du système de fichiers sous-jacent. Prise en charge uniquement sur les nœuds Linux et pour les types de systèmes de fichiers ext2, ext3 et ext4.

« numberOfInodes »

Nombre de number-of-inodes utilisé lors du formatage du système de fichiers sous-jacent. Prise en charge uniquement sur les nœuds Linux et pour les types de systèmes de fichiers ext2, ext3 et ext4.

« ext4BigAlloc »

true, false

false

Modifie le système de fichiers ext4 pour activer l’allocation de blocs en clusters en utilisant l’option de formatage bigalloc. Avertissement : bigalloc peut ne pas être entièrement pris en charge par le noyau Linux de vos nœuds.

« ext4ClusterSize »

Taille des clusters utilisée lors du formatage d’un système de fichiers ext4 lorsque la fonctionnalité bigalloc est activée. Remarque : le paramètre ext4BigAlloc doit être défini sur true.

Pour plus d’informations, consultez Pilote CSI AWS EBS sur GitHub.

Considérations

Note

Vous ne pouvez déployer des charges de travail qui dépendent des StorageClasses du mode automatique EKS que sur des nœuds du mode automatique EKS. Si votre cluster comporte différents types de nœuds, vous devez configurer vos charges de travail afin qu’elles s’exécutent uniquement sur les nœuds du mode automatique EKS. Pour de plus amples informations, consultez Contrôle du déploiement d’une charge de travail sur les nœuds du mode automatique EKS.

La capacité de stockage par blocs du mode automatique EKS est différente de celle du pilote CSI EBS.

  • Provisionnement statique

    • Si vous souhaitez utiliser des volumes EBS créés à l’extérieur avec le mode automatique EKS, vous devez ajouter manuellement une balise AWS avec la clé eks:eks-cluster-name et la valeur du nom du cluster.

  • Rejet de démarrage des nœuds

    • Vous ne pouvez pas utiliser la fonctionnalité de rejet de démarrage des nœuds pour empêcher la planification des pods avant que la capacité de stockage ne soit prête

  • Balises personnalisées sur les volumes provisionnés dynamiquement

    • Vous ne pouvez pas utiliser le paramètre CLI extra-tag pour configurer des balises personnalisées sur les volumes EBS provisionnés dynamiquement

    • Vous pouvez utiliser le balisage StorageClass pour ajouter des balises personnalisées. Le mode automatique EKS ajoutera des balises aux ressources AWS associées. Vous devrez mettre à jour le rôle IAM du cluster afin d’utiliser des balises personnalisées. Pour de plus amples informations, consultez Balises AWS personnalisées pour les ressources EKS Auto.

  • Métriques de performances détaillées d’EBS

    • Vous ne pouvez pas accéder aux métriques Prometheus pour les performances détaillées d’EBS

Installation du module complémentaire CSI Snapshot Controller

Le mode automatique EKS est compatible avec le module complémentaire Amazon EKS CSI Snapshot Controller.

AWS recommande de configurer ce module complémentaire pour qu’il s’exécute sur le groupe de nœuds system intégré.

Pour plus d’informations, consultez :

Pour installer le contrôleur d’instantané dans le groupe de nœuds système

  1. Ouvrez votre cluster EKS dans la console AWS

  2. Dans l’onglet Modules complémentaires, sélectionnez Obtenir plus de modules complémentaires

  3. Sélectionnez le module CSI Snapshot Controller, puis Suivant

  4. Sur la page Configurer les paramètres des modules complémentaires sélectionnés, sélectionnez Paramètres de configuration facultatifs pour afficher le schéma de configuration des modules complémentaires

    1. Insérez le fichier YAML suivant pour associer le contrôleur d’instantané au groupe de nœuds system. Le contrôleur d’instantané inclut une tolérance pour le rejet CriticalAddonsOnly.

      { "nodeSelector": { "karpenter.sh/nodepool": "system" } }
    2. Sélectionnez Suivant

  5. Vérifier la configuration du module complémentaire, puis sélectionnez Créer