Todos los productos
Search
Centro de documentos

Container Service for Kubernetes:Troubleshoot pod issues

Última actualización: Sep 15, 2026

Resuelva errores de programación de pods, fallos al extraer imágenes, cierres inesperados durante el inicio, terminaciones por OOM y problemas en tiempo de ejecución.

Nota

Para solucionar problemas desde la consola (consultar el estado del pod, los eventos y los registros, acceder a las terminales y ejecutar diagnósticos), consulte Common Troubleshooting Procedures.

Procedimiento de diagnóstico rápido

Para diagnosticar un pod con comportamiento anómalo, vaya a la página de detalles del elemento Pods correspondiente. Haga clic en la pestaña Events para revisar las descripciones de los eventos anómalos. Después, haga clic en la pestaña Logs para comprobar si hay registros anómalos recientes.

Pod en estado Pending

Si un pod muestra el estado Unschedulable en Status Details, o aparece un evento FailedScheduling en Events, vaya a Nodes > Nodes para comprobar el estado de salud y los niveles de recursos (CPU y memoria) de los nodos. Compruebe también si las reglas de afinidad del pod (nodeSelector y nodeAffinity) y sus tolerancias son demasiado restrictivas. Consulte Scheduling issues.

Fallo al extraer la imagen (ImagePullBackOff/ErrImagePull)

En la página de detalles de Pods, vaya a la pestaña Container y compruebe la dirección de Image. Inicie sesión en el nodo del pod y ejecute crictl pull <image-address> o curl -v https://<image-address> para comprobar la conectividad de red con el repositorio de imágenes. En la esquina superior derecha, haga clic en Edit YAML y compruebe que el Secret especificado en el campo spec.imagePullSecrets de la carga de trabajo existe y es válido. Para continuar con la solución de problemas, consulte image pulling issues.

El pod no inicia (CrashLoopBackOff)

La aplicación se cierra de forma inesperada y se reinicia de manera repetida. En la página de detalles de Pods, haga clic en la pestaña Logs y seleccione Show the log of the last container exit para ver la causa del error. Para continuar con la solución de problemas, consulte Troubleshoot pod startup failures.

El pod está en ejecución pero no listo

La prueba de disponibilidad del pod falló. En la página Edit de la carga de trabajo Workloads correspondiente, compruebe que la ruta de la solicitud de comprobación de estado (por ejemplo, /healthz) y el puerto coinciden con los que proporciona la aplicación. Para continuar con la solución de problemas, consulte The pod is Running but not ready (Ready: False).

Deshabilite temporalmente la comprobación de estado. Luego, use curl desde la terminal del pod o desde el nodo host para comprobar que el endpoint responde correctamente.

El pod presenta OOMKilled

En la página de detalles de Pods, haga clic en la pestaña Logs y seleccione Show the log of the last container exit para ver los registros de OOM. Compruebe si la aplicación tiene una fuga de memoria o un error de falta de memoria (OOM). En aplicaciones Java, optimice el parámetro -Xmx. Ajuste el límite de recursos de memoria de la aplicación (resources.limits.memory) según sea necesario. Para continuar con la solución de problemas, consulte OOMKilled.

Si se configuró una prueba de actividad, el pod permanece en el estado OOMKilled solo por un breve periodo antes de reiniciarse automáticamente.

Flujo de trabajo de diagnóstico

Para diagnosticar un pod con comportamiento anómalo, inspeccione sus eventos, registros y configuración.

Flujo de trabajo de solución de problemas

image

Fase 1: Problemas de programación

Pod no programado en un nodo

Si un pod permanece en el estado Pending durante un periodo prolongado, significa que no se programó en ningún nodo.

Mensaje de error

Descripción

Solución

no nodes available to schedule pods.

El clúster no tiene nodos disponibles para programar el pod.

  1. Compruebe si algún nodo del clúster está en estado NotReady. Si un nodo está en NotReady, inspecciónelo y repárelo.

  2. Compruebe si el pod define un nodeSelector, nodeAffinity o tolerancias a taints. Si no se definieron estas restricciones de programación, considere agregar más nodos al node pool.

  • 0/x nodes are available: x Insufficient cpu.

  • 0/x nodes are available: x Insufficient memory.

Ningún nodo disponible en el clúster satisface las solicitudes de CPU o memoria del pod.

Un nodo no permite programación cuando el total de requests asignados alcanza su capacidad, incluso si la utilización real es baja.

En la página de detalles del clúster correspondiente, vaya a Nodes > Nodes y compruebe la tasa de asignación de requests de CPU o memoria del nodo correspondiente. Pase el cursor sobre la tasa de asignación para ver los valores específicos de asignación de recursos.

Request allocation

Para ver el uso detallado de recursos del nodo, consulte Use kubectl to view node resource usage.

  • Optimice la configuración de recursos:

  • Elimine las cargas de trabajo innecesarias: dé de baja o reduzca los pods que no sean esenciales.

  • Escale horizontalmente el node pool: si el uso de recursos en los nodos correspondientes es constantemente alto, los nodos están saturados. Puede scale out the node pool.

x node(s) didn't match pod's node affinity/selector.

