Dieses Dokument wurde mithilfe automatisierter maschineller Übersetzungstechnologie übersetzt. Wir bemühen uns um korrekte Übersetzungen, übernehmen jedoch keine Gewähr für die Vollständigkeit, Richtigkeit oder Zuverlässigkeit der übersetzten Inhalte. Im Falle von Abweichungen ist die englische Originalversion maßgebend und stellt den verbindlichen Text dar.

HPAs mit kubectl testen

Dieses Dokument beschreibt, wie Sie den Status Ihrer HPAs überprüfen, nachdem Sie sie mit Ihrem Lasttest-Tool hoch- oder heruntergeskaliert haben. Für Informationen zur Überprüfung des Status über die Rancher UI (mindestens Version 2.3.x) siehe HPAs mit der Rancher UI verwalten.

Damit HPA korrekt funktioniert, sollten die Service-Deployments Ressourcenanforderungsdefinitionen für Container haben. Befolgen Sie dieses Hello-World-Beispiel, um zu testen, ob HPA korrekt funktioniert.

  1. Konfigurieren Sie kubectl, um eine Verbindung zu Ihrem Kubernetes-Cluster herzustellen.

  2. Kopieren Sie das folgende hello-world Deployment-Manifest.

    Hello World Manifest

    +

      apiVersion: apps/v1beta2
      kind: Deployment
      metadata:
        labels:
          app: hello-world
        name: hello-world
        namespace: default
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: hello-world
        strategy:
          rollingUpdate:
            maxSurge: 1
            maxUnavailable: 0
          type: RollingUpdate
        template:
          metadata:
            labels:
              app: hello-world
          spec:
            containers:
            - image: rancher/hello-world
              imagePullPolicy: Always
              name: hello-world
              resources:
                requests:
                  cpu: 500m
                  memory: 64Mi
              ports:
              - containerPort: 80
                protocol: TCP
            restartPolicy: Always
      ---
      apiVersion: v1
      kind: Service
      metadata:
        name: hello-world
        namespace: default
      spec:
        ports:
        - port: 80
          protocol: TCP
          targetPort: 80
        selector:
          app: hello-world

    +

  3. Stellen Sie es in Ihrem Cluster bereit.

     # kubectl create -f <HELLO_WORLD_MANIFEST>
  4. Kopieren Sie eines der HPAs unten basierend auf dem von Ihnen verwendeten Metriktyp:

    Hello World HPA: Ressourcenmetriken

    +

       apiVersion: autoscaling/v2beta1
       kind: HorizontalPodAutoscaler
       metadata:
         name: hello-world
         namespace: default
       spec:
         scaleTargetRef:
           apiVersion: extensions/v1beta1
           kind: Deployment
           name: hello-world
         minReplicas: 1
         maxReplicas: 10
         metrics:
         - type: Resource
           resource:
             name: cpu
             targetAverageUtilization: 50
         - type: Resource
           resource:
             name: memory
             targetAverageValue: 1000Mi

    +

+

  apiVersion: autoscaling/v2beta1
  kind: HorizontalPodAutoscaler
  metadata:
    name: hello-world
    namespace: default
  spec:
    scaleTargetRef:
      apiVersion: extensions/v1beta1
      kind: Deployment
      name: hello-world
    minReplicas: 1
    maxReplicas: 10
    metrics:
    - type: Resource
      resource:
        name: cpu
        targetAverageUtilization: 50
    - type: Resource
      resource:
        name: memory
        targetAverageValue: 100Mi
    - type: Pods
      pods:
        metricName: cpu_system
        targetAverageValue: 20m

