Este documento ha sido traducido utilizando tecnología de traducción automática. Si bien nos esforzamos por proporcionar traducciones precisas, no ofrecemos garantías sobre la integridad, precisión o confiabilidad del contenido traducido. En caso de discrepancia, la versión original en inglés prevalecerá y constituirá el texto autorizado.

Pruebas de HPAs con kubectl

Este documento describe cómo comprobar el estado de tus HPAs después de escalarlos hacia arriba o hacia abajo con tu herramienta de pruebas de carga. Para información sobre cómo comprobar el estado desde la interfaz de usuario de Rancher (al menos versión 2.3.x), consulta Gestionando HPAs con la interfaz de usuario de Rancher.

Para que el HPA funcione correctamente, las ampliaciones de servicio deben tener definiciones de solicitudes de recursos para los contenedores. Sigue este ejemplo de hello-world para probar si el HPA está funcionando correctamente.

  1. Configura kubectl para conectarte a tu clúster de Kubernetes.

  2. Copia el manifiesto de ampliación hello-world a continuación.

    Manifiesto de Hello World

    +

      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. Despliega esto en tu clúster.

     # kubectl create -f <HELLO_WORLD_MANIFEST>
  4. Copia uno de los HPAs a continuación según el tipo de métrica que estés utilizando:

    Hello World HPA: Métricas de Recursos

    +

       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. Visualiza la información y descripción del HPA. Confirma que se muestran los datos de la métrica.

    Métricas de Recursos
    1. Introduce los siguientes comandos. ` # kubectl get hpa NOMBRE REFERENCIA OBJETIVOS MINPODS MAXPODS REPLICAS EDAD hello-world Ampliación/hello-world 1253376 / 100Mi, 0% / 50% 1 10 1 6m # kubectl describe hpa Nombre: hello-world Espacio de nombres: default Etiquetas: <none> Anotaciones: <none> Marca de tiempo de creación: Lun, 23 Jul 2018 20:21:16 +0200 Referencia: Ampliación/hello-world Métricas: ( actual / objetivo ) recurso memoria en pods: 1253376 / 100Mi recurso CPU en pods (como un porcentaje de la solicitud): 0% (0) / 50% Réplicas mínimas: 1 Réplicas máximas: 10 Condiciones: Tipo Estado Razón Mensaje ---- ------ ------ ------- CapazDeEscalar Verdadero ListoParaNuevoEscalado el último tiempo de escalado fue suficientemente antiguo como para justificar un nuevo escalado EscaladoActivo Verdadero MétricaVálidaEncontrada el HPA pudo calcular con éxito un recuento de réplicas a partir del recurso de memoria EscaladoLimitado Falso DeseadoDentroDelRango el recuento deseado está dentro del rango aceptable Eventos: <none> `

  1. Introduce el siguiente comando. ` # kubectl describe hpa ` Deberías recibir la salida que sigue. ` Nombre: hello-world Espacio de nombres: default Etiquetas: <none> Anotaciones: <none> Marca de tiempo de creación: Mar, 24 Jul 2018 18:36:28 +0200 Referencia: Ampliación/hello-world Métricas: ( actual / objetivo ) recurso memoria en pods: 3514368 / 100Mi "CPU_sistema" en pods: 0 / 20m recurso CPU en pods (como un porcentaje de la solicitud): 0% (0) / 50% Réplicas mínimas: 1 Réplicas máximas: 10 Condiciones: Tipo Estado Razón Mensaje ---- ------ ------ ------- CapazDeEscalar Verdadero ListoParaNuevoEscalado el último tiempo de escalado fue suficientemente antiguo como para justificar un nuevo escalado EscaladoActivo Verdadero MétricaVálidaEncontrada el HPA pudo calcular con éxito un recuento de réplicas a partir del recurso de memoria EscaladoLimitado Falso DeseadoDentroDelRango el recuento deseado está dentro del rango aceptable Eventos: <none> `

  1. Genera una carga para el servicio para probar que tus pods se escalan automáticamente como se pretende. Puedes usar cualquier herramienta de prueba de carga (Hey, Gatling, etc.), pero estamos usando Hey.

  2. Prueba que el escalado automático de pods funciona como se pretende.

    Para probar la escalabilidad automática utilizando métricas de recursos:

    Aumentar a 2 Pods: Uso de CPU hasta el objetivo

    Utiliza tu herramienta de pruebas de carga para aumentar a dos pods basándote en el uso de CPU.

    1. Visualiza tu HPA.

       # kubectl describe hpa

      Deberías recibir una salida similar a la que sigue.

       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. Introduce el siguiente comando para confirmar que has escalado a dos pods.

         # kubectl get pods

      Deberías recibir una salida similar a la que sigue:

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

Utiliza tu herramienta de pruebas de carga para aumentar a 3 pods basándote en el uso de CPU con horizontal-pod-autoscaler-upscale-delay establecido en 3 minutos.

  1. Introduce el siguiente comando.

    # kubectl describe hpa

    Deberías recibir una salida similar a la que sigue

       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. Introduce el siguiente comando para confirmar que tres pods están en funcionamiento.

    # kubectl get pods

    Deberías recibir una salida similar a la que sigue.

       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
Reducir a 1 Pod: Todas las métricas por debajo del objetivo

Utiliza tu herramienta de pruebas de carga para reducir a 1 pod cuando todas las métricas estén por debajo del objetivo durante horizontal-pod-autoscaler-downscale-delay (5 minutos por defecto).

  1. Introduce el siguiente comando.

       # kubectl describe hpa

    Deberías recibir una salida similar a la que sigue.

       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