Los nodos existentes no coinciden con la política de afinidad de nodo del pod (nodeAffinity/nodeSelector). Consulte Assigning Pods to Nodes.

  1. Consulte todas las etiquetas de un nodo.

    Console

    1. En la página de detalles del clúster correspondiente, vaya a Nodes > Nodes.

    2. En la página Nodes, busque el nodo correspondiente y, en la columna Actions, haga clic en More > Manage Labels and Taints para ver sus etiquetas.

    Kubectl

    Reemplace <YOUR_NODE_NAME> con el nombre real de su nodo.

    kubectl get node <YOUR_NODE_NAME> --show-labels
  2. Compruebe y ajuste la regla de afinidad de nodo de la carga de trabajo (deployment).

    Console

    Al crear una nueva carga de trabajo:

    1. En la página Advanced para crear un Deployment (Create), busque Node Affinity en la sección Scheduling y haga clic en Add.

    2. Configure Required (afinidad estricta) u Optional (afinidad flexible) según sus necesidades de negocio. Varios elementos Selector tienen una relación lógica AND, mientras que varios elementos Rule tienen una relación lógica OR.

    Para cargas de trabajo existentes:

    1. En la página Nodes > Nodes, haga clic en image > Node Affinity en la columna Actions del Deployment correspondiente.

    2. El método de configuración es el mismo que se describió anteriormente.

    Ejemplo de YAML

    NodeAffinity

    Las políticas de afinidad incluyen la afinidad estricta (requiredDuringSchedulingIgnoredDuringExecution), que debe cumplirse, y la afinidad flexible (preferredDuringSchedulingIgnoredDuringExecution), que expresa una preferencia. A continuación se muestra un ejemplo con afinidad estricta.

    apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: app-demo-node-affinity-deploy
          labels:
            app: demo-node-affinity
        spec:
          replicas: 2
          selector:
            matchLabels:
              app: demo-node-affinity
          template:
            metadata:
              labels:
                app: demo-node-affinity
            spec:
              containers:
              - name: nginx
                image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
              affinity:
                nodeAffinity:
                  # Hard affinity: The rule must be met.
                  requiredDuringSchedulingIgnoredDuringExecution:
                    nodeSelectorTerms:
                    - matchExpressions:
                      - key: disktype
                        operator: In
                        values:
                        - ssd
                        - nvme  # Logic: The node's 'disktype' label must be either 'ssd' or 'nvme'.

    NodeSelector

    Proporciona una coincidencia exacta simple. El pod se programa únicamente si las etiquetas del nodo cumplen las condiciones.

    apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: app-demo-node-selector-deploy
          labels:
            app: demo-node-selector
        spec:
          replicas: 2  
          selector:
            matchLabels:
              app: demo-node-selector  
          template:
            metadata:
              labels:
                app: demo-node-selector
            spec:
              containers:
              - name: nginx
                image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
              # The pod is scheduled only if the node has the label disktype=ssd.
              nodeSelector:
                disktype: ssd
  • x node(s) didn't match pod affinity rules.

  • x node(s) didn't match pod anti-affinity rules.

  • Desajuste en la regla de afinidad. El pod tiene una regla de pod affinity (por ejemplo, requiere una etiqueta específica), pero ningún nodo aloja un pod con esa etiqueta, lo que impide la programación.

  • Conflicto de antiafinidad. El pod tiene una regla de pod anti-affinity (por ejemplo, no puede coexistir con otra aplicación), pero todos los nodos disponibles ya alojan un pod en conflicto, lo que impide la programación.

  1. Consulte las etiquetas de los pods en un nodo.

    Console

    1. En la página de detalles del clúster correspondiente, vaya a Nodes > Nodes.

    2. En la página Nodes, haga clic en el nombre del nodo correspondiente para ver su página de detalles. Desplácese hasta la sección Pods para ver los valores de etiqueta de distintos pods en la columna Label.

    Kubectl

    • Consulte los pods y sus etiquetas en un nodo específico: reemplace <YOUR_NAMESPACE> con el nombre de su namespace y <YOUR_NODE_NAME> con el nombre real de su nodo.

      kubectl get pods -n <YOUR_NAMESPACE> --field-selector spec.nodeName=<YOUR_NODE_NAME> -o custom-columns=NAME:.metadata.name,LABELS:.metadata.labels
    • Consulte pods por etiqueta: reemplace <LABEL> con el par clave-valor real de la etiqueta, como app=nginx.

      kubectl get pods -A -l <LABEL> -o wide
  2. Compruebe y ajuste la regla de afinidad de pod de la carga de trabajo (deployment).

    Console

    1. Cuando cree una nueva carga de trabajo, en la página Advanced de creación de un Deployment (Create), busque Pod Affinity/Pod Anti-affinity en la sección Scheduling y haga clic en Add.

    2. Configure Required (afinidad estricta) u Optional (afinidad flexible) según sus necesidades de negocio. Varios elementos Selector tienen una relación lógica AND, mientras que varios elementos Add Rule tienen una relación lógica OR.

    Ejemplo de YAML

    Las políticas de afinidad se clasifican en afinidad estricta (requiredDuringSchedulingIgnoredDuringExecution) y afinidad flexible (preferredDuringSchedulingIgnoredDuringExecution). Las reglas de afinidad estricta deben cumplirse, mientras que las de afinidad flexible son preferentes. A continuación se muestra un ejemplo de configuración para una pod affinity obligatoria.

    Para configurar una antiafinidad de pod, simplemente reemplace podAffinity por podAntiAffinity.

    apiVersion: apps/v1
        kind: Deployment
        metadata:
          name: app-demo-podaffinity-deploy
        spec:
          replicas: 2
          selector:
            matchLabels:
              app: demo-podaffinity
          template:
            metadata:
              labels:
                app: demo-podaffinity
            spec:
              containers:
              - name: nginx
                image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
              affinity:
                podAffinity:
                  # Hard affinity: Pod must be co-located with a pod that has the 'app: nginx' label.
                  requiredDuringSchedulingIgnoredDuringExecution:
                  - labelSelector:
                      matchExpressions:
                      - key: app
                        operator: In
                        values:
                        - nginx
                    # Topology domain scope: host-level isolation.
                    topologyKey: kubernetes.io/hostname

0/x nodes are available: x node(s) had volume node affinity conflict.

La programación falla debido a un conflicto de afinidad de nodo del volumen. Esto suele ocurrir porque un disco en la nube no se puede montar en zonas distintas.

  • Para un PV aprovisionado de forma estática, configure la afinidad de nodo del pod para asegurar que se programe en un nodo de la misma zona que el PV.

  • Para un PV aprovisionado de forma dinámica, establezca el volumeBindingMode de StorageClass en WaitForFirstConsumer. Así se garantiza que el PV se cree únicamente después de programar el pod en un nodo, lo que asegura que el disco en la nube se cree en la misma zona que el nodo del pod.

InvalidInstanceType.NotSupportDiskCategory

La instancia ECS no es compatible con el tipo de disco en la nube especificado.

Consulte Instance families para confirmar los tipos de disco en la nube compatibles con su instancia ECS. Al montar, actualice el tipo de disco en la nube a uno que admita la instancia ECS.

0/x nodes are available: x node(s) had taints that the pod didn't tolerate.