+

  1. Sehen Sie sich die HPA-Informationen und die Beschreibung an. Bestätigen Sie, dass Metrikdaten angezeigt werden.

    Ressourcenmetriken
    1. Geben Sie die folgenden Befehle ein. ` # kubectl get hpa NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE hello-world Deployment/hello-world 1253376 / 100Mi, 0% / 50% 1 10 1 6m # kubectl describe hpa Name: hello-world Namespace: default Labels: <none> Annotations: <none> CreationTimestamp: Mo, 23. Jul 2018 20:21:16 +0200 Referenz: Deployment/hello-world
      Metriken: ( aktuell / Ziel )
      Speicherressource auf Pods: 1253376 / 100Mi
      CPU-Ressource auf Pods (als Prozentsatz der Anforderung): 0% (0) / 50% Min. Replikate: 1 Max. Replikate: 10 Bedingungen: Typ Status Grund Nachricht ---- ------ ------ -------
      Skalierbar Wahr Bereit für neue Skalierung die letzte Skalierungszeit war ausreichend alt, um eine neue Skalierung zu rechtfertigen
      Skalierung aktiv Wahr Gültige Metrik gefunden der HPA konnte erfolgreich eine Replikazahl aus den Speicherressourcen berechnen
      Skalierung begrenzt Falsch Gewünschte Anzahl liegt im akzeptablen Bereich
      Ereignisse: <none>
      `

  1. Geben Sie den folgenden Befehl ein.
    `
    # kubectl describe hpa
    `
    Sie sollten die folgende Ausgabe erhalten.
    `
    Name: hello-world
    Namespace: default
    Etiketten: <none>
    Anmerkungen: <none>
    Erstellungszeitstempel: Di, 24. Jul 2018 18:36:28 +0200 Referenz: Deployment/hello-world
    Metriken: ( aktuell / Ziel )
    Speicherressource auf Pods: 3514368 / 100Mi "cpu_system" auf Pods: 0 / 20m CPU-Ressource auf Pods (als Prozentsatz der Anforderung): 0% (0) / 50% Min. Replikate: 1 Max. Replikate: 10 Bedingungen: Typ Status Grund Nachricht ---- ------ ------ -------
    Skalierbar Wahr Bereit für neue Skalierung die letzte Skalierungszeit war ausreichend alt, um eine neue Skalierung zu rechtfertigen
    Skalierung aktiv Wahr Gültige Metrik gefunden der HPA konnte erfolgreich eine Replikazahl aus den Speicherressourcen berechnen
    Skalierung begrenzt Falsch Gewünschte Anzahl liegt im akzeptablen Bereich
    Ereignisse: <none>
    `

  1. Erzeugen Sie eine Last für den Dienst, um zu testen, dass Ihre Pods wie beabsichtigt automatisch skalieren. Sie können jedes Lasttest-Tool verwenden (Hey, Gatling usw.), aber wir verwenden Hey.

  2. Testen Sie, ob das automatische Skalieren der Pods wie beabsichtigt funktioniert.

    Um Autoscaling mit Ressourcenmetriken zu testen:

    Hochskalieren auf 2 Pods: CPU-Auslastung bis zum Ziel

    Verwenden Sie Ihr Lasttest-Tool, um auf zwei Pods basierend auf der CPU-Auslastung hochzuskalieren.

    1. Sehen Sie sich Ihr HPA an.

       # kubectl describe hpa

      Sie sollten eine Ausgabe erhalten, die der folgenden ähnelt.

       Name:                                                  hello-world
       Namespace:                                             default
       Labels:                                                <none>
       Annotations:                                           <none>
       CreationTimestamp:                                     Mon, 23 Jul 2018 22:22:04 +0200
       Reference:                                             Deployment/hello-world
       Metrics:                                               ( current / target )
         resource memory on pods:                             10928128 / 100Mi
         resource cpu on pods  (as a percentage of request):  56% (280m) / 50%
       Min replicas:                                          1
       Max replicas:                                          10
       Conditions:
         Type            Status  Reason              Message
         ----            ------  ------              -------
         AbleToScale     True    SucceededRescale    the HPA controller was able to update the target scale to 2
         ScalingActive   True    ValidMetricFound    the HPA was able to successfully calculate a replica count from cpu resource utilization (percentage of request)
         ScalingLimited  False   DesiredWithinRange  the desired count is within the acceptable range
       Events:
         Type    Reason             Age   From                       Message
         ----    ------             ----  ----                       -------
         Normal  SuccessfulRescale  13s   horizontal-pod-autoscaler  New size: 2; reason: cpu resource utilization (percentage of request) above target
    2. Geben Sie den folgenden Befehl ein, um zu bestätigen, dass Sie auf zwei Pods skaliert haben.

         # kubectl get pods

      Sie sollten eine Ausgabe erhalten, die der folgenden ähnelt:

         NAME                                                     READY     STATUS    RESTARTS   AGE
         hello-world-54764dfbf8-k8ph2                             1/1       Running   0          1m
         hello-world-54764dfbf8-q6l4v                             1/1       Running   0          3h

