Przeczytaj w języku angielskim

Udostępnij za pośrednictwem


Konfigurowanie agenta VPA serwera metryk w usłudze Azure Kubernetes Service (AKS)

Serwer metryk to skalowalne, wydajne źródło metryk zasobów kontenera dla wbudowanych potoków skalowania automatycznego platformy Kubernetes. Dzięki usłudze Azure Kubernetes Service (AKS) serwer metryk korzysta z automatycznego skalowania zasobników w pionie. Serwer metryk jest często wykorzystywany przez inne dodatki Kubernetes, takie jak narzędzie Horizontal Pod Autoscaler.

Narzędzie Vertical Pod Autoscaler (VPA) umożliwia dostosowanie limitu zasobów, gdy na serwerze metryk występują stałe ograniczenia zasobów procesora CPU i pamięci.

Zanim rozpoczniesz

Klaster usługi AKS działa na platformie Kubernetes w wersji 1.24 lub nowszej.

Ograniczanie przepustowości serwera metryk

Jeśli szybkość ograniczania przepustowości serwera metryk jest wysoka, a użycie pamięci dwóch zasobników jest niezrównoważone, oznacza to, że serwer metryk wymaga więcej zasobów niż określone wartości domyślne.

Aby zaktualizować wartości współczynników, utwórz ConfigMap w przestrzeni nazw kube-system nakładki, aby zastąpić wartości w specyfikacji serwera metryk. Wykonaj następujące kroki, aby zaktualizować serwer metryk.

  1. Utwórz plik ConfigMap o nazwie metrics-server-config.yaml i skopiuj go w następującym manifeście.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: metrics-server-config
      namespace: kube-system
      labels:
        kubernetes.io/cluster-service: "true"
        addonmanager.kubernetes.io/mode: EnsureExists
    data:
      NannyConfiguration: |-
        apiVersion: nannyconfig/v1alpha1
        kind: NannyConfiguration
        baseCPU: 100m
        cpuPerNode: 1m
        baseMemory: 100Mi
        memoryPerNode: 8Mi
    

    W przykładzie ConfigMap limit zasobów i żądanie są zmieniane na następujące:

    • cpu: (100+1n) milicore
    • pamięć: (100+8n) mebibajt

    Gdzie n jest liczbą węzłów.

  2. Utwórz ConfigMap przy użyciu polecenia kubectl apply i określ nazwę manifestu YAML:

    kubectl apply -f metrics-server-config.yaml
    
  3. Uruchom ponownie zasobniki serwera metryk. Istnieją dwa zasobniki serwera Metryk, a następujące polecenie usuwa wszystkie z nich.

    kubectl -n kube-system delete po -l k8s-app=metrics-server
    
  4. Aby sprawdzić, czy zaktualizowane zasoby zostały zastosowane, uruchom następujące polecenie, aby przejrzeć dziennik VPA serwera metryk.

    kubectl -n kube-system logs metrics-server-pod-name -c metrics-server-vpa
    

    Poniższe przykładowe dane wyjściowe przypominają wyniki pokazujące zastosowane zaktualizowane ustawienia ograniczania przepustowości.

    ERROR: logging before flag.Parse: I0315 23:12:33.956112       1 pod_nanny.go:68] Invoked by [/pod_nanny --config-dir=/etc/config --cpu=44m --extra-cpu=0.5m --memory=51Mi --extra-memory=4Mi --poll-period=180000 --threshold=5 --deployment=metrics-server --container=metrics-server]
    ERROR: logging before flag.Parse: I0315 23:12:33.956159       1 pod_nanny.go:69] Version: 1.8.14
    ERROR: logging before flag.Parse: I0315 23:12:33.956171       1 pod_nanny.go:85] Watching namespace: kube-system, pod: metrics-server-545d8b77b7-5nqq9, container: metrics-server.
    ERROR: logging before flag.Parse: I0315 23:12:33.956175       1 pod_nanny.go:86] storage: MISSING, extra_storage: 0Gi
    ERROR: logging before flag.Parse: I0315 23:12:33.957441       1 pod_nanny.go:116] cpu: 100m, extra_cpu: 1m, memory: 100Mi, extra_memory: 8Mi
    ERROR: logging before flag.Parse: I0315 23:12:33.957456       1 pod_nanny.go:145] Resources: [{Base:{i:{value:100 scale:-3} d:{Dec:<nil>} s:100m Format:DecimalSI} ExtraPerNode:{i:{value:0 scale:-3} d:{Dec:<nil>} s: Format:DecimalSI} Name:cpu} {Base:{i:{value:104857600 scale:0} d:{Dec:<nil>} s:100Mi Format:BinarySI} ExtraPerNode:{i:{value:0 scale:0} d:{Dec:<nil>} s: Format:BinarySI} Name:memory
    

Należy zachować ostrożność co do baseCPU, cpuPerNode, baseMemory i memoryPerNode, ponieważ element ConfigMap nie jest weryfikowany przez usługę AKS. Zalecaną praktyką jest stopniowe zwiększanie wartości, aby uniknąć niepotrzebnego zużycia zasobów. Proaktywne monitorowanie użycia zasobów podczas aktualizowania lub tworzenia obiektu ConfigMap. Duża liczba żądań zasobów może mieć negatywny wpływ na węzeł.

Ręczne konfigurowanie użycia zasobów serwera metryk

Serwer metryk VPA dostosowuje użycie zasobów przez liczbę węzłów. Jeśli klaster jest często skalowany w górę lub w dół, serwer metryk może być często uruchamiany ponownie. W takim przypadku można pominąć vpa i ręcznie kontrolować użycie zasobów. Ta metoda konfigurowania vpA nie jest wykonywana oprócz kroków opisanych w poprzedniej sekcji.

Jeśli chcesz pominąć usługę VPA dla serwera metryk i ręcznie kontrolować użycie zasobów, wykonaj następujące kroki.

  1. Utwórz plik ConfigMap o nazwie metrics-server-config.yaml i skopiuj go w następującym manifeście.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: metrics-server-config
      namespace: kube-system
      labels:
        kubernetes.io/cluster-service: "true"
        addonmanager.kubernetes.io/mode: EnsureExists
    data:
      NannyConfiguration: |-
        apiVersion: nannyconfig/v1alpha1
        kind: NannyConfiguration
        baseCPU: 100m
        cpuPerNode: 0m
        baseMemory: 100Mi
        memoryPerNode: 0Mi
    

    W tym przykładzie ConfigMap zmienia limit zasobów i żądanie na następujące:

    • cpu: 100 milicore
    • pamięć: 100 mebibajtów

    Zmiana liczby węzłów nie powoduje automatycznego skalowania.

  2. Utwórz ConfigMap przy użyciu polecenia kubectl apply i określ nazwę manifestu YAML:

    kubectl apply -f metrics-server-config.yaml
    
  3. Uruchom ponownie zasobniki serwera metryk. Istnieją dwa zasobniki serwera Metryk, a następujące polecenie usuwa wszystkie z nich.

    kubectl -n kube-system delete po -l k8s-app=metrics-server
    
  4. Aby sprawdzić, czy zaktualizowane zasoby zostały zastosowane, uruchom następujące polecenie, aby przejrzeć dziennik VPA serwera metryk.

    kubectl -n kube-system logs metrics-server-pod-name -c metrics-server-vpa
    

    Poniższe przykładowe dane wyjściowe przypominają wyniki pokazujące zastosowane zaktualizowane ustawienia ograniczania przepustowości.

    ERROR: logging before flag.Parse: I0315 23:12:33.956112       1 pod_nanny.go:68] Invoked by [/pod_nanny --config-dir=/etc/config --cpu=44m 
    --extra-cpu=0.5m --memory=51Mi --extra-memory=4Mi --poll-period=180000 --threshold=5 --deployment=metrics-server --container=metrics-server]
    ERROR: logging before flag.Parse: I0315 23:12:33.956159       1 pod_nanny.go:69] Version: 1.8.14
    ERROR: logging before flag.Parse: I0315 23:12:33.956171       1 pod_nanny.go:85] Watching namespace: kube-system, pod: metrics-server-545d8b77b7-5nqq9, container: metrics-server.
    ERROR: logging before flag.Parse: I0315 23:12:33.956175       1 pod_nanny.go:86] storage: MISSING, extra_storage: 0Gi
    ERROR: logging before flag.Parse: I0315 23:12:33.957441       1 pod_nanny.go:116] cpu: 100m, extra_cpu: 0m, memory: 100Mi, extra_memory: 0Mi
    ERROR: logging before flag.Parse: I0315 23:12:33.957456       1 pod_nanny.go:145] Resources: [{Base:{i:{value:100 scale:-3} d:{Dec:<nil>} s:100m Format:DecimalSI} ExtraPerNode:{i:{value:0 scale:-3} d:{Dec:<nil>} s: Format:DecimalSI} Name:cpu} {Base:{i:{value:104857600 scale:0} d:{Dec:<nil>} s:100Mi Format:BinarySI} 
    ExtraPerNode:{i:{value:0 scale:0} d:{Dec:<nil>} s: Format:BinarySI} Name:memory}]
    