El pod no se puede programar en un nodo porque le falta una tolerancia para uno de los taints del nodo.

  • Si el taint se agregó manualmente, elimínelo o configure una tolerancia para el pod. Consulte Taints and Tolerations y Manage node labels and taints.

  • Si el sistema agregó el taint, resuelva el problema subyacente que se indica a continuación y espere a que se reprograme.

    Ver los taints agregados por el sistema

    • node.kubernetes.io/not-ready: el nodo está en estado NotReady.

    • node.kubernetes.io/unreachable: el controlador de nodos no puede alcanzar el nodo. Equivale a que el estado Ready del nodo sea Unknown.

    • node.kubernetes.io/memory-pressure: el nodo tiene presión de memoria.

    • node.kubernetes.io/disk-pressure: el nodo tiene presión de disco.

    • node.kubernetes.io/pid-pressure: el nodo tiene presión de PID.

    • node.kubernetes.io/network-unavailable: la red del nodo no está disponible.

    • node.kubernetes.io/unschedulable: el nodo está marcado como no programable.

0/x nodes are available: x Insufficient ephemeral-storage.

El nodo no tiene suficiente almacenamiento efímero.

  1. Compruebe la solicitud de almacenamiento efímero del pod, que corresponde al valor de spec.containers.resources.requests.ephemeral-storage en el YAML del pod. Si el valor es demasiado alto y supera la capacidad real disponible del nodo, el pod no se programará.

  2. Compruebe la capacidad total de almacenamiento efímero de cada nodo con kubectl describe node | grep -A10 Capacity. Si es insuficiente, amplíe el disco del nodo o agregue más nodos.

0/x nodes are available: pod has unbound immediate persistent volume claims.

El pod no logró vincularse a una persistent volume claim (PVC).

Compruebe si se creó la PVC o el PV que especifica el pod. Ejecute kubectl describe pvc <pvc-name> o kubectl describe pv <pv-name> para ver los eventos de la PVC y del PV, y continuar con el diagnóstico. Consulte Storage FAQ - CSI.

El pod se programó pero permanece en Pending

Si un pod ya se programó pero sigue en Pending, siga estos pasos.

  1. Si un pod usa hostPort, solo se puede ejecutar un pod con ese hostPort por nodo. Por lo tanto, hostPort limita el recuento de Replicas a la cantidad de nodos. Si el puerto ya está en uso, la programación falla.

    El uso de hostPort aumenta la complejidad de la programación. Use un Service para exponer los pods.

  2. Si el pod no se configuró con hostPort, siga los pasos a continuación para solucionar el problema.

    1. Consulte los eventos del pod con kubectl describe pod <pod-name>. Entre las causas comunes se encuentran los fallos al extraer imágenes, la falta de recursos, las restricciones de políticas de seguridad y los errores de configuración.

    2. Si no encuentra eventos útiles, compruebe los registros de kubelet en el nodo con grep -i <pod name> /var/log/messages* | less.

Fase 2: Problemas al descargar imágenes

ImagePullBackOff o ErrImagePull

Si el estado de un pod es ImagePullBackOff o ErrImagePull, significa que la descarga de la imagen falló. Revise los eventos del pod para identificar la causa.

Mensaje de error

Descripción

Solución sugerida

Failed to pull image "xxx": rpc error: code = Unknown desc = Error response from daemon: Get xxx: denied:

Se denegó el acceso al repositorio de imágenes porque no se especificó un elemento imagePullSecret al crear el pod.

Compruebe que exista el Secret indicado en el campo spec.imagePullSecrets del archivo YAML de la carga de trabajo.

Si utiliza ACR, emplee un asistente de credenciales para descargar imágenes sin contraseña. Consulte Pull images from the same account.

Failed to pull image "xxxx:xxx": rpc error: code = Unknown desc = Error response from daemon: Get https://xxxxxx/xxxxx/: dial tcp: lookup xxxxxxx.xxxxx: no such host

No se pudo resolver la dirección del repositorio de imágenes durante una descarga por HTTPS.

  1. Compruebe que la dirección del repositorio de imágenes en spec.containers.image del archivo YAML del pod sea correcta. Si no lo es, actualícela.

  2. Si la dirección es correcta, compruebe la conectividad de red desde el nodo donde se ejecuta el pod hacia el repositorio de imágenes. Inicie sesión en el nodo (para más información, consulte Choose an ECS remote connection method) y ejecute el comando curl -kv https://xxxxxx/xxxxx/ para comprobar si puede acceder a la dirección. Si ocurre un error, investigue posibles problemas de red, como una configuración de red incorrecta, reglas de firewall o problemas de resolución DNS.

Failed create pod sandbox: rpc error: code = Unknown desc = failed to create a sandbox for pod "xxxxxxxxx": Error response from daemon: mkdir xxxxx: no space left on device

El nodo no tiene suficiente espacio en disco.

Inicie sesión en el nodo (consulte Choose an ECS remote connection method) y ejecute df -h para revisar el espacio en disco. Si el disco está lleno, cambie su tamaño. Consulte Step 1: Resize a cloud disk.

Failed to pull image "xxx": rpc error: code = Unknown desc = error pulling image configuration: xxx x509: certificate signed by unknown authority

El repositorio de imágenes de terceros usa un certificado firmado por una autoridad certificadora (CA) desconocida o insegura.

  1. El repositorio de terceros debe usar un certificado emitido por una CA de confianza.

  2. Si utiliza un repositorio de imágenes privado, consulte Create an application from a private image repository.

  3. Si no puede cambiar el certificado, configure el nodo para permitir la descarga y el envío de imágenes desde un repositorio que use un certificado inseguro. Se recomienda usar este método solo en entornos de prueba, ya que podría afectar a otros pods del nodo.

Ver los pasos detallados

Console

Procedimiento

Los cambios no afectan a los contenedores en ejecución. Ejecute esta operación fuera del horario de mayor demanda.

  1. Inicie sesión en la ACK console. En el panel de navegación izquierdo, haga clic en Clusters.

  2. En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Nodes > Node Pools.

  3. En la página Node Pools, busque el node pool deseado y, en su columna Actions, elija image > Containerd Configuration.

  4. Agregue parámetros, especifique los nodos de destino, establezca la política por lotes y haga clic en Submit.

    Consulte Configuration examples.
    • Al eliminar un custom runtime parameter, este vuelve a su valor predeterminado.

    • La configuración se aplica a los nodos por lotes. Supervise el progreso en el área Event Records, donde también puede pausar, reanudar o cancelar la actualización. Si la actualización de un nodo falla, solucione el problema y haga clic en Continue para reintentarlo.

      Pausar le permite validar los cambios en los nodos actualizados. Los nodos en proceso terminan, pero las nuevas actualizaciones esperan hasta que usted reanude la tarea. Complete la tarea con prontitud, ya que las tareas pausadas se cancelan automáticamente después de siete días y se eliminan todos sus registros y logs.

