Este documento foi traduzido usando tecnologia de tradução automática de máquina. Sempre trabalhamos para apresentar traduções precisas, mas não oferecemos nenhuma garantia em relação à integridade, precisão ou confiabilidade do conteúdo traduzido. Em caso de qualquer discrepância, a versão original em inglês prevalecerá e constituirá o texto official.

Testando HPAs com kubectl

Este documento descreve como verificar o status dos seus HPAs após escalá-los para cima ou para baixo com sua ferramenta de teste de carga. Para informações sobre como verificar o status pela interface do Rancher (pelo menos versão 2.3.x), consulte Gerenciando HPAs com a interface do Rancher.

Para que o HPA funcione corretamente, as implantações de serviço devem ter definições de solicitação de recursos para os contêineres. Siga este exemplo hello-world para testar se o HPA está funcionando corretamente.

  1. Configure kubectl para se conectar ao seu cluster Kubernetes.

  2. Copie o manifesto de implantação hello-world abaixo.

    Manifesto 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. Implante-o em seu cluster.

     # kubectl create -f <HELLO_WORLD_MANIFEST>
  4. Copie um dos HPAs abaixo com base no tipo de métrica que você está usando:

    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. Visualize as informações e a descrição do HPA. Confirme que os dados da métrica estão sendo exibidos.

    Métricas de Recursos
    1. Digite os seguintes comandos. ` # kubectl get hpa NOME REFERÊNCIA ALVO MINPODS MAXPODS REPLICAS IDADE hello-world Deployment/hello-world 1253376 / 100Mi, 0% / 50% 1 10 1 6m # kubectl describe hpa Nome: hello-world Namespace: default Rótulos: <none> Anotações: <none> Carimbo de data/hora de criação: Seg, 23 Jul 2018 20:21:16 +0200 Referência: Implantação/hello-world
      Métricas: ( atual / alvo )
      recurso de memória nos pods: 1253376 / 100Mi
      recurso de CPU nos pods (como uma porcentagem do pedido): 0% (0) / 50%
      Réplicas mínimas: 1
      Réplicas máximas: 10
      Condições: Tipo Status Motivo Mensagem ---- ------ ------ -------
      CapazDeEscalar Verdadeiro ProntoParaNovoEscalonamento o último tempo de escalonamento foi suficientemente antigo para justificar um novo escalonamento
      EscalonamentoAtivo Verdadeiro MétricaVálidaEncontrada o HPA conseguiu calcular com sucesso uma contagem de réplicas a partir do recurso de memória
      EscalonamentoLimitado Falso DesejadoDentroDoIntervalo a contagem desejada está dentro do intervalo aceitável
      Eventos: <none>
      `

  1. Digite o seguinte comando.
    `
    # kubectl describe hpa
    `
    Você deve receber a saída que segue.
    `
    Nome: hello-world
    Namespace: default
    Rótulos: <none>
    Anotações: <none>
    Carimbo de data/hora de criação: Ter, 24 Jul 2018 18:36:28 +0200
    Referência: Implantação/hello-world
    Métricas: ( atual / alvo )
    recurso de memória nos pods: 3514368 / 100Mi "cpu_system" nos pods: 0 / 20m recurso de CPU nos pods (como uma porcentagem da solicitação): 0% (0) / 50%
    Réplicas mínimas: 1
    Réplicas máximas: 10
    Condições: Tipo Status Motivo Mensagem ---- ------ ------ -------
    CapazDeEscalar Verdadeiro ProntoParaNovoEscalonamento o último tempo de escalonamento foi suficientemente antigo para justificar um novo escalonamento
    EscalonamentoAtivo Verdadeiro MétricaVálidaEncontrada o HPA conseguiu calcular com sucesso uma contagem de réplicas a partir do recurso de memória
    EscalonamentoLimitado Falso DesejadoDentroDoIntervalo a contagem desejada está dentro do intervalo aceitável
    Eventos: <none>
    `

  1. Gere uma carga para o serviço para testar se seus pods escalam automaticamente como pretendido. Você pode usar qualquer ferramenta de teste de carga (Hey, Gatling, etc.), mas estamos usando Hey.

  2. Teste se o escalonamento automático de pods funciona como pretendido.

    Para Testar a Escala Automática Usando Métricas de Recursos:

    Aumentar para 2 Pods: Uso de CPU Até o Alvo

    Use sua ferramenta de teste de carga para aumentar para dois pods com base no uso de CPU.

    1. Visualize seu HPA.

       # kubectl describe hpa

      Você deve receber uma saída semelhante ao que segue.

       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. Digite o seguinte comando para confirmar que você escalou para dois pods.

         # kubectl get pods

      Você deve receber uma saída semelhante ao que segue:

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

Use sua ferramenta de teste de carga para aumentar para 3 pods com base no uso de CPU com horizontal-pod-autoscaler-upscale-delay definido para 3 minutos.

  1. Digite o seguinte comando.

    # kubectl describe hpa

    Você deve receber uma saída semelhante ao que segue

       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. Digite o seguinte comando para confirmar que três pods estão em execução.

    # kubectl get pods

    Você deve receber uma saída semelhante ao que segue.

       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
Diminuir para 1 Pod: Todas as Métricas Abaixo do Alvo

