Solución de problemas en los que el pod de telemetría de AKS Arc consume demasiada memoria y CPU

Síntomas

El pod akshci-telemetry de un clúster de AKS Arc puede consumir muchos recursos de CPU y memoria. Si las métricas están habilitadas, puede comprobar el uso de cpu y memoria mediante el siguiente kubectl comando:

kubectl -n kube-system top pod -l app=akshci-telemetry

Es posible que vea una salida similar a la siguiente:

NAME                              CPU(cores)   MEMORY(bytes)
akshci-telemetry-5df56fd5-rjqk4   996m         152Mi

Mitigación

Este problema se corrigió en AKS en Azure Local, versión 2507. Actualice la implementación local de Azure a la compilación 2507.

Solución alternativa para las versiones 2506 y anteriores de Azure Local

Para resolver este problema, establezca los límites de recursos predeterminados para los pods del kube-system espacio de nombres.

Notas importantes

  • Compruebe si tiene pods en el namespace kube-system que podrían requerir más memoria que la configuración de límite predeterminada. Si es así, es posible que se necesiten ajustes.
  • LimitRange se aplica al espacio de nombres; en este caso, el kube-system espacio de nombres. Los límites de recursos predeterminados también se aplican a los nuevos pods que no especifican sus propios límites.
  • Los pods existentes, incluidos los que ya tienen límites de recursos, no se ven afectados.
  • Los nuevos pods que no especifican sus propios límites de recursos están restringidos por los límites establecidos en la sección siguiente.
  • Después de establecer los límites de recursos y eliminar el pod de telemetría, el nuevo pod podría alcanzar el límite de memoria y generar errores de OOM (memoria insuficiente). Se trata de una mitigación temporal.

Para continuar con la configuración de los límites de recursos, puede ejecutar el siguiente script. Aunque el script usa az aksarc get-credentials, también puede usar az connectedk8s proxy para obtener el proxy kubeconfig y acceder al clúster de Kubernetes.

Definir limitRange YAML para establecer límites predeterminados de CPU y memoria

# Set the $cluster_name and $resource_group of the aksarc cluster
$cluster_name = ""
$resource_group = ""

# Connect to the aksarc cluster
az aksarc get-credentials -n $cluster_name -g $resource_group --admin -f "./kubeconfig-$cluster_name"

$limitRangeYaml = @'
apiVersion: v1
kind: LimitRange
metadata:
  name: cpu-mem-resource-constraint
  namespace: kube-system
spec:
  limits:
  - default: # this section defines default limits for containers that haven't specified any limits
      cpu: 250m
      memory: 250Mi
    defaultRequest: # this section defines default requests for containers that haven't specified any requests
      cpu: 10m
      memory: 20Mi
    type: Container
'@

$limitRangeYaml | kubectl apply --kubeconfig "./kubeconfig-$cluster_name" -f -

kubectl get pods -l app=akshci-telemetry -n kube-system --kubeconfig "./kubeconfig-$cluster_name"
kubectl delete pods -l app=akshci-telemetry -n kube-system --kubeconfig "./kubeconfig-$cluster_name"

sleep 5
kubectl get pods -l app=akshci-telemetry -n kube-system --kubeconfig "./kubeconfig-$cluster_name"

Validar si los límites de recursos se aplicaron correctamente

  1. Compruebe los límites de recursos en la configuración de YAML del pod:

    kubectl get pods -l app=akshci-telemetry -n kube-system --kubeconfig "./kubeconfig-$cluster_name" -o yaml
    
  2. En la salida, compruebe que la resources sección incluye los límites:

    resources:
      limits:
        cpu: 250m
        memory: 250Mi
      requests:
        cpu: 10m
        memory: 20Mi
    

Pasos siguientes

Problemas conocidos en AKS habilitados por Azure Arc