5.9. Opérateur du pilote CSI de AWS Elastic File Service
5.9.1. Vue d'ensemble
OpenShift Container Platform est capable de provisionner des volumes persistants (PV) à l'aide du pilote Container Storage Interface (CSI) pour AWS Elastic File Service (EFS).
Il est recommandé de se familiariser avec le stockage persistant et la configuration des volumes CSI lorsque l'on travaille avec un opérateur et un pilote CSI.
Après avoir installé l'opérateur de pilote AWS EFS CSI, OpenShift Container Platform installe l'opérateur AWS EFS CSI et le pilote AWS EFS CSI par défaut dans l'espace de noms openshift-cluster-csi-drivers
. Cela permet à l'opérateur de pilote AWS EFS CSI de créer des PV provisionnées CSI qui se montent sur des actifs AWS EFS.
-
Le site AWS EFS CSI Driver Operator, une fois installé, ne crée pas par défaut de classe de stockage à utiliser pour créer des réclamations de volumes persistants (PVC). Toutefois, vous pouvez créer manuellement la classe de stockage AWS EFS
StorageClass
. L'AWS EFS CSI Driver Operator prend en charge le provisionnement dynamique des volumes en permettant la création de volumes de stockage à la demande. Les administrateurs de clusters n'ont donc plus besoin de préprovisionner le stockage. - Le site AWS EFS CSI driver vous permet de créer et de monter des PV AWS EFS.
AWS EFS ne prend en charge que les volumes régionaux, et non les volumes zonaux.
5.9.2. À propos du CSI
Les fournisseurs de stockage ont traditionnellement fourni des pilotes de stockage dans le cadre de Kubernetes. Avec la mise en œuvre de l'interface de stockage des conteneurs (CSI), les fournisseurs tiers peuvent à la place fournir des plugins de stockage à l'aide d'une interface standard sans jamais avoir à modifier le code de base de Kubernetes.
Les opérateurs CSI offrent aux utilisateurs d'OpenShift Container Platform des options de stockage, telles que les instantanés de volume, qui ne sont pas possibles avec les plugins de volume dans l'arborescence.
5.9.3. Configuration de l'opérateur du pilote AWS EFS CSI
- Installez le pilote AWS EFS CSI Driver Operator.
- Installez le pilote AWS EFS CSI.
5.9.3.1. Installation de l'opérateur du pilote AWS EFS CSI
L'opérateur de pilote AWS EFS CSI n'est pas installé par défaut dans OpenShift Container Platform. Utilisez la procédure suivante pour installer et configurer le pilote AWS EFS CSI Driver Operator dans votre cluster.
Conditions préalables
- Accès à la console web d'OpenShift Container Platform.
Procédure
Pour installer l'opérateur de pilote AWS EFS CSI à partir de la console web :
- Connectez-vous à la console web.
Installez l'opérateur AWS EFS CSI :
-
Cliquez sur Operators
OperatorHub. - Localisez l'opérateur AWS EFS CSI en tapant AWS EFS CSI dans la boîte de filtre.
Cliquez sur le bouton AWS EFS CSI Driver Operator.
ImportantVeillez à sélectionner AWS EFS CSI Driver Operator et non AWS EFS Operator. AWS EFS Operator est un opérateur communautaire et n'est pas pris en charge par Red Hat.
- Sur la page AWS EFS CSI Driver Operator, cliquez sur Install.
Sur la page Install Operator, assurez-vous que
- All namespaces on the cluster (default) est sélectionné.
- Installed Namespace est fixé à openshift-cluster-csi-drivers.
Cliquez sur Install.
Une fois l'installation terminée, l'opérateur AWS EFS CSI est répertorié dans la section Installed Operators de la console Web.
-
Cliquez sur Operators
Prochaines étapes
- Si vous utilisez AWS EFS avec AWS Secure Token Service (STS), vous devez configurer le pilote AWS EFS CSI avec STS. Pour plus d'informations, voir Configuration du pilote AWS EFS CSI avec STS.
5.9.3.2. Configuration d'AWS EFS CSI Driver Operator avec Security Token Service
Cette procédure explique comment configurer l'opérateur du pilote AWS EFS CSI avec OpenShift Container Platform sur AWS Security Token Service (STS).
Effectuez cette procédure avant d'avoir installé l'opérateur AWS EFS CSI, mais pas encore le pilote AWS EFS CSI dans le cadre de la procédure Installing the AWS EFS CSI Driver Operator.
Si vous effectuez cette procédure après avoir installé le pilote et créé des volumes, vos volumes ne pourront pas être montés dans les pods.
Conditions préalables
- Vous avez accès au cluster en tant qu'utilisateur ayant le rôle de cluster-admin.
- Informations d'identification du compte AWS
- Vous avez installé l'opérateur AWS EFS CSI.
Procédure
Pour configurer l'opérateur de pilote AWS EFS CSI avec STS :
-
Extrayez le binaire de l'utilitaire CCO (
ccoctl
) de l'image de version d'OpenShift Container Platform, que vous avez utilisée pour installer le cluster avec STS. Pour plus d'informations, voir "Configuring the Cloud Credential Operator utility". Créez et enregistrez un fichier YAML EFS
CredentialsRequest
, comme dans l'exemple suivant, et placez-le dans le répertoirecredrequests
:Exemple :
apiVersion: cloudcredential.openshift.io/v1 kind: CredentialsRequest metadata: name: openshift-aws-efs-csi-driver namespace: openshift-cloud-credential-operator spec: providerSpec: apiVersion: cloudcredential.openshift.io/v1 kind: AWSProviderSpec statementEntries: - action: - elasticfilesystem:* effect: Allow resource: '*' secretRef: name: aws-efs-cloud-credentials namespace: openshift-cluster-csi-drivers serviceAccountNames: - aws-efs-csi-driver-operator - aws-efs-csi-driver-controller-sa
Exécutez l'outil
ccoctl
pour générer un nouveau rôle IAM dans AWS et créez un fichier YAML pour ce rôle dans le système de fichiers local (<path_to_ccoctl_output_dir>/manifests/openshift-cluster-csi-drivers-aws-efs-cloud-credentials-credentials.yaml
).$ ccoctl aws create-iam-roles --name=<name> --region=<aws_region> --credentials-requests-dir=<path_to_directory_with_list_of_credentials_requests>/credrequests --identity-provider-arn=arn :aws:iam::<aws_account_id>:oidc-provider/<name>-oidc.s3.<aws_region>.amazonaws.com
-
name=<name>
est le nom utilisé pour étiqueter toutes les ressources du nuage créées pour le suivi. -
region=<aws_region>
est la région AWS où les ressources cloud sont créées. -
dir=<path_to_directory_with_list_of_credentials_requests>/credrequests
est le répertoire contenant le fichier EFS CredentialsRequest de l'étape précédente. <aws_account_id>
est l'identifiant du compte AWS.Exemple :
$ ccoctl aws create-iam-roles --name my-aws-efs --credentials-requests-dir credrequests --identity-provider-arn arn:aws:iam::123456789012:oidc-provider/my-aws-efs-oidc.s3.us-east-2.amazonaws.com
Exemple de sortie
2022/03/21 06:24:44 Role arn:aws:iam::123456789012:role/my-aws-efs -openshift-cluster-csi-drivers-aws-efs-cloud- created 2022/03/21 06:24:44 Saved credentials configuration to: /manifests/openshift-cluster-csi-drivers-aws-efs-cloud-credentials-credentials.yaml 2022/03/21 06:24:45 Updated Role policy for Role my-aws-efs-openshift-cluster-csi-drivers-aws-efs-cloud-
-
Créez les informations d'identification et le secret du nuage AWS EFS :
oc create -f <path_to_ccoctl_output_dir>/manifests/openshift-cluster-csi-drivers-aws-efs-cloud-credentials-credentials.yaml
Exemple :
$ oc create -f /manifests/openshift-cluster-csi-drivers-aws-efs-cloud-credentials-credentials.yaml
Exemple de sortie
secret/aws-efs-cloud-credentials created
5.9.3.3. Installation du pilote AWS EFS CSI
Conditions préalables
- Accès à la console web d'OpenShift Container Platform.
Procédure
-
Cliquez sur Administration
CustomResourceDefinitions ClusterCSIDriver. - Dans l'onglet Instances, cliquez sur Create ClusterCSIDriver.
Utilisez le fichier YAML suivant :
apiVersion: operator.openshift.io/v1 kind: ClusterCSIDriver metadata: name: efs.csi.aws.com spec: managementState: Managed
- Cliquez sur Create.
Attendre que les conditions suivantes passent à l'état "Vrai" :
- AWSEFSDriverNodeServiceControllerAvailable (Contrôleur de service du pilote AWSEFSD)
- AWSEFSDriverControllerServiceControllerAvailable (disponible)
5.9.4. Création de la classe de stockage AWS EFS
Les classes de stockage sont utilisées pour différencier et délimiter les niveaux de stockage et les utilisations. En définissant une classe de stockage, les utilisateurs peuvent obtenir des volumes persistants provisionnés dynamiquement.
Le site AWS EFS CSI Driver Operator, une fois installé, ne crée pas de classe de stockage par défaut. Cependant, vous pouvez créer manuellement la classe de stockage AWS EFS.
5.9.4.1. Création de la classe de stockage AWS EFS à l'aide de la console
Procédure
-
Dans la console OpenShift Container Platform, cliquez sur Storage
StorageClasses. - Sur la page StorageClasses, cliquez sur Create StorageClass.
Sur la page StorageClass, procédez comme suit :
- Entrez un nom pour référencer la classe de stockage.
- En option : Saisissez la description.
- Sélectionnez la politique de récupération.
-
Sélectionnez
efs.csi.aws.com
dans la liste déroulante Provisioner. - Optionnel : Définir les paramètres de configuration du provisionneur sélectionné.
- Cliquez sur Create.
5.9.4.2. Création de la classe de stockage AWS EFS à l'aide de la CLI
Procédure
Créer un objet
StorageClass
:kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: efs-sc provisioner: efs.csi.aws.com parameters: provisioningMode: efs-ap 1 fileSystemId: fs-a5324911 2 directoryPerms: "700" 3 gidRangeStart: "1000" 4 gidRangeEnd: "2000" 5 basePath: "/dynamic_provisioning" 6
- 1
provisioningMode
doit êtreefs-ap
pour permettre le provisionnement dynamique.- 2
fileSystemId
doit être l'ID du volume EFS créé manuellement.- 3
directoryPerms
est l'autorisation par défaut du répertoire racine du volume. Dans cet exemple, le volume n'est accessible que par le propriétaire.- 4 5
gidRangeStart
etgidRangeEnd
définissent la plage d'ID de groupe POSIX (GID) utilisée pour définir le GID du point d'accès AWS. Si elle n'est pas spécifiée, la plage par défaut est 50000-7000000. Chaque volume provisionné, et donc chaque point d'accès AWS, se voit attribuer un GID unique dans cette plage.- 6
basePath
est le répertoire du volume EFS utilisé pour créer des volumes provisionnés dynamiquement. Dans ce cas, un PV est provisionné en tant que "/dynamic_provisioning/<random uuid>" sur le volume EFS. Seul le sous-répertoire est monté sur les pods qui utilisent le PV.
NoteUn administrateur de cluster peut créer plusieurs objets
StorageClass
, chacun utilisant un volume EFS différent.
5.9.5. Création et configuration de l'accès aux volumes EFS dans AWS
Cette procédure explique comment créer et configurer des volumes EFS dans AWS afin de pouvoir les utiliser dans OpenShift Container Platform.
Conditions préalables
- Informations d'identification du compte AWS
Procédure
Pour créer et configurer l'accès à un volume EFS dans AWS :
- Dans la console AWS, ouvrez https://console.aws.amazon.com/efs.
Cliquez sur Create file system:
- Saisissez un nom pour le système de fichiers.
- Pour Virtual Private Cloud (VPC), sélectionnez le nuage privé virtuel (VPC) de votre OpenShift Container Platform.
- Accepter les paramètres par défaut pour toutes les autres sélections.
Attendez que le volume et les cibles de montage soient entièrement créés :
- Allez sur https://console.aws.amazon.com/efs#/file-systems.
- Cliquez sur votre volume et, dans l'onglet Network, attendez que toutes les cibles de montage soient disponibles (~1-2 minutes).
- Dans l'onglet Network, copiez l'identifiant du groupe de sécurité (vous en aurez besoin à l'étape suivante).
- Allez sur https://console.aws.amazon.com/ec2/v2/home#SecurityGroups, et trouvez le groupe de sécurité utilisé par le volume EFS.
Dans l'onglet Inbound rules, cliquez sur Edit inbound rules, puis ajoutez une nouvelle règle avec les paramètres suivants pour permettre aux nœuds OpenShift Container Platform d'accéder aux volumes EFS :
- Type: NFS
- Protocol: TCP
- Port range: 2049
Source: Plage d'adresses IP personnalisées de vos nœuds (par exemple : "10.0.0.0/16")
Cette étape permet à OpenShift Container Platform d'utiliser les ports NFS du cluster.
- Sauvegarder la règle.
5.9.6. Provisionnement dynamique pour AWS EFS
Le pilote CSI AWS EFS prend en charge une forme de provisionnement dynamique différente de celle des autres pilotes CSI. Il provisionne de nouveaux PV en tant que sous-répertoires d'un volume EFS préexistant. Les PV sont indépendantes les unes des autres. Cependant, ils partagent tous le même volume EFS. Lorsque le volume est supprimé, toutes les parties privatives provisionnées à partir de celui-ci sont également supprimées. Le pilote EFS CSI crée un point d'accès AWS pour chacun de ces sous-répertoires. En raison des limites imposées par les points d'accès AWS, vous ne pouvez provisionner dynamiquement que 1 000 PV à partir d'un seul volume StorageClass
/EFS.
Notez que PVC.spec.resources
n'est pas appliqué par l'EFS.
Dans l'exemple ci-dessous, vous demandez 5 GiB d'espace. Cependant, le PV créé est illimité et peut stocker n'importe quelle quantité de données (comme des pétaoctets). Une application défectueuse, ou même une application malveillante, peut entraîner des dépenses importantes si elle stocke trop de données sur le volume.
Il est fortement recommandé de surveiller la taille des volumes EFS dans AWS.
Conditions préalables
- Vous avez créé des volumes AWS EFS.
- Vous avez créé la classe de stockage AWS EFS.
Procédure
Pour activer le provisionnement dynamique :
Créez un PVC (ou StatefulSet ou Template) comme d'habitude, en vous référant au site
StorageClass
créé précédemment.apiVersion: v1 kind: PersistentVolumeClaim metadata: name: test spec: storageClassName: efs-sc accessModes: - ReadWriteMany resources: requests: storage: 5Gi
Si vous rencontrez des problèmes lors de la configuration du provisionnement dynamique, consultez la section Dépannage d'AWS EFS.
Ressources supplémentaires
5.9.7. Création de PV statiques avec AWS EFS
Il est possible d'utiliser un volume AWS EFS en tant que PV unique sans provisionnement dynamique. L'ensemble du volume est monté sur des pods.
Conditions préalables
- Vous avez créé des volumes AWS EFS.
Procédure
Créez le PV à l'aide du fichier YAML suivant :
apiVersion: v1 kind: PersistentVolume metadata: name: efs-pv spec: capacity: 1 storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteMany - ReadWriteOnce persistentVolumeReclaimPolicy: Retain csi: driver: efs.csi.aws.com volumeHandle: fs-ae66151a 2 volumeAttributes: encryptInTransit: "false" 3
- 1
spec.capacity
n'a aucune signification et est ignorée par le pilote CSI. Il n'est utilisé que lors de la liaison avec un PVC. Les applications peuvent stocker n'importe quelle quantité de données sur le volume.- 2
volumeHandle
doit être le même ID que le volume EFS que vous avez créé dans AWS. Si vous fournissez votre propre point d'accès,volumeHandle
doit être<EFS volume ID>::<access point ID>
. Par exemple :fs-6e633ada::fsap-081a1d293f0004630
.- 3
- Si vous le souhaitez, vous pouvez désactiver le cryptage en transit. Le cryptage est activé par défaut.
Si vous rencontrez des problèmes lors de la configuration des PV statiques, consultez la section Dépannage d'AWS EFS.
5.9.8. Sécurité AWS EFS
Les informations suivantes sont importantes pour la sécurité d'AWS EFS.
Lors de l'utilisation de points d'accès, par exemple en utilisant le provisionnement dynamique comme décrit précédemment, Amazon remplace automatiquement les GID des fichiers par le GID du point d'accès. En outre, EFS prend en compte l'ID de l'utilisateur, l'ID du groupe et les ID du groupe secondaire du point d'accès lors de l'évaluation des autorisations du système de fichiers. EFS ignore les ID du client NFS. Pour plus d'informations sur les points d'accès, voir https://docs.aws.amazon.com/efs/latest/ug/efs-access-points.html.
Par conséquent, les volumes EFS ignorent silencieusement FSGroup ; OpenShift Container Platform n'est pas en mesure de remplacer les GID des fichiers sur le volume par FSGroup. Tout pod qui peut accéder à un point d'accès EFS monté peut accéder à n'importe quel fichier qui s'y trouve.
Sans rapport avec cela, le cryptage en transit est activé par défaut. Pour plus d'informations, voir https://docs.aws.amazon.com/efs/latest/ug/encryption-in-transit.html.
5.9.9. Dépannage d'AWS EFS
Les informations suivantes indiquent comment résoudre les problèmes liés à AWS EFS :
-
L'opérateur AWS EFS et le pilote CSI s'exécutent dans l'espace de noms
openshift-cluster-csi-drivers
. Pour lancer la collecte des journaux de l'opérateur AWS EFS et du pilote CSI, exécutez la commande suivante :
$ oc adm must-gather [must-gather ] OUT Using must-gather plugin-in image: quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:125f183d13601537ff15b3239df95d47f0a604da2847b561151fedd699f5e3a5 [must-gather ] OUT namespace/openshift-must-gather-xm4wq created [must-gather ] OUT clusterrolebinding.rbac.authorization.k8s.io/must-gather-2bd8x created [must-gather ] OUT pod for plug-in image quay.io/openshift-release-dev/ocp-v4.0-art-dev@sha256:125f183d13601537ff15b3239df95d47f0a604da2847b561151fedd699f5e3a5 created
Pour afficher les erreurs de l'opérateur AWS EFS, consultez l'état de
ClusterCSIDriver
:$ oc get clustercsidriver efs.csi.aws.com -o yaml
Si un volume ne peut pas être monté sur un pod (comme le montre la sortie de la commande suivante) :
$ oc describe pod ... Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 2m13s default-scheduler Successfully assigned default/efs-app to ip-10-0-135-94.ec2.internal Warning FailedMount 13s kubelet MountVolume.SetUp failed for volume "pvc-d7c097e6-67ec-4fae-b968-7e7056796449" : rpc error: code = DeadlineExceeded desc = context deadline exceeded 1 Warning FailedMount 10s kubelet Unable to attach or mount volumes: unmounted volumes=[persistent-storage], unattached volumes=[persistent-storage kube-api-access-9j477]: timed out waiting for the condition
- 1
- Message d'avertissement indiquant que le volume n'est pas monté.
Cette erreur est souvent causée par l'abandon de paquets par AWS entre un nœud OpenShift Container Platform et AWS EFS.
Vérifiez que les éléments suivants sont corrects :
- Pare-feu AWS et groupes de sécurité
- Réseau : numéro de port et adresses IP
5.9.10. Désinstallation de l'opérateur du pilote CSI AWS EFS
Tous les PV EFS sont inaccessibles après la désinstallation de AWS EFS CSI Driver Operator.
Conditions préalables
- Accès à la console web d'OpenShift Container Platform.
Procédure
Pour désinstaller l'opérateur du pilote AWS EFS CSI à partir de la console Web :
- Connectez-vous à la console web.
- Arrêtez toutes les applications qui utilisent les PV AWS EFS.
Supprimer tous les PV AWS EFS :
-
Cliquez sur Storage
PersistentVolumeClaims. - Sélectionnez chaque PVC utilisé par l'opérateur du pilote AWS EFS CSI, cliquez sur le menu déroulant à l'extrême droite du PVC, puis sur Delete PersistentVolumeClaims.
-
Cliquez sur Storage
Désinstallez le pilote AWS EFS CSI :
NoteAvant de pouvoir désinstaller l'Opérateur, vous devez d'abord supprimer le pilote CSI.
-
Cliquez sur Administration
CustomResourceDefinitions ClusterCSIDriver. - Dans l'onglet Instances, pour efs.csi.aws.com, à l'extrême gauche, cliquez sur le menu déroulant, puis sur Delete ClusterCSIDriver.
- Lorsque vous y êtes invité, cliquez sur Delete.
-
Cliquez sur Administration
Désinstallez l'opérateur AWS EFS CSI :
-
Cliquez sur Operators
Installed Operators. - Sur la page Installed Operators, faites défiler ou tapez AWS EFS CSI dans la case Search by name pour trouver l'opérateur, puis cliquez dessus.
-
En haut à droite de la page Installed Operators > Operator details, cliquez sur Actions
Uninstall Operator. Lorsque la fenêtre Uninstall Operator vous le demande, cliquez sur le bouton Uninstall pour supprimer l'opérateur de l'espace de noms. Toutes les applications déployées par l'opérateur sur le cluster doivent être nettoyées manuellement.
Après la désinstallation, AWS EFS CSI Driver Operator n'est plus listé dans la section Installed Operators de la console web.
-
Cliquez sur Operators
Avant de pouvoir détruire un cluster (openshift-install destroy cluster
), vous devez supprimer le volume EFS dans AWS. Un cluster OpenShift Container Platform ne peut pas être détruit lorsqu'il y a un volume EFS qui utilise le VPC du cluster. Amazon n'autorise pas la suppression d'un tel VPC.