Ejemplos de configuración

Espejo para docker.io

Registro privado inseguro

Registro privado HTTP

En Registry mirrors, establezca Image registry en docker.io, Registry mirror en la dirección del espejo (por ejemplo, https://example.com) y override_path en false.

En Insecure registries, introduzca la dirección del registro en Image registry (formato: IP address:Port, por ejemplo, 192.xxx.xxx.xxx:443) y establezca skip_verify en true.

En Registry mirrors, establezca Image registry en la dirección del registro privado (por ejemplo, 192.xxx.1), Registry mirror en su dirección HTTP (por ejemplo, http://192.xxx.1) y override_path en false. Haga clic en + Add para agregar más asignaciones.

CLI

  1. Cree un directorio de certificados para que containerd almacene los archivos de configuración de certificados de repositorios de imágenes específicos.

    mkdir -p /etc/containerd/cert.d/xxxxx
  2. Configure containerd para que confíe en un repositorio de imágenes inseguro específico.

    cat << EOF > /etc/containerd/cert.d/xxxxx/hosts.toml
           server = "https://harbor.test-cri.com"
           [host."https://harbor.test-cri.com"]
             capabilities = ["pull", "resolve", "push"]
             skip_verify = true
             # ca = "/opt/ssl/ca.crt"  # Or upload a CA certificate
           EOF
  3. Modifique la configuración del daemon de Docker para agregar el repositorio inseguro.

    vi /etc/docker/daemon.json

    Agregue el siguiente contenido. Reemplace your-insecure-registry con la dirección de su repositorio privado.

       {
             "insecure-registries": ["your-insecure-registry"]
           }
  4. Reinicie el servicio containerd para que los cambios surtan efecto.

    systemctl restart containerd

Failed to pull image "XXX": rpc error: code = Unknown desc = context canceled

La operación se canceló, posiblemente porque el archivo de imagen es demasiado grande. Kubernetes tiene un tiempo de espera predeterminado para descargar imágenes. Si la descarga no avanza durante un periodo determinado, Kubernetes asume que la operación falló o no responde, y cancela la tarea.

  1. Compruebe que imagePullPolicy esté establecido en IfNotPresent en el archivo YAML del pod.

  2. Inicie sesión en el nodo donde se ejecuta el pod (para más información, consulte Choose an ECS remote connection method) y ejecute docker pull o crictl pull para comprobar si se puede descargar la imagen.

Failed to pull image "xxxxx": rpc error: code = Unknown desc = Error response from daemon: Get https://xxxxxxx: xxxxx/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

No se puede conectar al repositorio de imágenes debido a problemas de red.

  1. Inicie sesión en el nodo donde se ejecuta el pod (para más información, consulte Choose an ECS remote connection method) y ejecute el comando curl https://xxxxxx/xxxxx/ para comprobar si puede acceder a la dirección. Si ocurre un error, investigue posibles problemas de red, como una configuración de red incorrecta, reglas de firewall o problemas de resolución DNS.

  2. Compruebe la política de red pública del nodo, incluidas las configuraciones de las entradas SNAT y las direcciones IP elásticas (EIP) vinculadas.

Failed to pull image "xxxx:xxx": failed to pull and unpack image "xxxx:xxx": failed to resolve reference "xxxx:xxx": failed to do request: Head "xxxx:xxx": dial tcp xxx.xxx.xx.x:xxx: i/o timeout

La conexión agotó el tiempo de espera por problemas de red al descargar una imagen desde un repositorio en el extranjero.

Las descargas de imágenes desde repositorios en el extranjero, como Docker Hub, pueden fallar en los clústeres ACK debido a la inestabilidad de las redes de los proveedores. Para solucionarlo, considere las siguientes opciones:

Too Many Requests.

Docker Hub impone límites de velocidad a las solicitudes de descarga de imágenes.

Cargue la imagen en Container Registry (ACR) y descárguela desde un repositorio de imágenes de ACR.

El estado Pulling image se muestra de forma continua

Es posible que se haya activado el mecanismo de limitación de velocidad de descarga de imágenes del kubelet.

Ajuste registryPullQPS (QPS máximo para el repositorio de imágenes) y registryBurst (número máximo de descargas simultáneas de imágenes) con la función Customize node pool kubelet configurations.

Fase 3: Problemas de inicio

El pod está en estado Init

Mensaje de error

Descripción

Solución

Atascado en el estado Init:N/M

El pod tiene M contenedores init; N finalizaron, pero los M-N restantes no pudieron iniciarse.

  1. Revise los eventos del pod y los problemas de los contenedores init con kubectl describe pod -n <ns> <pod name>.

  2. Revise los registros de los contenedores init que no se iniciaron con kubectl logs -n <ns> <pod name> -c <container name>.

  3. Revise la configuración del pod, como los ajustes de comprobación de estado, para asegurarse de que los contenedores init estén configurados correctamente.

Consulte Depurar contenedores init.

Atascado en el estado Init:Error

Un contenedor init del pod no pudo iniciarse.

Atascado en el estado Init:CrashLoopBackOff

Un contenedor init del pod no pudo iniciarse y se encuentra en un bucle de reinicio.

El pod está en estado Creating

Mensaje de error

Descripción

Solución

failed to allocate for range 0: no IP addresses available in range set: xx.xxx.xx.xx-xx.xx.xx.xx

Este comportamiento es esperado debido al diseño del plugin de red Flannel.

Actualice el componente Flannel a la versión v0.15.1.11-7e95fe23-aliyun o posterior. Consulte Flannel.

En clústeres con una versión de Kubernetes anterior a la 1.20, puede producirse una fuga de direcciones IP si un pod se reinicia repetidamente o si los pods de un CronJob terminan sus tareas y salen rápidamente.

Actualice el clúster a Kubernetes 1.20 o posterior (se recomienda la más reciente). Consulte Manually upgrade a cluster.

Defectos en containerd y runC provocan este problema.

Para aplicar una corrección de emergencia, consulte Why does my pod fail to start with the error "no IP addresses available in range"?

error parse config, can't found dev by mac 00:16:3e:01:c2:e8: not found

El plugin de red Terway mantiene una base de datos interna en el nodo para rastrear y gestionar las interfaces de red elásticas (ENI). Este error ocurre cuando el estado de la base de datos no coincide con la configuración real del dispositivo de red, lo que provoca que falle la asignación de ENI.

  1. Las interfaces de red se cargan de forma asíncrona. Es posible que la interfaz aún se esté cargando durante la configuración de CNI, lo que activa un reintento automático de CNI. Este proceso no afecta la asignación final de ENI. Compruebe el estado final del pod para confirmar que fue exitoso.

  2. Si la creación del pod sigue fallando y este error persiste, es probable que el controlador no haya podido cargar la ENI por falta de memoria de orden superior. Restart the ECS instance para solucionarlo.

  • cmdAdd: error alloc ip rpc error: code = DeadlineExceeded desc = context deadline exceeded

  • cmdAdd: error alloc ip rpc error: code = Unknown desc = error wait pod eni info, timed out waiting for the condition

Es posible que el plugin de red Terway no haya podido solicitar una dirección IP al vSwitch.

  1. Consulte los registros del contenedor Terway dentro del pod del componente Terway en el nodo para revisar el proceso de asignación de ENI.

  2. Consulte la información de ENI del pod de Terway con kubectl logs -n kube-system <terwayPodName > -c terway | grep <podName>. Obtenga el Request ID y el mensaje de error de OpenAPI.

  3. Use el Request ID y el mensaje de error para investigar la causa del fallo.

El pod no se inicia (CrashLoopBackOff)

Mensaje de error

Descripción

Solución

El registro contiene exit(0).

  1. Inicie sesión en el nodo donde se despliega la carga de trabajo con errores.

  2. Use docker ps -a | grep $podName para comprobarlo. Si el contenedor no tiene un proceso persistente, sale con el código de estado 0.

Los eventos del pod muestran Liveness probe failed: ....

La comprobación de actividad falló, lo que provocó el reinicio de la aplicación.

  • Configuración de la comprobación de actividad: en la página Edit de la carga de trabajo (Workloads) de destino, compruebe que la ruta de solicitud de la comprobación de estado (por ejemplo, /healthz) y el puerto coincidan con los que proporciona la aplicación. Aumente Initial Delay (s) para garantizar que la comprobación de actividad comience solo después de que la aplicación se haya iniciado por completo.

    Puede deshabilitar temporalmente Liveness. Luego, acceda a la terminal del pod o a su nodo host y use un comando, como curl, para comprobar que el método de comprobación de estado funciona correctamente.
  • Solucione los problemas de la aplicación: investigue el problema revisando los elementos Events y Logs del pod. Seleccione Show the log of the last container exit.

Los eventos del pod muestran Startup probe failed: ....

La comprobación de inicio falló, lo que provocó el reinicio de la aplicación.

  • Configuración de la comprobación de inicio: en la página Edit de la carga de trabajo (Workloads) de destino, compruebe que la ruta de solicitud de la comprobación de estado (por ejemplo, /healthz) y el puerto coincidan con los que proporciona la aplicación. Si la aplicación tarda mucho en iniciar, aumente Unhealthy Threshold para evitar reinicios prematuros.

    Puede deshabilitar temporalmente Startup. Luego, acceda a la terminal del pod o a su nodo host y use un comando, como curl, para comprobar que el método de comprobación de estado funciona correctamente.
  • Solucione los problemas de la aplicación: investigue el problema revisando los elementos Events y Logs del pod. Seleccione Show the log of the last container exit.

El registro del pod contiene no space left on device.

Espacio insuficiente en el disco en la nube.

  • Resize the cloud disk.

  • Elimine las imágenes innecesarias para liberar espacio en disco y configure imageGCHighThresholdPercent para establecer el umbral de recolección de basura de imágenes en el nodo.

El inicio falla sin información de eventos.

Este problema ocurre cuando un contenedor requiere más recursos que los límites declarados, lo que provoca su fallo.

Compruebe si la configuración de recursos del pod es correcta. Puede habilitar resource profiling para obtener las configuraciones recomendadas de Request y Limit del contenedor.

El registro del pod muestra Address already in use.

Existe un conflicto de puertos entre los contenedores del mismo pod.

  1. Compruebe si el pod está configurado con hostNetwork: true. Esta configuración hace que los contenedores del pod compartan el espacio de nombres de red y el espacio de puertos del host. Si no es necesario, cámbielo a hostNetwork: false.

  2. Si el pod requiere hostNetwork: true, configure la antiafinidad de pods para asegurar que los pods del mismo conjunto de réplicas se programen en nodos distintos.

  3. Compruebe que ningún otro pod del mismo nodo esté usando el puerto.

El registro del pod muestra container init caused "setenv: invalid argument": unknown.

La carga de trabajo monta un Secret, pero el valor del Secret no está codificado en Base64.

  • Cree el Secret en la consola (los valores se codifican automáticamente en Base64). Consulte Manage Secrets.

  • Cree el Secret desde un archivo YAML y codifique manualmente el valor en Base64 ejecutando el comando echo -n "xxxxx" | base64.

Problema específico de la aplicación.

Revise los registros del pod para solucionar el problema.

El pod está Running pero no listo (Ready: False)

Mensaje de error

Descripción

Solución

image Los eventos del pod muestran Readiness probe failed: ....

La comprobación de disponibilidad falló, lo que impide que el pod de destino reciba tráfico.

  • Configuración de la comprobación de disponibilidad: en la página Edit de la carga de trabajo (Workloads) de destino, compruebe que la ruta de comprobación de estado (por ejemplo, /healthz) y el puerto coincidan con los de la aplicación. Si la aplicación inicia lentamente, aumente Unhealthy Threshold para evitar fallos prematuros.

    Deshabilite temporalmente Readiness y luego use curl desde la terminal del pod o del host para comprobar el endpoint de la comprobación de estado.
  • Solucione los problemas de la aplicación: investigue el problema revisando los elementos Events y Logs del pod. Seleccione Show the log of the last container exit.

El estado del pod es el mismo que el anterior. Los eventos del pod muestran Startup probe failed: ....

Una comprobación de inicio fallida provoca el reinicio del contenedor. Este error no debería generar un estado persistente de Running/NotReady, sino un estado CrashLoopBackOff.

Solucione este problema tal como se describe en la sección "El pod no se inicia (CrashLoopBackOff)" para las comprobaciones de tipo Startup.

Fase 4: Problemas de ejecución de pods

OOMKilled

Cuando un contenedor supera su límite de memoria, se finaliza mediante un OOM kill. Consulte Asignar recursos de memoria a contenedores y pods.

  • Si el proceso finalizado es el proceso principal del contenedor, este podría reiniciarse de forma inesperada.

  • Cuando ocurre un evento OOM, aparece en la pestaña Events de la página de detalles del pod en la consola. Por ejemplo: pod was OOM killed. node:XXX pod:XXX namespace:XXX.

  • Configure un container replica exception alert para recibir notificaciones de OOM.

Nivel de OOM

Descripción

Solución recomendada

Nivel del sistema operativo

Revise el registro del kernel en /var/log/messages del nodo donde se ejecuta el pod. Si el registro muestra un proceso finalizado pero no contiene registros de cgroup, el evento OOM ocurrió en el nivel del sistema operativo.

Nivel de cgroup

Revise el registro del kernel en /var/log/messages del nodo donde se ejecuta el pod. Si el registro contiene un mensaje de error similar a Task in /kubepods.slice/xxxxx killed as a result of limit of /kubepods.slice/xxxx, el evento OOM ocurrió en el nivel de cgroup.

  • Aumente los límites de memoria del pod. Mantenga el uso real por debajo del 80 % de los límites. Consulte Manage Pods y Scale node resources.

  • Habilite resource profiling para obtener configuraciones recomendadas de solicitudes y límites del contenedor.

Consulte Causes and solutions for OOM Killer.

Terminating

Causa posible

Descripción

Solución recomendada

El nodo se encuentra en estado NotReady.

El pod se elimina automáticamente después de que el nodo se recupera del estado NotReady.

El pod tiene finalizers configurados.

Si un pod tiene finalizers configurados, Kubernetes ejecuta las operaciones de limpieza especificadas por estos antes de eliminarlo. Si una operación de limpieza no responde, el pod permanece en estado Terminating.

Compruebe la configuración de finalizers del pod con kubectl get pod -n <ns> <pod name> -o yaml e investigue la causa.

El hook preStop del pod no es válido o está bloqueado.

Si el pod tiene configurado un hook preStop, Kubernetes lo ejecuta antes de finalizar el contenedor. El pod permanece en estado Terminating mientras el hook se ejecuta.

Compruebe la configuración del hook preStop del pod con kubectl get pod -n <ns> <pod name> -o yaml e investigue la causa.

El pod tiene configurado un periodo de apagado controlado.

Si un pod tiene configurado un periodo de apagado controlado (terminationGracePeriodSeconds), entra en estado Terminating después de recibir un comando de finalización, como kubectl delete pod <pod_name>. Kubernetes considera que el pod se apagó correctamente solo cuando transcurre el tiempo especificado en terminationGracePeriodSeconds o cuando el contenedor termina.

Kubernetes elimina automáticamente el pod después de que el contenedor completa el apagado controlado.

El contenedor no responde.

Cuando usted solicita detener o eliminar un pod, Kubernetes envía una señal SIGTERM a los contenedores del pod. Si un contenedor no procesa correctamente la señal SIGTERM durante la finalización, el pod podría permanecer en estado Terminating.

  1. Elimine el pod de forma forzada con kubectl delete pod <pod-name> --grace-period=0 --force.

  2. Revise los registros de containerd o Docker en el nodo del pod para continuar la investigación.

Evicted

Causa posible

Descripción

Solución recomendada

El nodo presenta presión de recursos debido a factores como el uso de memoria o de disco.

Es posible que el nodo experimente presión de memoria, de disco o de PID.

  • Compruebe los taints del nodo con kubectl describe node <node name> | grep Taints. La salida podría incluir:

    • Presión de memoria: el nodo tiene el taint node.kubernetes.io/memory-pressure.

    • Presión de disco: el nodo tiene el taint node.kubernetes.io/disk-pressure.

    • Presión de PID: el nodo tiene el taint node.kubernetes.io/pid-pressure.

  • El estado del pod es uno de los siguientes:

    • Evicted

    • ContainerStatusUnknown, y el campo reason en el archivo YAML del pod muestra Evicted.

Ocurre una expulsión inesperada.

Un taint NoExecute agregado manualmente en el nodo del pod provocó una expulsión inesperada.

Compruebe si existe un taint NoExecute con kubectl describe node <node name> | grep Taints. Si existe, elimínelo.

La expulsión no avanza como se esperaba.

  • --pod-eviction-timeout: los pods de un nodo con errores se expulsan después de este periodo de tiempo de espera. El valor predeterminado es 5 minutos.

  • --node-eviction-rate: la cantidad de pods que se expulsan de un nodo por segundo. El valor predeterminado es 0.1, lo que significa que se expulsa como máximo un pod de un nodo cada 10 segundos.

  • --secondary-node-eviction-rate: la tasa secundaria de expulsión de nodos. Si demasiados nodos de un clúster presentan errores, la tasa de expulsión se reduce a este valor. El valor predeterminado es 0.01.

  • --unhealthy-zone-threshold: el umbral de zona de disponibilidad con estado incorrecto. El valor predeterminado es 0.55. Cuando la fracción de nodos con errores en una zona de disponibilidad supera este umbral, la zona se considera en estado incorrecto.

  • --large-cluster-size-threshold: el umbral de tamaño de clúster grande. El valor predeterminado es 50. Un clúster se considera grande cuando tiene más de 50 nodos.

En un clúster pequeño (50 nodos o menos), si más del 55 % de los nodos presentan errores, la expulsión de pods se detiene. Consulte Límites de velocidad en la expulsión.

En un clúster grande (más de 50 nodos), si la fracción de nodos con estado incorrecto supera el valor de --unhealthy-zone-threshold (valor predeterminado 0.55), la tasa de expulsión disminuye a --secondary-node-eviction-rate (valor predeterminado 0.01 pods por segundo). Consulte Límites de velocidad en la expulsión.

Un pod se reprograma frecuentemente en su nodo original después de ser expulsado.

El kubelet expulsa pods según el uso real de recursos, mientras que el programador los ubica según las solicitudes de recursos. Como una expulsión libera recursos, el programador podría reprogramar un pod en el mismo nodo si sus solicitudes aún caben.

Ajuste las solicitudes de recursos del pod para que coincidan con los recursos asignables del nodo. Consulte Set CPU and memory resources for a container. Habilite resource profiling para obtener valores recomendados de solicitudes y límites.

Completed

Todos los contenedores terminaron correctamente. Este comportamiento es común en trabajos y contenedores init.

Preguntas frecuentes

El pod se está ejecutando pero no funciona

Los errores en YAML pueden provocar que un pod entre en estado Running pero no funcione.

  1. Compruebe la configuración del contenedor en los ajustes del pod.

  2. Utilice los métodos a continuación para buscar errores ortográficos en su configuración YAML.

    Si una clave YAML está mal escrita (por ejemplo, command como commnd), el clúster crea el recurso sin errores, pero no puede ejecutar la clave mal escrita durante la ejecución.

    El siguiente ejemplo, en el que command está mal escrito como commnd, describe cómo solucionar problemas de escritura.

    1. Agregue --validate a kubectl apply -f y ejecute kubectl apply --validate -f XXX.yaml .

      Si escribe mal una palabra, se reporta un error: XXX] unknown field: commnd XXX] this may be a false alarm, see https://gXXXb.XXX/6842pods/test.

    2. Compare la salida pod.yaml con el archivo YAML original que usó para crear el pod.

      Nota

      [$Pod] es el nombre del pod con estado anómalo. Puede obtenerlo al ejecutar el comando kubectl get pods.

        kubectl get pods [$Pod] -o yaml > pod.yaml
      • Si el archivo pod.yaml tiene más líneas que el archivo original, significa que el pod se creó como se esperaba y el clúster agregó valores predeterminados.

      • Si faltan líneas de su archivo YAML original en pod.yaml, esto indica un error ortográfico en el archivo original.

  3. Revise los registros del pod para solucionar el problema.

  4. Acceda al contenedor mediante una terminal y compruebe que los archivos locales dentro del contenedor sean los esperados.