Verwenden Sie Ihr Lasttest-Tool, um auf 3 Pods basierend auf der CPU-Auslastung mit horizontal-pod-autoscaler-upscale-delay auf 3 Minuten hochzuskalieren.

  1. Geben Sie den folgenden Befehl ein.

    # kubectl describe hpa

    Sie sollten eine Ausgabe erhalten, die der folgenden ähnelt.

       Name:                                                  hello-world
       Namespace:                                             default
       Labels:                                                <none>
       Annotations:                                           <none>
       CreationTimestamp:                                     Mon, 23 Jul 2018 22:22:04 +0200
       Reference:                                             Deployment/hello-world
       Metrics:                                               ( current / target )
         resource memory on pods:                             9424896 / 100Mi
         resource cpu on pods  (as a percentage of request):  66% (333m) / 50%
       Min replicas:                                          1
       Max replicas:                                          10
       Conditions:
         Type            Status  Reason              Message
         ----            ------  ------              -------
         AbleToScale     True    SucceededRescale    the HPA controller was able to update the target scale to 3
         ScalingActive   True    ValidMetricFound    the HPA was able to successfully calculate a replica count from cpu resource utilization (percentage of request)
         ScalingLimited  False   DesiredWithinRange  the desired count is within the acceptable range
       Events:
         Type    Reason             Age   From                       Message
         ----    ------             ----  ----                       -------
         Normal  SuccessfulRescale  4m    horizontal-pod-autoscaler  New size: 2; reason: cpu resource utilization (percentage of request) above target
         Normal  SuccessfulRescale  16s   horizontal-pod-autoscaler  New size: 3; reason: cpu resource utilization (percentage of request) above target
  2. Geben Sie den folgenden Befehl ein, um zu bestätigen, dass drei Pods laufen.

    # kubectl get pods

    Sie sollten eine Ausgabe erhalten, die der folgenden ähnelt.

       NAME                                                     READY     STATUS    RESTARTS   AGE
       hello-world-54764dfbf8-f46kh                             0/1       Running   0          1m
       hello-world-54764dfbf8-k8ph2                             1/1       Running   0          5m
       hello-world-54764dfbf8-q6l4v                             1/1       Running   0          3h
Herunterskalieren auf 1 Pod: Alle Metriken unter dem Ziel

Verwenden Sie Ihr Lasttest-Tool, um auf 1 Pod herunterskalieren, wenn alle Metriken für horizontal-pod-autoscaler-downscale-delay (standardmäßig 5 Minuten) unter dem Ziel liegen.

  1. Geben Sie den folgenden Befehl ein.

       # kubectl describe hpa

    Sie sollten eine Ausgabe erhalten, die der folgenden ähnelt.

       Name:                                                  hello-world
       Namespace:                                             default
       Labels:                                                <none>
       Annotations:                                           <none>
       CreationTimestamp:                                     Mon, 23 Jul 2018 22:22:04 +0200
       Reference:                                             Deployment/hello-world
       Metrics:                                               ( current / target )
         resource memory on pods:                             10070016 / 100Mi
         resource cpu on pods  (as a percentage of request):  0% (0) / 50%
       Min replicas:                                          1
       Max replicas:                                          10
       Conditions:
         Type            Status  Reason              Message
         ----            ------  ------              -------
         AbleToScale     True    SucceededRescale    the HPA controller was able to update the target scale to 1
         ScalingActive   True    ValidMetricFound    the HPA was able to successfully calculate a replica count from memory resource
         ScalingLimited  False   DesiredWithinRange  the desired count is within the acceptable range
       Events:
         Type    Reason             Age   From                       Message
         ----    ------             ----  ----                       -------
         Normal  SuccessfulRescale  10m   horizontal-pod-autoscaler  New size: 2; reason: cpu resource utilization (percentage of request) above target
         Normal  SuccessfulRescale  6m    horizontal-pod-autoscaler  New size: 3; reason: cpu resource utilization (percentage of request) above target
         Normal  SuccessfulRescale  1s    horizontal-pod-autoscaler  New size: 1; reason: All metrics below target

+ Um Autoscaling mit benutzerdefinierten Metriken zu testen:

+ .Hochskalieren auf 2 Pods: CPU-Auslastung bis zum Ziel

Details

