Freigeben über


Problembehandlung für den AKS Arc-Telemetrie-Pod, der zu viel Speicher und CPU verbraucht.

Symptome

Der Akshci-Telemetrie-Pod in einem AKS Arc-Cluster kann im Laufe der Zeit viele CPU- und Arbeitsspeicherressourcen verbrauchen. Wenn Metriken aktiviert sind, können Sie die CPU- und Arbeitsspeicherauslastung mithilfe des folgenden kubectl Befehls überprüfen:

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

Möglicherweise sehen Sie eine Ausgabe, die der folgenden ähnelt:

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

Milderung

Dieses Problem wurde in AKS unter Azure Local, Version 2507, behoben. Aktualisieren Sie Ihre lokale Azure-Bereitstellung auf den Build 2507.

Problemumgehung für lokale Azure-Versionen 2506 und älter

Um dieses Problem zu beheben, legen Sie standardressourcengrenzwerte für die Pods im kube-system Namespace fest.

Wichtige Hinweise

  • Überprüfen Sie, ob Im Kube-System-Namespace Pods vorhanden sind, die möglicherweise mehr Arbeitsspeicher als die Standardgrenzwerteeinstellung erfordern. In diesem Fällen können Anpassungen erforderlich sein.
  • Das LimitRange wird auf den Namespace angewendet; in diesem Fall der kube-system Namespace. Die Standardressourcenbeschränkungen gelten auch für neue Pods, die keine eigenen Grenzwerte angeben.
  • Vorhandene Pods, einschließlich Pods, für die bereits Ressourcenlimits gelten, sind nicht betroffen.
  • Neue Pods, die keine eigenen Ressourcenlimits angeben, werden durch die im nächsten Abschnitt festgelegten Grenzwerte eingeschränkt.
  • Nachdem Sie die Ressourcenbeschränkungen festgelegt und den Telemetrie-Pod gelöscht haben, hat der neue Pod möglicherweise den Speichergrenzwert erreicht und OOM -Fehler (Out-Of-Memory) generiert. Dies ist eine temporäre Entschärfung.

Um mit dem Festlegen der Ressourcengrenzwerte fortzufahren, können Sie das folgende Skript ausführen. Während das Skript az aksarc get-credentials verwendet, können Sie auch az connectedk8s proxy verwenden, um den Proxy-Kubeconfig abzurufen und auf den Kubernetes-Cluster zuzugreifen.

Definieren von LimitRange YAML zum Festlegen von Standard-CPU- und Arbeitsspeichergrenzwerten

# 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"

Überprüfen, ob die Ressourcengrenzwerte ordnungsgemäß angewendet wurden

  1. Überprüfen Sie die Ressourcenbeschränkungen in der YAML-Konfiguration des Pods:

    kubectl get pods -l app=akshci-telemetry -n kube-system --kubeconfig "./kubeconfig-$cluster_name" -o yaml
    
  2. Überprüfen Sie in der Ausgabe, ob der resources Abschnitt die Grenzwerte enthält:

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

Nächste Schritte

Bekannte Probleme in AKS, die von Azure Arc aktiviert sind