Comprobar el uso de recursos del nodo con kubectl

  1. Compruebe el uso de CPU y memoria de todos los nodos del clúster.

    kubectl describe nodes | awk '/^Name:/{print "\n"$2} /Resource +Requests +Limits/{print $0} /^[ \t]+cpu.*%/{print $0} /^[ \t]+memory.*%/{print $0}'

    Salida esperada:

    cn-hangzhou.192.168.0.xxx
      Resource           Requests      Limits
      cpu                1725m (44%)   10320m (263%)
      memory             1750Mi (11%)  16044Mi (109%)
    
    cn-hangzhou.192.168.16.xxx
      Resource           Requests      Limits
      cpu                1885m (48%)   16820m (429%)
      memory             2536Mi (17%)  25760Mi (179%)

    Un nodo con un uso alto de solicitudes podría no satisfacer los requests de un nuevo pod, lo que impide que se programe.

  2. Reemplace YOUR_NODE_NAME por el nombre real del nodo para ver el uso de recursos de todos los pods en ese nodo.kubectl describe node YOUR_NODE_NAME | awk '/Non-terminated Pods/,/Allocated resources/{ if ($0 !~ /Allocated resources/) print }'

    Salida esperada:

    Non-terminated Pods:          (11 in total)
      Namespace                   Name                                                        CPU Requests  CPU Limits   Memory Requests  Memory Limits  Age
      ---------                   ----                                                        ------------  ----------   ---------------  -------------  ---
      arms-prom                   node-exporter-gp95p                                         20m (0%)      1020m (26%)  160Mi (1%)       1152Mi (7%)    6d21h
      csdr                        csdr-velero-77c8bbc9c7-w46lq                                500m (12%)    1 (25%)      128Mi (0%)       2Gi (13%)      6d19h
      kube-system                 ack-cost-exporter-5b647ffc65-zdrsl                          100m (2%)     1 (25%)      200Mi (1%)       1Gi (6%)       6d21h
      kube-system                 ack-node-local-dns-admission-controller-5dfd74f5f4-9rl6n    100m (2%)     1 (25%)      100Mi (0%)       1Gi (6%)       6d21h
      kube-system                 ack-node-problem-detector-daemonset-6wql2                   200m (5%)     1200m (30%)  300Mi (2%)       1324Mi (9%)    6d21h
      kube-system                 coredns-7784559f6-dr9sn                                     100m (2%)     0 (0%)       100Mi (0%)       2Gi (13%)      6d21h
      kube-system                 csi-plugin-knz7j                                            130m (3%)     2 (51%)      176Mi (1%)       4Gi (27%)      6d21h
      kube-system                 kube-proxy-worker-rkbzv                                     100m (2%)     0 (0%)       100Mi (0%)       0 (0%)         6d21h
      kube-system                 loongcollector-ds-kw7cj                                     100m (2%)     2 (51%)      256Mi (1%)       2Gi (13%)      6d21h
      kube-system                 node-local-dns-pgzcn                                        25m (0%)      0 (0%)       30Mi (0%)        1Gi (6%)       6d21h
      kube-system                 terway-eniip-lnn8n                                          350m (8%)     1100m (28%)  200Mi (1%)       256Mi (1%)     6d21h

    Puede ajustar la configuración de requests según el consumo real de recursos.