Verwenden Sie Ihr Lasttest-Tool, um zwei Pods basierend auf der CPU-Auslastung hochzuskalieren.

  1. Geben Sie den folgenden Befehl ein. ` # kubectl describe hpa ` Sie sollten eine Ausgabe erhalten, die der folgenden ähnelt. ` Name: hello-world Namespace: default Labels: <none> Annotations: <none> Erstellungszeitstempel: Di, 24. Jul 2018 18:01:11 +0200 Referenz: Deployment/hello-world Metriken: ( aktuell / Ziel ) Speicherressource auf Pods: 8159232 / 100Mi "cpu_system" auf Pods: 7m / 20m CPU-Ressource auf Pods (als Prozentsatz der Anfrage): 64% (321m) / 50% Minimale Replikate: 1 Maximale Replikate: 10 Bedingungen: Typ Status Grund Nachricht ---- ------ ------ -------
    Skalierbar Wahr Erfolgreiche Skalierung der HPA-Controller konnte die Zielskalierung auf 2 aktualisieren
    Skalierung aktiv Wahr Gültige Metrik gefunden der HPA konnte erfolgreich eine Replikazahl aus der CPU-Ressourcennutzung (Prozentsatz der Anfrage) berechnen
    Skalierung begrenzt Falsch Gewünschte Anzahl liegt im akzeptablen Bereich
    Ereignisse: Typ Grund Alter Von Nachricht ---- ------ ---- ---- -------
    Normal Erfolgreiche Skalierung 16s horizontal-pod-autoscaler Neue Größe: 2; Grund: CPU-Ressourcennutzung (Prozentsatz der Anfrage) über Ziel `

  2. Geben Sie den folgenden Befehl ein, um zu bestätigen, dass zwei Pods ausgeführt werden. ` # kubectl get pods ` Sie sollten eine Ausgabe ähnlich der folgenden erhalten. ` NAME BEREIT STATUS NEUSTARTS ALTER hello-world-54764dfbf8-5pfdr 1/1 Laufend 0 3s hello-world-54764dfbf8-q6l82 1/1 Laufend 0 6h `

Hochskalieren auf 3 Pods: CPU-Auslastung bis zum Ziel

Verwenden Sie Ihr Lasttest-Tool, um auf drei Pods hochzuskalieren, wenn die CPU-Systemnutzung das Ziel erreicht. .. Geben Sie den folgenden Befehl ein.

+

# kubectl describe hpa

+ Sie sollten eine Ausgabe erhalten, die der folgenden ähnelt:

+

   Name:                                                  hello-world
   Namespace:                                             default
   Labels:                                                <none>
   Annotations:                                           <none>
   CreationTimestamp:                                     Tue, 24 Jul 2018 18:01:11 +0200
   Reference:                                             Deployment/hello-world
   Metrics:                                               ( current / target )
     resource memory on pods:                             8374272 / 100Mi
     "cpu_system" on pods:                                27m / 20m
     resource cpu on pods  (as a percentage of request):  71% (357m) / 50%
   Min replicas:                                          1
   Max replicas:                                          10
   Conditions:
     Type            Status  Reason              Message
     ----            ------  ------              -------
     AbleToScale     True    SucceededRescale    the HPA controller was able to update the target scale to 3
     ScalingActive   True    ValidMetricFound    the HPA was able to successfully calculate a replica count from cpu resource utilization (percentage of request)
     ScalingLimited  False   DesiredWithinRange  the desired count is within the acceptable range
   Events:
     Type    Reason             Age   From                       Message
     ----    ------             ----  ----                       -------
     Normal  SuccessfulRescale  3m    horizontal-pod-autoscaler  New size: 2; reason: cpu resource utilization (percentage of request) above target
     Normal  SuccessfulRescale  3s    horizontal-pod-autoscaler  New size: 3; reason: pods metric cpu_system above target
  1. Geben Sie den folgenden Befehl ein, um zu bestätigen, dass drei Pods laufen.

    # kubectl get pods

    Sie sollten eine Ausgabe erhalten, die der folgenden ähnelt:

       # kubectl get pods
       NAME                           READY     STATUS    RESTARTS   AGE
       hello-world-54764dfbf8-5pfdr   1/1       Running   0          3m
       hello-world-54764dfbf8-m2hrl   1/1       Running   0          1s
       hello-world-54764dfbf8-q6l82   1/1       Running   0          6h
Hochskalieren auf 4 Pods: CPU-Auslastung bis zum Ziel

