Añadiendo PersistentVolumeClaim en un espacio de nombres diferente con el error ‘no se pudo aprovisionar el volumen con StorageClass… Falta el parámetro de modo de aprovisionamiento’.
Estoy siguiendo https://docs.aws.amazon.com/eks/latest/userguide/efs-csi.html para vincular EFS a EKS.
Tengo dos espacios de nombres en mis clústeres de k8s: dev
y stage
, y según entiendo, necesitaría tener dos PersistentVolumeClaims que se mapeen al PersistentVolume y StorageClass compartido. Entonces, después de ejecutar los siguientes 3 comandos:
kubectl apply -f specs/pv.yaml
kubectl apply -f specs/claim.yaml
kubectl apply -f specs/storageclass.yaml
y mediante el comando kubectl get sc,pv,pvc1 -n dev
, puedo ver los 3 elementos sin problema. Sin embargo, al intentar agregarlo al espacio de nombres stage
con el comando kubectl apply -f specs/claim.yaml --namespace=stage
, obtengo los siguientes errores ya que efs-claim
queda atascado en un estado PENDING indefinido:
Name: efs-claim
Namespace: stage
StorageClass: efs-sc
Status: Pending
Volume:
Labels: <none>
Annotations: volume.beta.kubernetes.io/storage-provisioner: efs.csi.aws.com
Finalizers: [kubernetes.io/pvc-protection]
Capacity:
Access Modes:
VolumeMode: Filesystem
Used By: foo-api-stage-chart-12345-abcde
foo-api-stage-chart-12345-abcde
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Provisioning 107s efs.csi.aws.com_ip-xxx External provisioner is provisioning volume for claim "stage/efs-claim"
Warning ProvisioningFailed 107s efs.csi.aws.com_ip-xxx failed to provision volume with StorageClass "efs-sc": rpc error: code = InvalidArgument desc = Missing provisioningMode parameter
Normal ExternalProvisioning 4s (x8 over 107s) persistentvolume-controller waiting for a volume to be created, either by external provisioner "efs.csi.aws.com" or manually created by system administrator
¿Qué está causando el error “efs.csi.aws.com_ip-xxx fallo al proporcionar volumen con StorageClass ‘efs-sc’: rpc error: code = InvalidArgument desc = Missing provisioningMode parameter”?
No fue necesario proporcionar dicho parámetro en el espacio de nombres dev
, ¿por qué se requiere para un espacio de nombres diferente como stage
?
davy.ai
El mensaje de error sugiere que falta el parámetro
provisioningMode
al aprovisionar el volumen para elefs-claim
en el espacio de nombresstage
. Este parámetro es requerido por el controlador de Interfaz de Almacenamiento de Contenedor (CSI) de EFS para determinar el modo de aprovisionamiento para el sistema de archivos EFS en el que se debe crear el volumen.Es posible que el parámetro
provisioningMode
se haya proporcionado implícitamente al crear el PersistentVolumeClaim en el espacio de nombresdev
, pero no se está proporcionando en el espacio de nombresstage
, lo que resulta en el error.Para solucionar esto, debes actualizar el archivo
claim.yaml
para el espacio de nombresstage
para incluir el parámetroprovisioningMode
en la sección deparameters
del campospec
, de la siguiente manera:Asegúrate de reemplazar el valor
ProvisionedThroughput
con el valor apropiado para tu caso de uso.Después de actualizar el archivo
claim.yaml
, aplícalo nuevamente con el comandokubectl apply -f specs/claim.yaml --namespace=stage
para crear el PersistentVolumeClaimefs-claim
con el parámetroprovisioningMode
requerido para el espacio de nombresstage
.