Desconexiones intermitentes de red desde los pods hacia las bases de datos

Si un pod se desconecta de forma intermitente de una base de datos, siga estos pasos.

1. Comprobar el pod
  • Revise los eventos del pod en busca de señales de inestabilidad en la conexión, como problemas de red, reinicios o recursos insuficientes.

  • Revise los registros del pod para identificar mensajes de error relacionados con la conexión a la base de datos, como tiempos de espera agotados, errores de autenticación o activaciones de reconexión.

  • Monitoree el uso de CPU y memoria del pod para asegurar que el agotamiento de recursos no provoque que la aplicación o el controlador de la base de datos fallen.

  • Revise los requests y limits de recursos del pod para asegurar que cuente con suficiente CPU y memoria.

2. Comprobar el nodo
  • Compruebe si el nodo tiene escasez de recursos (memoria, disco). Consulte Monitor nodes.

  • Pruebe si existen interrupciones intermitentes de red entre el nodo y la base de datos de destino.

3. Comprobar la base de datos
  • Compruebe el estado y las métricas de rendimiento de la base de datos para detectar reinicios o cuellos de botella.

  • Revise la cantidad de conexiones anómalas y la configuración de tiempo de espera de conexión. Ajústelas según los requisitos de su aplicación.

  • Inspeccione los registros de la base de datos en busca de entradas relacionadas con desconexiones.

