Compartir a través de


Errores al montar volúmenes de disco de Azure

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:

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_ZRSy, 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:

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:

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.