Use sua ferramenta de teste de carga para reduzir para 1 pod quando todas as métricas estiverem abaixo do alvo por horizontal-pod-autoscaler-downscale-delay (5 minutos por padrão).

  1. Digite o seguinte comando.

       # kubectl describe hpa

    Você deve receber uma saída semelhante ao que segue.

       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 Testar a Escala Automática Usando Métricas Personalizadas:

+ .Aumentar para 2 Pods: Uso de CPU Até o Alvo

Details

Use sua ferramenta de teste de carga para aumentar dois pods com base no uso de CPU.

  1. Digite o seguinte comando. ` # kubectl describe hpa ` Você deve receber uma saída semelhante ao que segue. ` Nome: hello-world Namespace: default Rótulos: <none> Anotações: <none> Carimbo de data/hora de criação: Ter, 24 Jul 2018 18:01:11 +0200 Referência: Implantação/hello-world Métricas: ( atual / alvo ) recurso de memória nos pods: 8159232 / 100Mi "cpu_system" nos pods: 7m / 20m recurso de CPU nos pods (como uma porcentagem da solicitação): 64% (321m) / 50% Réplicas mínimas: 1 Réplicas máximas: 10 Condições: Tipo Status Motivo Mensagem ---- ------ ------ ------- AbleToScale Verdadeiro SucceededRescale o controlador HPA conseguiu atualizar a escala alvo para 2 ScalingActive Verdadeiro ValidMetricFound o HPA conseguiu calcular com sucesso uma contagem de réplicas a partir da utilização do recurso de CPU (porcentagem do pedido) ScalingLimited Falso DesiredWithinRange a contagem desejada está dentro da faixa aceitável Eventos: Tipo Motivo Idade De Mensagem ---- ------ ---- ---- ------- Normal SuccessfulRescale 16s horizontal-pod-autoscaler Novo tamanho: 2; motivo: utilização do recurso CPU (porcentagem da solicitação) acima do alvo `

  2. Digite o seguinte comando para confirmar que dois pods estão em execução. ` # kubectl get pods ` Você deve receber uma saída semelhante ao que segue. ` NOME PRONTO STATUS REINÍCIOS IDADE hello-world-54764dfbf8-5pfdr 1/1 Em execução 0 3s hello-world-54764dfbf8-q6l82 1/1 Em execução 0 6h `

Aumentar para 3 Pods: Uso de CPU Até o Alvo

Use sua ferramenta de teste de carga para aumentar para três pods quando o limite de utilização de cpu_system estiver no alvo. .. Digite o seguinte comando.

+

# kubectl describe hpa

+ Você deve receber uma saída semelhante ao que segue:

+

   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. Digite o seguinte comando para confirmar que três pods estão em execução.

    # kubectl get pods

    Você deve receber uma saída semelhante ao que segue:

       # 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 para 4 Pods: Uso de CPU Até o Alvo

Use sua ferramenta de teste de carga para aumentar para quatro pods com base na utilização de CPU. horizontal-pod-autoscaler-upscale-delay é definido como três minutos por padrão.

  1. Digite o seguinte comando. ` # kubectl describe hpa ` Você deve receber uma saída semelhante ao que segue. ` Nome: hello-world Namespace: default Rótulos: <none> Anotações: <none> Carimbo de data/hora de criação: Ter, 24 Jul 2018 18:01:11 +0200 Referência: Implantação/hello-world Métricas: ( atual / alvo ) recurso de memória nos pods: 8374272 / 100Mi "cpu_system" nos pods: 27m / 20m recurso de CPU nos pods (como uma porcentagem da solicitação): 71% (357m) / 50% Réplicas mínimas: 1 Réplicas máximas: 10 Condições: Tipo Status Motivo Mensagem ---- ------ ------ ------- CapazDeEscalar Verdadeiro RedimensionamentoBemSucedido o controlador HPA conseguiu atualizar a escala alvo para 3 EscalonamentoAtivo Verdadeiro MétricaVálidaEncontrada o HPA conseguiu calcular com sucesso uma contagem de réplicas a partir da utilização do recurso de cpu (porcentagem da solicitação) EscalonamentoLimitado Falso DesejadoDentroDoIntervalo a contagem desejada está dentro do intervalo aceitável Eventos: Tipo Motivo Idade De Mensagem ---- ------ ---- ---- ------- Normal RedimensionamentoBemSucedido 5m horizontal-pod-autoscaler Novo tamanho: 2; razão: utilização do recurso de CPU (porcentagem da solicitação) acima do alvo Normal RedimensionamentoBemSucedido 3m horizontal-pod-autoscaler Novo tamanho: 3; razão: métrica de pods cpu_system acima do alvo Normal RedimensionamentoBemSucedido 4s horizontal-pod-autoscaler Novo tamanho: 4; razão: utilização do recurso de CPU (porcentagem da solicitação) acima do alvo `

  2. Digite o seguinte comando para confirmar que quatro pods estão em execução.

    # kubectl get pods

    Você deve receber uma saída semelhante ao que segue.

      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
Diminuir para 1 Pod: Todas as Métricas Abaixo do Alvo

Use sua ferramenta de teste de carga para reduzir para um pod quando todas as métricas estiverem abaixo do alvo para horizontal-pod-autoscaler-downscale-delay.

  1. Digite o seguinte comando.

     # kubectl describe hpa

    Você deve receber uma saída semelhante ao que segue.

         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. Digite o seguinte comando para confirmar que um único pod está em execução.

         # kubectl get pods

    Você deve receber uma saída semelhante ao que segue.

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