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.
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-systemespacio 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
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 yamlEn la salida, compruebe que la
resourcessección incluye los límites:resources: limits: cpu: 250m memory: 250Mi requests: cpu: 10m memory: 20Mi