4. Comprobar el estado de los componentes del clúster

Los componentes del clúster con errores pueden interrumpir la comunicación de red de un pod.

kubectl get pod -n kube-system  # Check the status of component pods.

Además, compruebe los siguientes componentes de red:

  • CoreDNS: compruebe el estado y los registros del componente para asegurar que el pod resuelva correctamente la dirección del servicio de base de datos.

  • Flannel: compruebe el estado y los registros del componente kube-flannel.

  • Terway: compruebe el estado y los registros del componente terway-eniip.

5. Analizar el tráfico de red

Puede usar tcpdump para capturar paquetes y analizar el tráfico de red. Esto le ayudará a identificar la causa del problema.

  1. Obtenga la información del pod y del nodo:

    Enumere los pods y sus nodos en un namespace específico:

    kubectl  get pod -n [namespace] -o wide 
  2. Inicie sesión en el nodo de destino y ejecute los siguientes comandos para encontrar el PID del contenedor.

    Containerd

    1. Consulte el CONTAINER del contenedor.

      crictl ps |grep <Pod name keyword>

      Salida esperada:

      CONTAINER           IMAGE               CREATED             STATE                      
      a1a214d2*****       35d28df4*****       2 days ago          Running
    2. Consulte el PID del contenedor mediante el CONTAINER ID.

      crictl inspect a1a214d2***** |grep -i PID

      Salida esperada:

          "pid": 2309838,    # The PID of the target container.
                  "pid": 1
                  "type": "pid"

    Docker

    1. Consulte el CONTAINER ID del contenedor.

      docker ps |grep <pod name keyword>

      Salida esperada:

      CONTAINER ID        IMAGE                  COMMAND     
      a1a214d2*****       35d28df4*****          "/nginx
    2. Consulte el PID del contenedor mediante el CONTAINER ID.

      docker inspect  a1a214d2***** |grep -i PID

      Salida esperada:

                  "Pid": 2309838,  # The PID of the target container.
                  "PidMode": "",
                  "PidsLimit": null,
  3. Capture los paquetes.

    Capture los paquetes de red entre el pod y la base de datos de destino mediante el PID del contenedor.

    nsenter -t <container PID> tcpdump -i any -n -s 0 tcp and host <database IP address> 

    Capture los paquetes de red entre el pod y el host mediante el PID del contenedor.

    nsenter -t <container PID> tcpdump -i any -n -s 0 tcp and host <node IP address>

    Capture los paquetes de red entre el host y la base de datos.

    tcpdump -i any -n -s 0 tcp and host <database IP address> 