Verwenden Sie Ihr Lasttest-Tool, um auf vier Pods basierend auf der CPU-Nutzung hochzuskalieren. horizontal-pod-autoscaler-upscale-delay ist standardmäßig auf drei Minuten eingestellt.

  1. Geben Sie den folgenden Befehl ein. ` # kubectl describe hpa ` Sie sollten eine Ausgabe erhalten, die der folgenden ähnelt. ` Name: hello-world Namespace: default Labels: <none> Anmerkungen: <none> Erstellungszeitstempel: Di, 24. Jul 2018 18:01:11 +0200 Referenz: Deployment/hello-world Metriken: ( aktuell / Ziel ) Ressourcen-Speicher auf Pods: 8374272 / 100Mi "cpu_system" auf Pods: 27m / 20m Ressourcen-CPU auf Pods (als Prozentsatz der Anfrage): 71% (357m) / 50% Minimale Replikate: 1 Maximale Replikate: 10 Bedingungen: Typ Status Grund Nachricht ---- ------ ------ ------- AbleToScale True SucceededRescale Der HPA-Controller konnte die Zielskalierung auf 3 aktualisieren ScalingActive True ValidMetricFound Der HPA konnte erfolgreich eine Replikazahl aus der CPU-Ressourcennutzung (Prozentsatz der Anfrage) berechnen ScalingLimited False GewünschtInnerhalbBereich Die gewünschte Anzahl liegt im akzeptablen Bereich Ereignisse: Typ Grund Alter Von Nachricht ---- ------ ---- ---- ------- Normal SuccessfulRescale 5m horizontal-pod-autoscaler Neue Größe: 2; Grund: CPU-Ressourcennutzung (Prozentsatz der Anfrage) über dem Ziel Normal SuccessfulRescale 3m horizontal-pod-autoscaler Neue Größe: 3; Grund: Pods-Metrik cpu_system über dem Ziel Normal SuccessfulRescale 4s horizontal-pod-autoscaler Neue Größe: 4; Grund: CPU-Ressourcennutzung (Prozentsatz der Anfrage) über dem Ziel `

  2. Geben Sie den folgenden Befehl ein, um zu bestätigen, dass vier Pods ausgeführt werden.

    # kubectl get pods

    Sie sollten eine Ausgabe erhalten, die der folgenden ähnelt.

      NAME                           READY     STATUS    RESTARTS   AGE
      hello-world-54764dfbf8-2p9xb   1/1       Running   0          5m
      hello-world-54764dfbf8-5pfdr   1/1       Running   0          2m
      hello-world-54764dfbf8-m2hrl   1/1       Running   0          1s
      hello-world-54764dfbf8-q6l82   1/1       Running   0          6h

Auf 1 Pod herunterskalieren: Alle Metriken unter dem Ziel

Details

Verwenden Sie Ihr Lasttest-Tool, um die Anzahl der Pods auf einen herunterskalieren, wenn alle Metriken unter dem Ziel für horizontal-pod-autoscaler-downscale-delay liegen.

  1. Geben Sie den folgenden Befehl ein.

     # kubectl describe hpa

    Sie sollten eine ähnliche Ausgabe wie die folgende erhalten.

         Name:                                                  hello-world
         Namespace:                                             default
         Labels:                                                <none>
         Annotations:                                           <none>
         CreationTimestamp:                                     Tue, 24 Jul 2018 18:01:11 +0200
         Reference:                                             Deployment/hello-world
         Metrics:                                               ( current / target )
           resource memory on pods:                             8101888 / 100Mi
           "cpu_system" on pods:                                8m / 20m
           resource cpu on pods  (as a percentage of request):  0% (0) / 50%
         Min replicas:                                          1
         Max replicas:                                          10
         Conditions:
           Type            Status  Reason              Message
           ----            ------  ------              -------
           AbleToScale     True    SucceededRescale    the HPA controller was able to update the target scale to 1
           ScalingActive   True    ValidMetricFound    the HPA was able to successfully calculate a replica count from memory resource
           ScalingLimited  False   DesiredWithinRange  the desired count is within the acceptable range
         Events:
           Type    Reason             Age   From                       Message
           ----    ------             ----  ----                       -------
           Normal  SuccessfulRescale  10m    horizontal-pod-autoscaler  New size: 2; reason: cpu resource utilization (percentage of request) above target
           Normal  SuccessfulRescale  8m    horizontal-pod-autoscaler  New size: 3; reason: pods metric cpu_system above target
           Normal  SuccessfulRescale  5m    horizontal-pod-autoscaler  New size: 4; reason: cpu resource utilization (percentage of request) above target
           Normal   SuccessfulRescale             13s               horizontal-pod-autoscaler  New size: 1; reason: All metrics below target
  2. Geben Sie den folgenden Befehl ein, um zu bestätigen, dass ein einzelner Pod ausgeführt wird.

         # kubectl get pods

    Sie sollten eine Ausgabe erhalten, die der folgenden Ausgabe ähnelt.

         NAME                           READY     STATUS    RESTARTS   AGE
         hello-world-54764dfbf8-q6l82   1/1       Running   0          6h