El controlador de interfaz de almacenamiento de contenedores (CSI) de Amazon Elastic File System implementa la especificación CSI para que los orquestadores de contenedores administren el ciclo de vida de los sistemas de archivos de Amazon EFS.
Controlador CSI de Amazon EFS Versión de especificación CSI | v0.3.0 | v1.1.0 | v1.2.0 |
---|---|---|---|
rama maestra | No | No | Sí |
v2.xx | No | No | Sí |
v1.xx | No | No | Sí |
v0.3.0 | No | Sí | No |
v0.2.0 | No | Sí | No |
v0.1.0 | Sí | No | No |
El controlador CSI de Amazon EFS admite el aprovisionamiento dinámico y el aprovisionamiento estático. Actualmente, Dynamic Provisioning crea un punto de acceso para cada PV. Esto significa que primero se debe crear manualmente un sistema de archivos de Amazon EFS en AWS y se debe proporcionar como entrada para el parámetro de clase de almacenamiento. Para el aprovisionamiento estático, primero se debe crear manualmente el sistema de archivos de Amazon EFS en AWS. Después de eso, se puede montar dentro de un contenedor como un volumen usando el controlador.
Se implementan las siguientes interfaces CSI:
Parámetros | Valores | Por defecto | Opcional | Descripción |
---|---|---|---|---|
modo de aprovisionamiento | efs-ap | FALSO | Tipo de volumen provisionado por efs. Actualmente, se admiten puntos de acceso. | |
fileSystemId | FALSO | Sistema de archivos bajo el cual se crean los puntos de acceso. | ||
directorioPerms | FALSO | Permisos de directorio para la creación del directorio raíz del punto de acceso. | ||
fluido | verdadero | ID de usuario POSIX que se aplicará para la creación del directorio raíz del punto de acceso. | ||
gimiendo | verdadero | ID de grupo POSIX que se aplicará para la creación del directorio raíz del punto de acceso. | ||
gidRangeInicio | 50000 | verdadero | Rango inicial del ID del grupo POSIX que se aplicará para la creación del directorio raíz del punto de acceso. No se utiliza si se establece uid/gid. | |
gidRangeEnd | 7000000 | verdadero | Rango final del ID del grupo POSIX. No se utiliza si se establece uid/gid. | |
rutabase | verdadero | Ruta bajo la cual se crean puntos de acceso para el aprovisionamiento dinámico. Si no se especifica este parámetro, los puntos de acceso se crean en el directorio raíz del sistema de archivos. | ||
patrón de ruta secundaria | /${.PV.name} | verdadero | La plantilla utilizada para construir la subruta bajo la cual se crea cada uno de los puntos de acceso en el aprovisionamiento dinámico. Puede estar compuesto por cadenas fijas y variables limitadas, es similar a la variable 'subPathPattern' en el gráfico nfs-subdir-external-provisioner. Admite .PVC.name , .PVC.namespace y .PV.name | |
asegurarUniqueDirectory | verdadero | verdadero | NOTA: Establezca esto en falso solo si está seguro de que este es el comportamiento que desea . Se utiliza cuando el aprovisionamiento dinámico está habilitado; si se establece en verdadero, agrega un UID al patrón especificado en subPathPattern para garantizar que los puntos de acceso no apunten accidentalmente al mismo directorio. | |
Arizona | "" | verdadero | Se utiliza para montaje entre cuentas. az en el parámetro de clase de almacenamiento es opcional. Si se especifica, el destino de montaje asociado con el az se usará para el montaje entre cuentas. Si no se especifica, se elegirá un objetivo de montaje aleatorio para el montaje entre cuentas. | |
reutilizar punto de acceso | FALSO | verdadero | Cuando se establece en verdadero, crea el token de cliente del punto de acceso a partir del nombre de PVC proporcionado. Para que AccessPoint pueda replicarse desde un clúster diferente si se utiliza el mismo nombre de PVC y configuración de clase de almacenamiento. |
Nota
gidRangeStart
y gidRangeEnd
. Estos parámetros son opcionales sólo si se omiten ambos. Si especifica uno, el otro se vuelve obligatorio.az
en el parámetro de clase de almacenamiento no debe confundirse con la opción de montaje efs-utils az
. La opción az
mount se utiliza para el montaje cross-az o el montaje del sistema de archivos de una zona efs dentro de la misma cuenta de aws que el clúster.Si desea pasar otras opciones de montaje al controlador CSI de Amazon EFS durante el montaje, se pueden pasar a través de los objetos Volumen persistente o Clase de almacenamiento, dependiendo de si se utiliza aprovisionamiento estático o dinámico. Los siguientes son ejemplos de algunas opciones de montaje que se pueden pasar:
Cuando utilice el controlador EFS CSI, tenga en cuenta que la opción de montaje noresvport
está habilitada de forma predeterminada. Esto significa que el cliente puede utilizar cualquier puerto de origen disponible para la comunicación, no sólo los puertos reservados.
Una de las ventajas de utilizar Amazon EFS es que proporciona soporte de cifrado en tránsito mediante TLS. Al utilizar el cifrado en tránsito, los datos se cifrarán durante su transición a través de la red al servicio Amazon EFS. Esto proporciona una capa adicional de defensa en profundidad para aplicaciones que requieren un estricto cumplimiento de seguridad.
El cifrado en tránsito está habilitado de forma predeterminada en la versión de la rama maestra del controlador. Para deshabilitarlo y montar volúmenes usando NFSv4 simple, configure el campo volumeAttributes
encryptInTransit
en "false"
en su manifiesto de volumen persistente. Para ver un ejemplo de manifiesto, consulte el ejemplo de cifrado en tránsito.
Nota
Se requiere Kubernetes versión 1.13 o posterior si utiliza esta función en Kubernetes.
Las siguientes secciones son específicas de Kubernetes. Si es usuario de Kubernetes, utilice esto para conocer las funciones del controlador, los pasos de instalación y los ejemplos.
Controlador Amazon EFS CSI Versión de Kubernetes | madurez | v1.11 | v1.12 | v1.13 | v1.14 | v1.15 | v1.16 | v1.17+ |
---|---|---|---|---|---|---|---|---|
rama maestra | Georgia | No | No | No | No | No | No | Sí |
v2.1.x | Georgia | No | No | No | No | No | No | Sí |
v2.0.x | Georgia | No | No | No | No | No | No | Sí |
v1.7.x | Georgia | No | No | No | No | No | No | Sí |
v1.6.x | Georgia | No | No | No | No | No | No | Sí |
v1.5.x | Georgia | No | No | No | No | No | No | Sí |
v1.4.x | Georgia | No | No | No | No | No | No | Sí |
v1.3.x | Georgia | No | No | No | No | No | No | Sí |
v1.2.x | Georgia | No | No | No | No | No | No | Sí |
v1.1.x | Georgia | No | No | No | Sí | Sí | Sí | Sí |
v1.0.x | Georgia | No | No | No | Sí | Sí | Sí | Sí |
v0.3.0 | beta | No | No | No | Sí | Sí | Sí | Sí |
v0.2.0 | beta | No | No | No | Sí | Sí | Sí | Sí |
v0.1.0 | alfa | Sí | Sí | Sí | No | No | No | No |
Versión del controlador CSI de Amazon EFS | Imagen |
---|---|
rama maestra | amazon/aws-efs-csi-driver: maestro |
v2.1.0 | amazon/aws-efs-csi-controlador:v2.1.0 |
v2.0.9 | amazon/aws-efs-csi-controlador:v2.0.9 |
v2.0.8 | amazon/aws-efs-csi-controlador:v2.0.8 |
v2.0.7 | amazon/aws-efs-csi-controlador:v2.0.7 |
v2.0.6 | amazon/aws-efs-csi-controlador:v2.0.6 |
v2.0.5 | amazon/aws-efs-csi-controlador:v2.0.5 |
v2.0.4 | amazon/aws-efs-csi-controlador:v2.0.4 |
v2.0.3 | amazon/aws-efs-csi-controlador:v2.0.3 |
v2.0.2 | amazon/aws-efs-csi-controlador:v2.0.2 |
v2.0.1 | amazon/aws-efs-csi-controlador:v2.0.1 |
v2.0.0 | amazon/aws-efs-csi-controlador:v2.0.0 |
v1.7.7 | amazon/aws-efs-csi-controlador:v1.7.7 |
v1.7.6 | amazon/aws-efs-csi-controlador:v1.7.6 |
v1.7.5 | amazon/aws-efs-csi-controlador:v1.7.5 |
v1.7.4 | amazon/aws-efs-csi-controlador:v1.7.4 |
v1.7.3 | amazon/aws-efs-csi-controlador:v1.7.3 |
v1.7.2 | amazon/aws-efs-csi-controlador:v1.7.2 |
v1.7.1 | amazon/aws-efs-csi-controlador:v1.7.1 |
v1.7.0 | amazon/aws-efs-csi-controlador:v1.7.0 |
v1.6.0 | amazon/aws-efs-csi-controlador:v1.6.0 |
v1.5.9 | amazon/aws-efs-csi-controlador:v1.5.9 |
v1.5.8 | amazon/aws-efs-csi-controlador:v1.5.8 |
v1.5.7 | amazon/aws-efs-csi-controlador:v1.5.7 |
v1.5.6 | amazon/aws-efs-csi-controlador:v1.5.6 |
v1.5.5 | amazon/aws-efs-csi-controlador:v1.5.5 |
v1.5.4 | amazon/aws-efs-csi-controlador:v1.5.4 |
v1.5.3 | amazon/aws-efs-csi-controlador:v1.5.3 |
v1.5.2 | amazon/aws-efs-csi-controlador:v1.5.2 |
v1.5.1 | amazon/aws-efs-csi-controlador:v1.5.1 |
v1.5.0 | amazon/aws-efs-csi-controlador:v1.5.0 |
v1.4.9 | amazon/aws-efs-csi-controlador:v1.4.9 |
v1.4.8 | amazon/aws-efs-csi-controlador:v1.4.8 |
v1.4.7 | amazon/aws-efs-csi-controlador:v1.4.7 |
v1.4.6 | amazon/aws-efs-csi-controlador:v1.4.6 |
v1.4.5 | amazon/aws-efs-csi-controlador:v1.4.5 |
v1.4.4 | amazon/aws-efs-csi-controlador:v1.4.4 |
v1.4.3 | amazon/aws-efs-csi-controlador:v1.4.3 |
v1.4.2 | amazon/aws-efs-csi-controlador:v1.4.2 |
v1.4.1 | amazon/aws-efs-csi-controlador:v1.4.1 |
v1.4.0 | amazon/aws-efs-csi-controlador:v1.4.0 |
v1.3.8 | amazon/aws-efs-csi-controlador:v1.3.8 |
v1.3.7 | amazon/aws-efs-csi-controlador:v1.3.7 |
v1.3.6 | amazon/aws-efs-csi-controlador:v1.3.6 |
v1.3.5 | amazon/aws-efs-csi-controlador:v1.3.5 |
v1.3.4 | amazon/aws-efs-csi-controlador:v1.3.4 |
v1.3.3 | amazon/aws-efs-csi-controlador:v1.3.3 |
v1.3.2 | amazon/aws-efs-csi-controlador:v1.3.2 |
v1.3.1 | amazon/aws-efs-csi-controlador:v1.3.1 |
v1.3.0 | amazon/aws-efs-csi-controlador:v1.3.0 |
v1.2.1 | amazon/aws-efs-csi-controlador:v1.2.1 |
v1.2.0 | amazon/aws-efs-csi-controlador:v1.2.0 |
v1.1.1 | amazon/aws-efs-csi-controlador:v1.1.1 |
v1.1.0 | amazon/aws-efs-csi-controlador:v1.1.0 |
v1.0.0 | amazon/aws-efs-csi-controlador:v1.0.0 |
v0.3.0 | amazon/aws-efs-csi-controlador:v0.3.0 |
v0.2.0 | amazon/aws-efs-csi-controlador:v0.2.0 |
v0.1.0 | amazon/aws-efs-csi-controlador:v0.1.0 |
Versión del controlador | Imagen ECR |
---|---|
v2.1.0 | public.ecr.aws/efs-csi-driver/amazon/aws-efs-csi-driver:v2.1.0 |
Nota
Puede encontrar imágenes de versiones anteriores del controlador efs-csi desde aquí
Nota
Dado que Amazon EFS es un sistema de archivos elástico, en realidad no exige ninguna capacidad del sistema de archivos. El valor de la capacidad de almacenamiento real en el volumen persistente y la reclamación de volumen persistente no se utilizan al crear el sistema de archivos. Sin embargo, dado que la capacidad de almacenamiento es un campo obligatorio para Kubernetes, debe especificar el valor y puede utilizar cualquier valor válido para la capacidad.
Consideraciones
1.2
o posterior del controlador. Puede aprovisionar estáticamente volúmenes persistentes utilizando la versión 1.1
del controlador en cualquier versión de clúster de Amazon EKS compatible.1.3.2
o posterior de este controlador admite la arquitectura Arm64, incluidas las instancias basadas en Amazon EC2 Graviton.1.4.2
o posterior de este controlador admite el uso de FIPS para montar sistemas de archivos. Para obtener más información sobre cómo habilitar FIPS, consulte Helm.Existen posibles condiciones de carrera en el inicio del nodo (especialmente cuando un nodo se une por primera vez al clúster) donde los pods/procesos que dependen del controlador EFS CSI pueden actuar en un nodo antes de que el controlador EFS CSI pueda iniciarse y estar completamente listo. Para combatir esto, el controlador EFS CSI contiene una función para eliminar automáticamente una contaminación del nodo al inicio. Esta característica se introdujo a partir de la versión v1.7.2 del controlador EFS CSI y la versión v2.5.2 de su gráfico Helm. Los usuarios pueden dañar sus nodos cuando se unen al clúster y/o durante el inicio, para evitar que otros pods se ejecuten o se programen en el nodo antes de que el controlador EFS CSI esté listo.
Esta característica está activada de forma predeterminada y los administradores de clústeres deben usar taint efs.csi.aws.com/agent-not-ready:NoExecute
(cualquier efecto funcionará, pero se recomienda NoExecute
). Por ejemplo, los grupos de nodos administrados de EKS admiten la contaminación automática de nodos.
Requisitos previos
aws configure
en la Guía del usuario de la interfaz de línea de comandos de AWS. La versión de AWS CLI instalada en AWS CloudShell también puede estar varias versiones por detrás de la última versión. Para actualizarlo, consulte Instalación de AWS CLI en su directorio de inicio en la Guía del usuario de AWS CloudShell.kubectl
está instalada en su dispositivo o en AWS CloudShell. La versión puede ser la misma o hasta una versión menor anterior o posterior a la versión de Kubernetes de su clúster. Para instalar o actualizar kubectl
, consulte Instalación o actualización kubectl
. Nota
Un Pod que se ejecuta en AWS Fargate monta automáticamente un sistema de archivos de Amazon EFS, sin necesidad de seguir los pasos de instalación manual del controlador que se describen en esta página.
El controlador requiere permiso de IAM para comunicarse con Amazon EFS para administrar el volumen en nombre del usuario. Existen varios métodos para otorgar permiso IAM al conductor:
AmazonEFSCSIDriverPolicy
debe agregarse a la función IAM del grupo de nodos del clúster.Hay varias opciones para implementar el controlador. Los siguientes son algunos ejemplos.
Este procedimiento requiere Helm V3 o posterior. Para instalar o actualizar Helm, consulte Uso de Helm con Amazon EKS.
Para instalar el controlador usando Helm
Agregue el repositorio de Helm.
helm repo add aws-efs-csi-driver https://kubernetes-sigs.github.io/aws-efs-csi-driver/
Actualiza el repositorio.
helm repo update aws-efs-csi-driver
Instale una versión del controlador utilizando el gráfico de Helm.
helm upgrade --install aws-efs-csi-driver --namespace kube-system aws-efs-csi-driver/aws-efs-csi-driver
Para especificar un repositorio de imágenes, agregue el siguiente argumento. Reemplace la dirección del repositorio con la dirección de la imagen del contenedor del clúster.
--set image.repository=602401143452.dkr.ecr.region-code.amazonaws.com/eks/aws-efs-csi-driver
Si ya creó una cuenta de servicio siguiendo Crear una política y un rol de IAM para Amazon EKS, agregue los siguientes argumentos.
--set controller.serviceAccount.create=false
--set controller.serviceAccount.name=efs-csi-controller-sa
Si no tiene acceso saliente a Internet, agregue los siguientes argumentos.
--set sidecars.livenessProbe.image.repository=602401143452.dkr.ecr.region-code.amazonaws.com/eks/livenessprobe
--set sidecars.node-driver-registrar.image.repository=602401143452.dkr.ecr.region-code.amazonaws.com/eks/csi-node-driver-registrar
--set sidecars.csiProvisioner.image.repository=602401143452.dkr.ecr.region-code.amazonaws.com/eks/csi-provisioner
Para forzar que el controlador CSI de Amazon EFS utilice FIPS para montar el sistema de archivos, agregue el siguiente argumento.
--set useFips=true
Nota
hostNetwork: true
(debe agregarse en especificaciones/implementación en instalaciones de Kubernetes donde no se puede acceder a los metadatos de AWS desde la red de pods. Para corregir el siguiente error NoCredentialProviders: no valid providers in chain
se debe agregar este parámetro).
Si desea descargar la imagen con un manifiesto, le recomendamos que primero pruebe estos pasos para extraer imágenes seguras del registro privado de Amazon ECR.
Para instalar el controlador utilizando imágenes almacenadas en el registro privado de Amazon ECR
Descarga el manifiesto. Reemplace release-XX
con la rama que desee. Recomendamos utilizar la última versión lanzada. Para obtener una lista de sucursales activas, consulte Sucursales.
kubectl kustomize
" github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/ecr/?ref=release-2.X " > private-ecr-driver.yaml
Nota
Si encuentra un problema que no puede resolver agregando permisos de IAM, pruebe los pasos del Manifiesto (registro público).
En el siguiente comando, reemplace region-code
con la región de AWS en la que se encuentra su clúster. Luego ejecute el comando modificado para reemplazar us-west-2
en el archivo con su región de AWS.
sed -i.bak -e ' s|us-west-2|region-code| ' private-ecr-driver.yaml
Reemplace account
en el siguiente comando con la cuenta de los registros de imágenes de contenedores de Amazon para la región de AWS en la que se encuentra su clúster y luego ejecute el comando modificado para reemplazar 602401143452
en el archivo.
sed -i.bak -e ' s|602401143452|account| ' private-ecr-driver.yaml
Si ya creó una cuenta de servicio siguiendo Crear una política y un rol de IAM para Amazon EKS, edite el archivo private-ecr-driver.yaml
. Elimine las siguientes líneas que crean una cuenta de servicio de Kubernetes.
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app.kubernetes.io/name: aws-efs-csi-driver
name: efs-csi-controller-sa
namespace: kube-system
---
Aplicar el manifiesto.
kubectl apply -f private-ecr-driver.yaml
En algunas situaciones, es posible que no pueda agregar los permisos de IAM necesarios para extraer datos del registro privado de Amazon ECR. Un ejemplo de este escenario es si su entidad principal de IAM no puede autenticarse con la cuenta de otra persona. Cuando esto sea cierto, puede utilizar el registro público de Amazon ECR.
Para instalar el controlador utilizando imágenes almacenadas en el registro público de Amazon ECR
Descarga el manifiesto. Reemplace release-XX
con la rama que desee. Recomendamos utilizar la última versión lanzada. Para obtener una lista de sucursales activas, consulte Sucursales.
kubectl kustomize
" github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-2.X " > public-ecr-driver.yaml
Si ya creó una cuenta de servicio siguiendo Crear una política y un rol de IAM, edite el archivo public-ecr-driver.yaml
. Elimine las siguientes líneas que crean una cuenta de servicio de Kubernetes.
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app.kubernetes.io/name: aws-efs-csi-driver
name: efs-csi-controller-sa
namespace: kube-system
---
Aplicar el manifiesto.
kubectl apply -f public-ecr-driver.yaml
Después de implementar el controlador, puede continuar con estas secciones:
Parámetros | Valores | Por defecto | Opcional | Descripción |
---|---|---|---|---|
inclusión-de-volumen-métricas | FALSO | verdadero | Opte por emitir métricas de volumen. | |
período-de-actualización-de-vol-métricas | 240 | verdadero | Período de actualización de métricas de volumen en minutos. | |
límite-de-tasa-vol-metrics-fs | 5 | verdadero | Limitador de velocidad de rutinas de métricas de volumen por sistema de archivos. |
Al habilitar el parámetro vol-metrics-opt-in se activa la recopilación de datos de uso de inodo y disco. Esta funcionalidad, particularmente en escenarios con sistemas de archivos más grandes, puede resultar en un aumento en el uso de la memoria debido a la agregación detallada de información del sistema de archivos. Aconsejamos a los usuarios con sistemas de archivos de gran escala que consideren este aspecto al utilizar esta función.
Parámetros | Valores | Por defecto | Opcional | Descripción |
---|---|---|---|---|
eliminar-punto-de-acceso-dir-raíz | FALSO | verdadero | Opte por eliminar el directorio raíz del punto de acceso mediante DeleteVolume. De forma predeterminada, DeleteVolume eliminará el punto de acceso detrás del volumen persistente y la eliminación del punto de acceso no eliminará el directorio raíz del punto de acceso ni su contenido. | |
etiquetas | verdadero | Pares clave:valor separados por espacios que se agregarán como etiquetas para los recursos de Amazon EFS. Por ejemplo, '--tags=nombre:efs-tag-test fecha:24 de enero' |
Si desea actualizar a la última versión lanzada:
kubectl apply -k " github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-2.0 "
Si desea actualizar a una versión específica, primero personalice el archivo yaml del controlador localmente:
kubectl kustomize " github.com/kubernetes-sigs/aws-efs-csi-driver/deploy/kubernetes/overlays/stable/?ref=release-2.0 " > driver.yaml
Luego, actualice todas las líneas que hacen referencia image: amazon/aws-efs-csi-driver
a la versión deseada (por ejemplo, a image: amazon/aws-efs-csi-driver:v2.1.0
) en el archivo yaml e implemente el controlador yaml. de nuevo:
kubectl apply -f driver.yaml
Antes de seguir los ejemplos, es necesario:
elasticfilesystem:DescribeMountTargets
y ec2:DescribeAvailabilityZones
en su política adjunta al rol de cuenta de servicio de Amazon EKS; consulte la política de ejemplo aquí. Consulte las especificaciones de CSI y la documentación para desarrolladores de Kubernetes CSI para obtener una comprensión básica del controlador CSI antes de comenzar.
Si está a punto de actualizar el archivo de política de iam, actualice también la política de efs en weaveworks/eksctl https://github.com/weaveworks/eksctl/blob/main/pkg/cfn/builder/statement.go */
Las dependencias se gestionan a través del módulo go. Para construir el proyecto, primero active go mod usando export GO111MODULE=on
, para construir el proyecto ejecute: make
Para ejecutar todas las pruebas unitarias, ejecute: make test
Para extraer registros y solucionar problemas del controlador, consulte solución de problemas/README.md.
Esta biblioteca tiene la licencia Apache 2.0.