6. Optimizar la aplicación
  • Implemente un mecanismo de reconexión automática en su aplicación para asegurar que restablezca las conexiones de forma automática durante un cambio o una migración de base de datos.

  • Use conexiones persistentes en lugar de conexiones de corta duración para comunicarse con la base de datos. Las conexiones persistentes reducen significativamente la sobrecarga de rendimiento y el consumo de recursos, lo que mejora la eficiencia general del sistema.

Solución de problemas desde la consola

Inicie sesión en la consola de ACK y vaya a la página de detalles de su clúster para solucionar problemas de pods.

Acciones

Consola

Comprobar el estado de un pod

  1. En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Workloads > Pods.

  2. En la esquina superior izquierda de la página Pods, seleccione el Namespace del pod y compruebe su estado.

    • Si el estado es Running, el pod funciona como se espera.

    • Si el estado no es Running, el pod se encuentra en un estado anómalo. Consulte este tema para conocer los pasos de solución de problemas.

Consultar la información básica de un pod

  1. En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Workloads > Pods.

  2. En la esquina superior izquierda de la página Pods, seleccione el Namespace del pod de destino. Luego, haga clic en el nombre del pod o en Details en la columna Actions para ver detalles como el nombre del pod, la imagen, la dirección IP y el nodo donde se ejecuta.

Consultar la configuración de un pod

  1. En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Workloads > Pods.

  2. En la esquina superior izquierda de la página Pods, seleccione el Namespace del pod de destino. Luego, haga clic en el nombre del pod o en Details en la columna Actions.

  3. En la esquina superior derecha de la página de detalles del pod, haga clic en Edit YAML para ver el archivo de configuración YAML del pod.

Consultar los eventos de un pod

  1. En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Workloads > Pods.

  2. En la esquina superior izquierda de la página Pods, seleccione el Namespace del pod de destino. Luego, haga clic en el nombre del pod o en Details en la columna Actions.

  3. En la parte inferior de la página de detalles del pod, haga clic en la pestaña Events para ver los eventos del pod.

    Nota

    De forma predeterminada, Kubernetes conserva los eventos de la última hora. Para almacenar eventos durante un periodo más largo, consulte Create and use K8s Event Center.

Ver los registros de un pod

  1. En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Workloads > Pods.

  2. En la esquina superior izquierda de la página Pods, seleccione el Namespaces del pod de destino. Luego, haga clic en el nombre del pod o en Details en la columna Actions.

  3. En la parte inferior de la página de detalles del pod, haga clic en la pestaña Logs para ver los registros del pod.

Nota

ACK se integra con Simple Log Service (SLS) para recopilar registros de contenedores. Consulte Collect container logs from an ACK cluster.

Consultar los datos de monitoreo de un pod

  1. En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Operations > Prometheus Monitoring.

  2. En la página Prometheus Monitoring, haga clic en la pestaña Cluster Overview para ver los paneles de monitoreo de CPU, memoria y E/S de red del pod.

Nota

ACK se integra con Managed Service for Prometheus para el monitoreo en tiempo real de clústeres y contenedores. Consulte Configure Managed Service for Prometheus.

Usar una terminal para acceder a un contenedor y ver archivos locales

  1. En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Workloads > Pods.

  2. En la página Pods, busque el pod de destino y haga clic en Terminal en la columna Actions.

Ejecutar diagnósticos de pod

  1. En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en Workloads > Pods.

  2. En la página Pods, busque el pod de destino y haga clic en Diagnose en la columna Actions. Resuelva los problemas identificados según los resultados del diagnóstico.

Nota

Container Intelligent Service ofrece diagnósticos con un solo clic. Consulte Use cluster diagnostics.

Eliminación inesperada de un pod

El kube-controller-manager (KCM) recolecta como basura los pods en estado Completed cuando su cantidad supera el umbral predeterminado de 12,500. El parámetro --terminated-pod-gc-threshold configura este umbral. Consulte la documentación de parámetros de KCM.

Recomendación: limpie periódicamente los pods en estado Completed para evitar que afecten la eficiencia del controlador.