Se aplica a: AKS en Azure Local, AKS en Windows Server Use este artículo para ayudarle a solucionar problemas en clústeres de carga de trabajo y administración de Kubernetes en AKS Arc.
La ejecución del comando Remove-ClusterNode expulsa el nodo del clúster de conmutación por error, pero el nodo sigue existiendo.
Al ejecutar el comando Remove-ClusterNode, el nodo se expulsa del clúster de conmutación por error, pero si no se ejecuta posteriormente Remove-AksHciNode, el nodo seguirá existiendo en CloudAgent.
Dado que el nodo se quitó del clúster, pero no de CloudAgent, si usa el disco duro virtual para crear un nuevo nodo, aparece un error "Archivo no encontrado". Este problema se produce porque el disco duro virtual está en almacenamiento compartido y el nodo quitado no tiene acceso a él.
Para resolver este problema, quite un nodo físico del clúster y siga estos pasos:
- Ejecute
Remove-AksHciNode
para anular el registro del nodo desde CloudAgent. - Realice un mantenimiento rutinario, como la creación de una nueva imagen de la máquina.
- Agregar el nodo al clúster.
- Ejecute
Add-AksHciNode
para registrar el nodo con CloudAgent.
Al usar clústeres grandes, el comando Get-AksHciLogs produce un error con una excepción.
Con los clústeres grandes, el comando Get-AksHciLogs
puede generar una excepción, que no se enumeren los nodos o que no se genere el archivo de salida c:\wssd\wssdlogs.zip.
Esto se debe a que el comando de PowerShell para comprimir un archivo, "Comprimir archivo", tiene un límite de tamaño de archivo de salida de 2 GB.
El pod de renovación de certificados está en estado de bucle de bloqueo
Después de actualizar o escalar verticalmente el clúster de cargas de trabajo, el pod de renovación de certificados se encuentra ahora en un estado de bucle de bloqueos ya que el pod espera un archivo YAML cert-tattoo desde la ubicación /etc/Kubernetes/pki
del archivo.
Este problema puede deberse a un archivo de configuración que está presente en las máquinas virtuales del plano de control, pero no en las máquinas virtuales del nodo de trabajo.
Para resolver este problema, copie manualmente el archivo YAML cert-tattoo desde el nodo del plano de control a todos los nodos de trabajo.
- Copie el archivo YAML de la máquina virtual del plano de control en el clúster de cargas de trabajo en el directorio actual de la máquina host:
ssh clouduser@<comtrol-plane-vm-ip> -i (get-mocconfig).sshprivatekey
sudo cp /etc/kubernetes/pki/cert-tattoo-kubelet.yaml ~/
sudo chown clouduser cert-tattoo-kubelet.yaml
sudo chgrp clouduser cert-tattoo-kubelet.yaml
(Change file permissions here, so that `scp` will work)
scp -i (get-mocconfig).sshprivatekey clouduser@<comtrol-plane-vm-ip>:~/cert*.yaml .\
- Copie el archivo YAML de la máquina host en la máquina virtual del nodo de trabajo. Antes de copiar el archivo, debe cambiar el nombre de la máquina en el archivo YAML por el nombre del nodo en el que lo va a copiar (este es el nombre del nodo para el plano de control del clúster de cargas de trabajo).
scp -i (get-mocconfig).sshprivatekey .\cert-tattoo-kubelet.yaml clouduser@<workernode-vm-ip>:~/cert-tattoo-kubelet.yaml
- Si la información de propietario y grupo del archivo YAML aún no está establecida en la raíz, establézcala:
ssh clouduser@<workernode-vm-ip> -i (get-mocconfig).sshprivatekey
sudo cp ~/cert-tattoo-kubelet.yaml /etc/kubernetes/pki/cert-tattoo-kubelet.yaml (copies the certificate file to the correct location)
sudo chown root cert-tattoo-kubelet.yaml
sudo chgrp root cert-tattoo-kubelet.yaml
- Repita los pasos 2 y 3 con todos los nodos de trabajo.
La implementación de PowerShell no comprueba si hay memoria disponible antes de crear un nuevo clúster de cargas de trabajo
Los comandos Aks-Hci de PowerShell no validan la memoria disponible en el servidor host antes de crear los nodos de Kubernetes. Este problema puede dar lugar al agotamiento de la memoria y a que no se inicien las máquinas virtuales.
Actualmente, este error no se controla de manera correcta, por lo que la implementación dejará de responder sin ningún mensaje de error claro. Si la implementación deja de responder, abra el Visor de eventos y busque un mensaje de error relacionado con Hyper-V que indique que no hay suficiente memoria para iniciar la VM.
Al ejecutar Get-AksHciCluster, se produce un error de "versión no encontrada"
Al ejecutar Get-AksHciCluster para comprobar el estado de una instalación de AKS Arc en Windows Admin Center, la salida muestra un error: "No se encontró una versión con la versión 1.0.3.10818". Sin embargo, al ejecutar Get-AksHciVersion, mostró que se instaló la misma versión. Este error indica que la compilación ha expirado.
Para resolver este problema, ejecute Uninstall-AksHci
y, a continuación, ejecute una nueva compilación de AKS Arc.
El traslado de máquinas virtuales entre nodos de clúster local de Azure conduce rápidamente a errores de inicio de la máquina virtual
Al usar la herramienta de administración del clúster para mover una máquina virtual de un nodo (nodo A) a otro nodo (nodo B) en el clúster local de Azure, es posible que la máquina virtual no se inicie en el nuevo nodo. Después de mover la máquina virtual de nuevo al nodo original, esta no se inicia allí.
Este problema se produce porque la lógica para limpiar la primera migración se ejecuta de forma asincrónica. Como resultado, la lógica de "actualización de la ubicación de la máquina virtual" de Azure Kubernetes Service busca la máquina virtual en la instancia original de Hyper-V en el nodo A y la elimina, en lugar de anular su registro.
Para solucionar este problema, asegúrese de que la máquina virtual se ha iniciado correctamente en el nuevo nodo antes de volver a trasladarla al nodo original.
Error al intentar aumentar el número de nodos de trabajo
Al usar PowerShell para crear un clúster con direcciones IP estáticas y, a continuación, intentar aumentar el número de nodos de trabajo en el clúster de carga de trabajo, la instalación se bloquea en "recuento del plano de control en 2, todavía esperando el estado deseado: 3". Después de un período de tiempo, aparece otro mensaje de error: "Error: tiempo de espera agotado en espera de la condición".
Cuando se ejecutó Get-AksHciCluster, se mostró que los nodos del plano de control se crearon y aprovisionaron y estaban en estado Listo. Sin embargo, cuando se ejecutó kubectl get nodes
, se mostró que los nodos del plano de control se habían creado, pero no aprovisionado y no estaban en estado Listo.
Si recibe este error, compruebe que las direcciones IP se hayan asignado a los nodos creados mediante el Administrador de Hyper-V o PowerShell:
(Get-VM |Get-VMNetworkAdapter).IPAddresses |fl
A continuación, compruebe la configuración de red para asegurarse de que quedan suficientes direcciones IP en el grupo para crear más VM.
Error: Debe iniciar sesión en el servidor (no autorizado)
Los comandos como Update-AksHci
, Update-AksHciCertificates
, Update-AksHciClusterCertificates
y todas las interacciones con el clúster de administración pueden devolver "Error: debe iniciar sesión en el servidor (no autorizado)."
Este error puede producirse cuando el archivo kubeconfig ha expirado. Para comprobar si ha expirado, ejecute el siguiente script:
$kubeconfig= $(get-kvaconfig).kubeconfig
$certDataRegex = '(?ms).*client-certificate-data:\s*(?<CertData>[^\n\r]+)'
$certDataMatch = Select-String -Path $kubeconfig -Pattern $certDataRegex
$certData = $certDataMatch.Matches[0].Groups['CertData'].Value
$certObject = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$certObject.Import([System.Convert]::FromBase64String($certData))
$expiryDate = $certObject.GetExpirationDateString()
$expiryDate
Si este script muestra una fecha anterior a la fecha actual, el archivo kubeconfig ha expirado.
Para mitigar el problema, copie el archivo admin.conf , que está dentro de la máquina virtual del plano de control de administración, en el host local de Azure:
SSH a la máquina virtual del plano de control de administración:
Obtenga la dirección IP de máquina virtual del plano de control de administración:
get-clusternode | % {Get-vm -computerName $_ } | get-vmnetworkadapter | select Name, IPAddresses
SSH en él:
ssh -o StrictHostKeyChecking=no -i (Get-MocConfig).sshPrivateKey clouduser@<mgmt-control-plane-ip>
Copie el archivo en la ubicación clouduser :
cp /etc/kubernetes/admin.conf /home/clouduser/admin.conf
Conceder acceso a clouduser:
sudo chown clouduser:clouduser admin.conf
[Opcional] Cree una copia de seguridad del archivo kubeconfig :
mv $(Get-KvaConfig).kubeconfig "$((Get-KvaConfig).kubeconfig).backup"
Copie el archivo:
scp -i (get-mocconfig).sshPrivateKey clouduser@10.64.92.14:~/admin.conf $(Get-KvaConfig).kubeconfig
El administrador de Hyper-V muestra altas demandas de CPU o memoria para el clúster de administración (host de AKS)
Cuando comprueba el administrador de Hyper-V, las demandas de CPU y memoria elevadas para el clúster de administración se pueden omitir de forma segura. Están relacionados con picos en el uso de los recursos de proceso al aprovisionar clústeres de cargas de trabajo.
Aumentar la memoria o el tamaño de la CPU para el clúster de administración no ha mostrado una mejora significativa y se puede omitir de forma segura.
Al usar kubectl para eliminar un nodo, es posible que la máquina virtual asociada no se elimine.
Verá este problema si sigue los pasos a continuación:
- Cree un clúster de Kubernetes.
- Escale el clúster a más de dos nodos.
- Ejecute el siguiente comando para eliminar un nodo:
kubectl delete node <node-name>
- Ejecute el siguiente comando para devolver una lista de nodos:
kubectl get nodes
El nodo eliminado no aparece en la salida. 5. Abra una ventana de PowerShell con privilegios administrativos y ejecute el siguiente comando:
get-vm
El nodo eliminado todavía aparece en la lista.
Este error hace que el sistema no reconozca que falta el nodo y, por tanto, no se pondrá en marcha un nuevo nodo.
Si no se usa un clúster de administración o carga de trabajo durante más de 60 días, los certificados expirarán.
Si no usa un clúster de administración o carga de trabajo durante más de 60 días, los certificados expiran y debe renovarlos para poder actualizar AKS Arc. Cuando un clúster de AKS no se actualiza en un plazo de 60 días, el token del complemento KMS y los certificados expiran en los 60 días. El clúster sigue funcionando. Sin embargo, dado que supera los 60 días, debe llamar al soporte técnico de Microsoft para actualizar. Si el clúster se reinicia después de este período, permanecerá en un estado no funcional.
Para resolver el problema, siga estos pasos:
- Repare el certificado de clúster de administración girando manualmente el token y, a continuación, reinicie el complemento y el contenedor de KMS.
- Para reparar los certificados
mocctl
, ejecuteRepair-MocLogin
. - Repare los certificados de clúster de carga de trabajo girando manualmente el token y, a continuación, reinicie el complemento y el contenedor de KMS.
No se encuentra el clúster de carga de trabajo
Es posible que no se encuentre el clúster de cargas de trabajo si los grupos de direcciones IP de dos implementaciones de AKS en Azure Local son iguales o se superponen. Si implementa dos hosts de AKS y usa la misma configuración de AksHciNetworkSetting
para ambos, es posible que PowerShell y Windows no puedan encontrar el clúster de carga de trabajo, ya que el servidor de API tendrá asignada la misma dirección IP en ambos clústeres, lo que provocará un conflicto.
El mensaje de error que recibirá tendrá un aspecto similar al del ejemplo que se muestra a continuación.
A workload cluster with the name 'clustergroup-management' was not found.
At C:\Program Files\WindowsPowerShell\Modules\Kva\0.2.23\Common.psm1:3083 char:9
+ throw $("A workload cluster with the name '$Name' was not fou ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : OperationStopped: (A workload clus... was not found.:String) [], RuntimeException
+ FullyQualifiedErrorId : A workload cluster with the name 'clustergroup-management' was not found.
Nota:
El nombre del clúster será diferente.
New-AksHciCluster agota el tiempo de espera al crear un clúster de AKS con 200 nodos
La implementación de un clúster grande puede agotar el tiempo de espera después de dos horas. Sin embargo, se trata de un tiempo de espera estático.
Puede omitir esta repetición de tiempo de espera, ya que la operación se está ejecutando en segundo plano. Use el comando kubectl get nodes
para acceder al clúster y supervisar el progreso.
El servidor de API no responde después de varios días
Al intentar abrir una implementación de AKS en Azure Local después de unos días, Kubectl
no se ejecutó ninguno de sus comandos. El Servicio de administración de claves (KMS) del complemento muestra el mensaje de error rpc error:code = Unauthenticated desc = Valid Token Required_. After running [Repair-AksHciCerts](./reference/ps/repair-akshcicerts.md) to try to fix the issue, a different error appeared: _failed to repair cluster certificates
.
Se produce un error en el cmdlet Repair-AksHciClusterCerts si el servidor de API está fuera de servicio. Si AKS en Azure Local no se ha actualizado durante 60 o más días, al intentar reiniciar el complemento KMS, no se iniciará. Este error también provoca un error en el servidor de API.
Para corregir este problema, debe rotar manualmente el token y, a continuación, reiniciar el complemento y el contenedor de KMS para obtener la copia de seguridad del servidor de API. Para ello, ejecute los pasos siguientes:
Para rotar el token, ejecute el siguiente comando:
$ mocctl.exe security identity rotate --name "KMSPlugin-<cluster-name>-moc-kms-plugin" --encode=false --cloudFqdn (Get-AksHciConfig).Moc.cloudfqdn > cloudlogin.yaml
Copie el token en la máquina virtual con el siguiente comando. La configuración
ip
del comando siguiente hace referencia a la dirección IP del plano de control del host de AKS.$ scp -i (Get-AksHciConfig).Moc.sshPrivateKey .\cloudlogin.yaml clouduser@<ip>:~/cloudlogin.yaml $ ssh -i (Get-AksHciConfig).Moc.sshPrivateKey clouduser@<ip> sudo mv cloudlogin.yaml /opt/wssd/k8s/cloudlogin.yaml
Reinicie el complemento y el contenedor de KMS.
Para obtener el identificador del contenedor, ejecute el siguiente comando:
$ ssh -i (Get-AksHciConfig).Moc.sshPrivateKey clouduser@<ip> "sudo docker container ls | grep 'kms'"
La salida debe tener los campos siguientes:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
La salida debería tener un aspecto similar a este ejemplo:
4169c10c9712 f111078dbbe1 "/kms-plugin" 22 minutes ago Up 22 minutes k8s_kms-plugin_kms-plugin-moc-lll6bm1plaa_kube-system_d4544572743e024431874e6ba7a9203b_1
Finalmente, ejecute el comando siguiente para reiniciar el contenedor:
$ ssh -i (Get-AksHciConfig).Moc.sshPrivateKey clouduser@<ip> "sudo docker container kill <Container ID>"
Se produce un error al crear un clúster de carga de trabajo con el error "No se encuentra un parámetro que coincida con el nombre de parámetro nodePoolName".
En una instalación de AKS en Azure Local con la versión 1.82.0 de la extensión de Windows Admin Center, el clúster de administración se configuró mediante PowerShell y se intentó implementar un clúster de cargas de trabajo mediante Windows Admin Center. Una de las máquinas tenía instalada la versión 1.0.2 del módulo de PowerShell y las demás tenían instalado el módulo de PowerShell 1.1.3. Error al intentar implementar el clúster de carga de trabajo con el error "No se encuentra un parámetro que coincida con el nombre de parámetro 'nodePoolName'". Este error puede haberse producido debido a una falta de coincidencia de versión. A partir de la versión 1.1.0 de PowerShell, el parámetro -nodePoolName <String>
se agregó al cmdlet New-AksHciCluster y, por diseño, este parámetro es ahora obligatorio al usar la versión 1.82.0 de la extensión de Windows Admin Center.
Para solucionar este problema, realice una de las acciones siguientes:
- Use PowerShell para actualizar manualmente el clúster de carga de trabajo a la versión 1.1.0 o posterior.
- Use Windows Admin Center para actualizar el clúster a la versión 1.1.0 o a la versión más reciente de PowerShell.
Este problema no se produce si el clúster de administración se implementa mediante Windows Admin Center, ya que ya tiene instalados los módulos de PowerShell más recientes.
Al ejecutar "kubectl get pods", los pods estaban bloqueados en un estado de "terminación".
Al implementar AKS en Azure Local y, a continuación, ejecutar kubectl get pods
, los pods del mismo nodo se bloquean en el estado Terminación . La máquina rechaza las conexiones SSH porque es probable que el nodo experimente una gran demanda de memoria. Este problema se produce porque los nodos de Windows están aprovisionados en exceso y no hay ninguna reserva para los componentes principales.
Para evitar esta situación, agregue los límites de recursos y las solicitudes de recursos para la CPU y memoria a la especificación del pod para asegurarse de que los nodos no se aprovisionen en exceso. Los nodos de Windows no admiten la expulsión en función de los límites de recursos, por lo que deberá calcular cuánto usarán los contenedores y, a continuación, asegurarse de que los nodos tienen cantidades suficientes de CPU y memoria. Para obtener más información, consulte los requisitos del sistema.
Se produce un error en el escalado automático del clúster
Se puede producir un error en el escalado automático del clúster cuando se usa la siguiente directiva de Azure en el clúster de administración de hosts de AKS: "Los clústeres de Kubernetes no deben usar el espacio de nombres predeterminado". Esto sucede porque la directiva, cuando se implementa en el clúster de administración de hosts de AKS, bloquea la creación de perfiles de escalador automático en el espacio de nombres predeterminado. Para corregir este problema, elija una de las siguientes opciones:
- Desinstale la extensión de Azure Policy en el clúster de administración de hosts de AKS. Obtenga más información sobre cómo desinstalar las extensiones de Azure Policy aquí.
- Cambie el ámbito de la directiva de Azure para excluir clústeres de administración de hosts de AKS. Obtenga más información sobre los ámbitos de Azure Policy aquí.
- Establezca el modo de cumplimiento de directivas en "Deshabilitado" para el clúster de administración de hosts de AKS. Obtenga más información sobre el modo de cumplimiento aquí.
Al crear un clúster de carga de trabajo, se produce el error "Error: rpc error: code = DeadlineExceeded desc = context deadline exceeded"
Se trata de un problema conocido con AKS en la actualización local de julio de Azure (versión 1.0.2.10723). El error se produce porque el servicio CloudAgent tiene un tiempo de espera durante la distribución de máquinas virtuales entre varios volúmenes compartidos de clúster en el sistema.
Para resolver este problema, debe actualizar a la versión más reciente de AKS en Azure Local.
No se puede ver el recuento de nodos de Windows o Linux cuando se ejecuta Get-AksHciCluster
Si aprovisiona un clúster de AKS en Azure Local con cero nodos Linux o Windows, al ejecutar Get-AksHciCluster, la salida será una cadena vacía o un valor NULO.
Null es una devolución esperada para cero nodos.
Si un clúster se cierra durante más de cuatro días, el clúster no será accesible.
Al apagar un clúster de administración o carga de trabajo durante más de cuatro días, los certificados expiran y no se puede acceder al clúster. Los certificados expiran porque se rotan cada 3-4 días por motivos de seguridad.
Para reiniciar el clúster, debe reparar manualmente los certificados para poder realizar cualquier operación de clúster. Para reparar los certificados, ejecute el siguiente comando Repair-AksHciClusterCerts:
Repair-AksHciClusterCerts -Name <cluster-name> -fixKubeletCredentials
Las máquinas virtuales Linux y Windows no estaban configuradas como máquinas virtuales de alta disponibilidad al escalar un clúster de cargas de trabajo
Al escalar horizontalmente un clúster de cargas de trabajo, las máquinas virtuales Linux y Windows correspondientes se agregaron como nodos de trabajo, pero no se configuraron como máquinas virtuales de alta disponibilidad. Al ejecutar el comando Get-ClusterGroup, la máquina virtual Linux recién creada no se configuró como un grupo de clústeres.
Este es un problema conocido. Después de un reinicio, a veces se pierde la capacidad de configurar máquinas virtuales como de alta disponibilidad. La solución alternativa actual es reiniciar wssdagent
en cada uno de los nodos locales de Azure.
Esto solo funciona para las nuevas máquinas virtuales que se generan mediante la creación de grupos de nodos al realizar una operación de escalado horizontal o al crear nuevos clústeres de Kubernetes después de reiniciar en wssdagent
los nodos. Sin embargo, tendrá que agregar manualmente las máquinas virtuales existentes al clúster de conmutación por error.
Al reducir verticalmente un clúster, los recursos de clúster de alta disponibilidad se encuentran en un estado de error mientras se quitan las máquinas virtuales. La solución a este problema es eliminar manualmente los recursos con errores.
Error al intentar crear nuevos clústeres de carga de trabajo porque el host de AKS se desactivó durante varios días
Anteriormente, un clúster de AKS implementado en una máquina virtual de Azure funcionaba correctamente, pero después de que el host de AKS se desactivara durante varios días, el Kubectl
comando no funcionaba. Después de ejecutar el comando Kubectl get nodes
o Kubectl get services
, apareció este mensaje de error: Error from server (InternalError): an error on the server ("") has prevented the request from succeeding
.
Este problema se produjo porque el host de AKS se desactivó durante más de cuatro días, lo que ha provocado que los certificados expiren. Los certificados se rotan con frecuencia en un ciclo de cuatro días. Ejecute Repair-AksHciClusterCerts para corregir el problema de expiración de certificados.
En un clúster de cargas de trabajo con direcciones IP estáticas, todos los pods de un nodo se bloquean en un estado _ContainerCreating_
En un clúster de cargas de trabajo con direcciones IP estáticas y nodos de Windows, todos los pods de un nodo (incluidos los daemonset
pods) se bloquean en un estado ContainerCreating . Al intentar conectarse a ese nodo mediante SSH, se produce un Connection timed out
error en la conexión.
Para resolver este problema, use el Administrador de Hyper-V o el Administrador de clústeres de conmutación por error para desactivar la máquina virtual de ese nodo. Después de 5 a 10 minutos, se debe volver a crear el nodo, con todos los pods en ejecución.
ContainerD no puede extraer la imagen de pausa porque "kubelet" recopila erróneamente la imagen.
Cuando kubelet está bajo presión de disco, recopila imágenes de contenedor sin usar, que pueden incluir pausar imágenes y, cuando esto sucede, ContainerD no puede extraer la imagen.
Para resolver el problema, siga estos pasos:
- Conéctese al nodo afectado mediante SSH y ejecute el siguiente comando:
sudo su
- Para extraer la imagen, ejecute el siguiente comando:
crictl pull ecpacr.azurecr.io/kube-proxy:<Kubernetes version>