Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este artículo se proporcionan soluciones para errores que provocan un error en el montaje de volúmenes de discos de Azure.
Síntomas
Está intentando desplegar un recurso de Kubernetes, como un Deployment o un StatefulSet, en un entorno de Azure Kubernetes Service (AKS). La implementación crea un pod que debe montar persistentVolumeClaim (PVC) que hace referencia a un disco de Azure.
Sin embargo, el pod permanece en el estado ContainerCreating. Al ejecutar el kubectl describe pods
comando, es posible que vea uno de los siguientes errores que provocan un error en la operación de montaje:
- No se puede conectar el disco a la VM porque no está en la misma zona que la VM
- El cliente "<client-ID>" con el identificador de objeto "<object-ID>" no tiene autorización para realizar la acción a través del ámbito "<nombre> del disco" o el ámbito no es válido
- El volumen ya está siendo usado por el pod
- StorageAccountType UltraSSD_LRS solo se puede usar cuando additionalCapabilities.ultraSSDEnabled está configurado
- Error en ApplyFSGroup para vol
- Los nodos superan el número máximo de volúmenes
Consulte las secciones siguientes para obtener detalles sobre errores, posibles causas y soluciones.
No se puede conectar el disco a la VM porque no está en la misma zona que la VM
Estos son los detalles del error:
AttachVolume.Attach failed for volume "<disk/PV name>":
rpc error:
code = Unknown
desc = Attach volume "/subscriptions/<subscription-ID>/resourceGroups/<disk-resource-group>/providers/Microsoft.Compute/disks/<disk/PV name>" to instance "<AKS node name>" failed with Retriable: false, RetryAfter: 0s, HTTPStatusCode: 400,
RawError:
{
"error":
{
"code": "BadRequest",
"message": "Disk /subscriptions/<subscription-ID>/resourceGroups/<disk-resource-group>/providers/Microsoft.Compute/disks/<disk/PV name > cannot be attached to the VM because it is not in the same zone as the VM. VM zone: 'X'. Disk zone: 'Y'. "
}
}
Causa: El pod de hospedaje de discos y nodos se encuentra en zonas diferentes
En AKS, las clases de almacenamiento predeterminadas y otras integradas para discos de Azure usan almacenamiento con redundancia local (LRS). Estos discos se implementan en zonas de disponibilidad. Si usa el grupo de nodos en AKS junto con las zonas de disponibilidad y el pod está programado en un nodo que se encuentra en otra zona de disponibilidad diferente del disco, podría experimentar este error.
Para resolver este error, use una de las siguientes soluciones.
Solución 1: Asegurarse de que el disco y el nodo que hospedan el pod están en la misma zona
Para asegurarse de que el disco y el nodo que hospedan el pod están en la misma zona de disponibilidad, use afinidad de nodo.
Vea el siguiente script como ejemplo:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: topology.disk.csi.azure.com/zone
operator: In
values:
- <region>-Y
<region> es la región del clúster de AKS.
Y
representa la zona de disponibilidad del disco (por ejemplo, westeurope-3).
Solución 2: Uso de discos de almacenamiento con redundancia de zona (ZRS)
Los volúmenes de discos ZRS se pueden programar en todos los nodos de agente de zona y nodos fuera de zona. Para más información, consulte Compatibilidad con la zona de disponibilidad de discos de Azure.
Para usar un disco ZRS, cree una clase de almacenamiento mediante Premium_ZRS
o StandardSSD_ZRS
y, a continuación, implemente persistentVolumeClaim (PVC) que haga referencia al almacenamiento.
Para obtener más información sobre los parámetros, consulte Parámetros del controlador.
Solución 3: Uso de Azure Files
Azure Files se monta mediante NFS o SMB en toda la red. No está asociado a zonas de disponibilidad.
Para más información, consulte los siguientes artículos:
- Creación dinámica de un recurso compartido de Azure Files
- Creación manual del recurso compartido de Azure Files
El cliente "<client-ID>" con el identificador de objeto "<object-ID>" no tiene autorización para realizar la acción a través del ámbito "<nombre> del disco" o el ámbito no es válido
Estos son los detalles del error:
AttachVolume.Attach failed for volume "pv-azuredisk":
rpc error: code = NotFound
desc = Volume not found, failed with error: Retriable: false, RetryAfter: 0s, HTTPStatusCode: 403,
RawError:
{
"error":
{"code":"AuthorizationFailed",
"message":"The client '<client-ID>' with object id '<object-ID>' does not have authorization to perform action 'Microsoft.Compute/disks/read' over scope '/subscriptions/<subscription-ID>/resourceGroups/<disk-resource-group>/providers/Microsoft.Compute/disks/<disk name>' or the scope is invalid. If access was recently granted, please refresh your credentials."
}
}
Causa: La identidad de AKS no tiene la autorización necesaria sobre el disco
La identidad del clúster de AKS no tiene la autorización necesaria sobre el disco de Azure. Este problema se produce si el disco se crea en un grupo de recursos distinto del grupo de recursos de infraestructura del clúster de AKS.
Solución: Cree una asignación de roles que incluya la autorización necesaria
Cree una asignación de roles que incluya la autorización necesaria según el error. Se recomienda usar un rol de Colaborador. Si quiere usar otro rol integrado, consulte Roles integrados de Azure.
Para asignar un rol de Colaborador, use uno de los siguientes métodos:
Utilice el comando az role assignment create.
Este es un ejemplo:
az role assignment create --assignee <AKS-identity-ID> --role "Contributor" --scope /subscriptions/<subscription-ID>/resourceGroups/<disk-resource-group>/providers/Microsoft.Compute/disks/<disk name>
Uso de Azure Portal
Consulte los pasos detallados que se presentan en Asignación de roles de Azure mediante Azure Portal para asignar un rol de Colaborador. Si asigna el rol de Colaborador a una identidad administrada, use la identidad del plano de control para administrar discos de Azure.
El volumen ya está siendo utilizado por el pod.
Estos son los detalles del error:
Error de acoplamiento múltiple para el volumen "<PV/nombre de disco>" El volumen ya está siendo utilizado por los pods <nombre del pod>
Causa: El disco se monta en varios pods (unidades de procesamiento) hospedados en nodos diferentes
Un disco de Azure solo se puede montar como ReadWriteOnce. Esto hace que esté disponible para un nodo en AKS. Esto significa que solo se puede adjuntar a un nodo y montarlo en un pod hospedado por ese nodo. Si monta el mismo disco en un pod en otro nodo, se produce este error porque el disco ya está conectado a un nodo.
Solución: Asegúrese de que el disco no esté montado por varios pods hospedados en distintos nodos.
Para resolver este error, consulte Error de múltiples conexiones.
Si tiene que compartir un volumen persistente (PersistentVolume) entre varios nodos, use Azure Files.
El tipo de cuenta de almacenamiento UltraSSD_LRS se puede usar solo cuando se activa additionalCapabilities.ultraSSDEnabled.
Estos son los detalles del error:
AttachVolume.Attach failed for volume "<Disk/PV name>" :
rpc error:
code = Unknown
desc = Attach volume "/subscriptions/<subscription-ID>/resourceGroups/<disk-resource-group>/providers/Microsoft.Compute/disks/<disk/PV name>" to instance "<AKS node name>" failed with Retriable: false, RetryAfter: 0s, HTTPStatusCode: 400, RawError:
{
"error":
{"code": "InvalidParameter",
"message": "StorageAccountType UltraSSD_LRS can be used only when additionalCapabilities.ultraSSDEnabled is set.",
"target": "managedDisk.storageAccountType"
}
}
Causa: El disco ultra está conectado al grupo de nodos con discos ultra deshabilitados
Este error indica que un disco Ultra está intentando estar conectado a un grupo de nodos al tener deshabilitados los discos Ultra. De manera predeterminada, un disco ultra está deshabilitado en grupos de nodos de AKS.
Solución: Cree un grupo de nodos que pueda usar discos ultra
Para usar discos Ultra en AKS, cree un grupo de nodos compatible con discos Ultra mediante la --enable-ultra-ssd
marca . Para más información, consulte Uso de discos ultra de Azure en Azure Kubernetes Service.
Error en ApplyFSGroup para volumen
Estos son los detalles del error:
Error de MountVolume.SetUp para el volumen "<PV/disk-name>": applyFSGroup falló para el volumen /subscriptions/<subscriptionID>/resourceGroups/<infra/disk-resource-group>/providers/Microsoft.Compute/disks/<PV/disk-name>: [...]: error de entrada/salida
Causa: se tarda mucho en realizar el cambio de propiedad y permisos en volúmenes grandes
Si ya hay muchos archivos presentes en el volumen y, si existe un securityContext
que usa fsGroup
, puede producirse este error. Si hay muchos archivos y directorios en un volumen, cambiar el identificador de grupo consumiría un tiempo excesivo. Además, la documentación oficial de Kubernetes Configurar la política de cambio de permisos y propiedad de volúmenes para Pods menciona esta situación:
"De manera predeterminada, Kubernetes cambia recursivamente la propiedad y los permisos para que el contenido de cada volumen coincida con el fsGroup
especificado en el securityContext
de un Pod cuando se monta ese volumen. En el caso de grandes volúmenes, la comprobación y el cambio de propiedad y permisos pueden tardar mucho tiempo, lo que ralentiza el inicio del Pod. Puede usar el campo fsGroupChangePolicy
dentro de securityContext
para controlar la forma en que Kubernetes comprueba y administra la propiedad y los permisos de un volumen".
Solución: establezca el campo fsGroupChangePolicy en OnRootMismatch
Para resolver este error, recomendamos establecer fsGroupChangePolicy: "OnRootMismatch"
en el securityContext
de una implementación, un StatefulSet o un pod.
OnRootMismatch: cambie los permisos y las propiedades solo si los permisos y las propiedades del directorio raíz no coinciden con los permisos esperados del volumen. Esta configuración podría ayudar a acortar el tiempo necesario para cambiar la propiedad y el permiso de un volumen.
Para más información, consulte Configuración de la directiva de cambios de propiedad y permisos de volúmenes en Pods.
El(los) nodo(s) superan la cantidad máxima de volúmenes
Estos son los detalles del error:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 25s default-scheduler 0/8 nodes are available: 8 node(s) exceed max volume count. preemption: 0/8 nodes are available: 8 No preemption victims found for incoming pod..
Causa: Se alcanza el límite máximo de disco
El nodo ha alcanzado su capacidad máxima de disco. En AKS, el número de discos por nodo depende del tamaño de máquina virtual configurado para el grupo de nodos.
Solución
Para resolver el problema, use uno de los métodos siguientes:
- Agregue un nuevo grupo de nodos con un tamaño de máquina virtual que admita más límite de disco.
- Escale el grupo de nodos.
- Elimine los discos existentes del nodo.
Además, asegúrese de que el número de discos por nodo no supera los límites predeterminados de Kubernetes.
Más información
Para más problemas conocidos de Azure Disk, consulte Problemas conocidos del complemento de disco de Azure.
Ponte en contacto con nosotros para obtener ayuda
Si tiene preguntas o necesita ayuda, cree una solicitud de soporte o busque consejo en la comunidad de Azure. También puede enviar comentarios del producto a la comunidad de comentarios de Azure.