Udostępnij przez


Likwidacja problemu polegającego na tym, że kontener telemetrii usługi AKS Arc zużywa zbyt dużo pamięci i procesora

Objawy

Pod akshci-telemetry w klastrze AKS Arc może z czasem zużywać dużo zasobów CPU i pamięci. Jeśli metryki są włączone, możesz sprawdzić użycie procesora CPU i pamięci przy użyciu następującego kubectl polecenia:

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

Dane wyjściowe mogą wyglądać mniej więcej tak:

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

Czynności zapobiegawcze

Ten problem został rozwiązany w AKS na Azure Local, wersja 2507. Uaktualnij wdrożenie lokalne platformy Azure do kompilacji 2507.

Obejście dla lokalnych wersji Azure 2506 i starszych

Aby rozwiązać ten problem, ustaw domyślne limity zasobów dla zasobników w kube-system przestrzeni nazw.

Ważne uwagi

  • Sprawdź, czy masz jakiekolwiek zasobniki w przestrzeni nazw kube-system , które mogą wymagać więcej pamięci niż domyślne ustawienie limitu. Jeśli tak, może być konieczne dostosowanie.
  • LimitRange stosuje się do przestrzeni nazw; w tym przypadku kube-system przestrzeni nazw. Domyślne limity zasobów dotyczą również nowych zasobników, które nie określają własnych limitów.
  • Nie ma to wpływu na istniejące zasobniki, w tym te, które mają już limity zasobów.
  • Nowe zasobniki , które nie określają własnych limitów zasobów, są ograniczone przez limity ustawione w następnej sekcji.
  • Po ustawieniu limitów zasobów i usunięciu zasobnika telemetrii nowy zasobnik może ostatecznie osiągnąć limit pamięci i wygenerować błędy OOM (Out-Of-Memory). Jest to tymczasowe ograniczenie ryzyka.

Aby kontynuować ustawianie limitów zasobów, możesz uruchomić następujący skrypt. Skrypt używa az aksarc get-credentials , ale można również użyć az connectedk8s proxy, aby uzyskać kubeconfig serwera proxy i uzyskać dostęp do klastra Kubernetes.

Zdefiniuj YAML LimitRange, aby ustawić domyślne limity procesora i pamięci

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

Sprawdź, czy limity zasobów zostały zastosowane poprawnie

  1. Sprawdź limity zasobów w konfiguracji YAML zasobnika:

    kubectl get pods -l app=akshci-telemetry -n kube-system --kubeconfig "./kubeconfig-$cluster_name" -o yaml
    
  2. W danych wyjściowych sprawdź, czy resources sekcja zawiera limity:

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

Następne kroki

Znane problemy w AKS obsługiwane przez Azure Arc