+ Para probar la escalabilidad automática utilizando métricas personalizadas:

+ .Aumentar a 2 Pods: Uso de CPU hasta el objetivo

Details

Utiliza tu herramienta de pruebas de carga para aumentar a dos pods basándote en el uso de CPU.

  1. Introduce el siguiente comando. ` # kubectl describe hpa ` Deberías recibir una salida similar a la que sigue. ` Nombre: hello-world Espacio de nombres: default Etiquetas: <none> Anotaciones: <none> Marca de tiempo de creación: Mar, 24 Jul 2018 18:01:11 +0200 Referencia: Ampliación/hello-world Métricas: ( actual / objetivo ) recurso memoria en pods: 8159232 / 100Mi "CPU_sistema" en pods: 7m / 20m recurso CPU en pods (como un porcentaje de la solicitud): 64% (321m) / 50% Réplicas mínimas: 1 Réplicas máximas: 10 Condiciones: Tipo Estado Razón Mensaje ---- ------ ------ ------- CapazDeEscalar Verdadero EscaladoExitoso el controlador HPA pudo actualizar la escala objetivo a 2 EscaladoActivo Verdadero MétricaVálidaEncontrada el HPA pudo calcular con éxito un recuento de réplicas a partir de la utilización de recursos de CPU (porcentaje de la solicitud) EscaladoLimitado Falso DeseadoDentroDelRango el recuento deseado está dentro del rango aceptable Eventos: Tipo Razón Edad Desde Mensaje ---- ------ ---- ---- ------- Normal EscaladoExitoso 16s escalador-horizontal-de-pods Nuevo tamaño: 2; razón: utilización de recursos de CPU (porcentaje de la solicitud) por encima del objetivo `

  2. Introduce el siguiente comando para confirmar que dos pods están en ejecución. ` # kubectl get pods ` Deberías recibir una salida similar a la que sigue. ` NOMBRE LISTO ESTADO REINICIOS EDAD hello-world-54764dfbf8-5pfdr 1/1 Ejecutándose 0 3s hello-world-54764dfbf8-q6l82 1/1 Ejecutándose 0 6h `

Aumentar a 3 Pods: Uso de CPU hasta el objetivo

Utiliza tu herramienta de pruebas de carga para aumentar a tres pods cuando el límite de uso de CPU_sistema esté en el objetivo. .. Introduce el siguiente comando.

+

# kubectl describe hpa

+ Deberías recibir una salida similar a la que sigue:

+

   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. Introduce el siguiente comando para confirmar que tres pods están en funcionamiento.

    # kubectl get pods

    Deberías recibir una salida similar a la que sigue:

       # 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
Aumentar a 4 Pods: Uso de CPU hasta el objetivo

Utiliza tu herramienta de pruebas de carga para aumentar a cuatro pods basándote en el uso de CPU. horizontal-pod-autoscaler-upscale-delay está configurado en tres minutos por defecto.

  1. Introduce el siguiente comando. ` # kubectl describe hpa ` Deberías recibir una salida similar a la que sigue. ` Nombre: hello-world Espacio de nombres: default Etiquetas: <none> Anotaciones: <none> Marca de tiempo de creación: Mar, 24 Jul 2018 18:01:11 +0200 Referencia: Deployment/hola-mundo Métricas: ( actual / objetivo ) recurso memoria en pods: 8374272 / 100Mi "cpu_system" en pods: 27m / 20m recurso CPU en pods (como porcentaje de la solicitud): 71% (357m) / 50% Réplicas mínimas: 1 Réplicas máximas: 10 Condiciones: Tipo Estado Razón Mensaje ---- ------ ------ ------- AbleToScale Verdadero SucceededRescale el controlador HPA pudo actualizar la escala objetivo a 3 ScalingActive Verdadero ValidMetricFound el HPA pudo calcular con éxito un recuento de réplicas a partir de la utilización de recursos de CPU (porcentaje de la solicitud) ScalingLimited Falso DesiredWithinRange el recuento deseado está dentro del rango aceptable Eventos: Tipo Razón Edad Desde Mensaje ---- ------ ---- ---- ------- Normal SuccessfulRescale 5m horizontal-pod-autoscaler Nuevo tamaño: 2; razón: utilización de recursos de CPU (porcentaje de la solicitud) por encima del objetivo Normal SuccessfulRescale 3m horizontal-pod-autoscaler Nuevo tamaño: 3; razón: métrica de pods cpu_system por encima del objetivo Normal SuccessfulRescale 4s horizontal-pod-autoscaler Nuevo tamaño: 4; razón: utilización de recursos de CPU (porcentaje de la solicitud) por encima del objetivo `

  2. Introduce el siguiente comando para confirmar que cuatro pods están en ejecución.

    # kubectl get pods

    Deberías recibir una salida similar a la que sigue.

      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
Reducir a 1 Pod: Todas las métricas por debajo del objetivo

Utiliza tu herramienta de pruebas de carga para reducir a un pod cuando todas las métricas estén por debajo del objetivo para horizontal-pod-autoscaler-downscale-delay.

  1. Introduce el siguiente comando.

     # kubectl describe hpa

    Deberías recibir una salida similar a la que sigue.

         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. Introduce el siguiente comando para confirmar que un solo pod está en ejecución.

         # kubectl get pods

    Deberías recibir una salida similar a la que sigue.

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