Rozwiązywanie problemów

  1. Jeśli używasz następującej mapy konfiguracji, dostosowania VPA serwera metryk nie są stosowane. Musisz dodać jednostkę dla elementu baseCPU.

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: metrics-server-config
      namespace: kube-system
      labels:
        kubernetes.io/cluster-service: "true"
        addonmanager.kubernetes.io/mode: EnsureExists
    data:
      NannyConfiguration: |-
        apiVersion: nannyconfig/v1alpha1
        kind: NannyConfiguration
        baseCPU: 100
        cpuPerNode: 1m
        baseMemory: 100Mi
        memoryPerNode: 8Mi
    

    Poniższe przykładowe dane wyjściowe przypominają wyniki pokazujące, że zaktualizowane ustawienia ograniczania nie są stosowane.

    ERROR: logging before flag.Parse: I0316 23:32:08.383389       1 pod_nanny.go:68] Invoked by [/pod_nanny --config-dir=/etc/config --cpu=44m 
    --extra-cpu=0.5m --memory=51Mi --extra-memory=4Mi --poll-period=180000 --threshold=5 --deployment=metrics-server --container=metrics-server]
    ERROR: logging before flag.Parse: I0316 23:32:08.383430       1 pod_nanny.go:69] Version: 1.8.14
    ERROR: logging before flag.Parse: I0316 23:32:08.383441       1 pod_nanny.go:85] Watching namespace: kube-system, pod: metrics-server-7d78876589-hcrff, container: metrics-server.
    ERROR: logging before flag.Parse: I0316 23:32:08.383446       1 pod_nanny.go:86] storage: MISSING, extra_storage: 0Gi
    ERROR: logging before flag.Parse: I0316 23:32:08.384554       1 pod_nanny.go:192] Unable to decode Nanny Configuration from config map, using default parameters
    ERROR: logging before flag.Parse: I0316 23:32:08.384565       1 pod_nanny.go:116] cpu: 44m, extra_cpu: 0.5m, memory: 51Mi, extra_memory: 4Mi
    ERROR: logging before flag.Parse: I0316 23:32:08.384589       1 pod_nanny.go:145] Resources: [{Base:{i:{value:44 scale:-3} d:{Dec:<nil>} s:44m Format:DecimalSI} ExtraPerNode:{i:{value:5 scale:-4} d:{Dec:<nil>} s: Format:DecimalSI} Name:cpu} {Base:{i:{value:53477376 scale:0} d:{Dec:<nil>} s:51Mi Format:BinarySI} ExtraPerNode:{i:{value:4194304 scale:0} 
    d:{Dec:<nil>} s:4Mi Format:BinarySI} Name:memory}]
    
  2. W przypadku klastrów Kubernetes w wersji 1.23 lub nowszej serwer metryk ma zasobnik PodDisruptionBudget. Gwarantuje to, że liczba dostępnych zasobników serwera metryk jest co najmniej jedna. Jeśli po uruchomieniu kubectl -n kube-system get pouzyskasz coś takiego, możliwe, że niestandardowe użycie zasobów jest niewielkie. Zwiększ wartości współczynników, aby je rozwiązać.

    metrics-server-679b886d4-pxwdf        1/2     CrashLoopBackOff   6 (36s ago)   6m33s
    metrics-server-679b886d4-svxxx        1/2     CrashLoopBackOff   6 (54s ago)   6m33s
    metrics-server-7d78876589-hcrff       2/2     Running            0             37m
    

Następne kroki

Serwer metryk jest składnikiem w potoku metryk podstawowych. Aby uzyskać więcej informacji, zobacz Projekt interfejsu API serwera metryk.