Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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-systemprzestrzeni 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
Sprawdź limity zasobów w konfiguracji YAML zasobnika:
kubectl get pods -l app=akshci-telemetry -n kube-system --kubeconfig "./kubeconfig-$cluster_name" -o yamlW danych wyjściowych sprawdź, czy
resourcessekcja zawiera limity:resources: limits: cpu: 250m memory: 250Mi requests: cpu: 10m memory: 20Mi