A combinação do Knative com o Horizontal Pod Autoscaler (HPA) permite que suas aplicações realizem dimensionamento automático com base na carga de recursos. O Knative já dimensiona conforme o volume de requisições, mas a extensão de dimensionamento automático do HPA possibilita ajustar com mais precisão o comportamento de escalonamento usando métricas adicionais, como utilização de CPU e memória.
Pré-requisitos
O Knative deve estar implantado no cluster. Para mais informações, consulte Deploy Knative in an ACK cluster.
Um cliente kubectl conectado ao cluster ACK. Para mais informações, consulte Connect to an ACK cluster using kubectl.
Para visualizar dados de monitoramento do Knative Service no painel de monitoramento do Knative, conecte o Knative ao Managed Service for Prometheus. Para mais informações, consulte Visualize the Knative service monitoring dashboard.
Etapa 1: Implantar um Knative Service
Faça login no ACK console. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster. No painel de navegação à esquerda, clique em .
-
Na página Knative, clique na aba Services, defina o Namespace como default, clique em Create from Template, cole o exemplo de YAML abaixo no modelo e clique em Create.
A configuração de exemplo a seguir cria um Service chamado
helloworld-go-hpa.apiVersion: serving.knative.dev/v1 kind: Service metadata: name: helloworld-go-hpa # Knative Service name. spec: template: metadata: labels: app: helloworld-go-hpa annotations: autoscaling.knative.dev/class: "hpa.autoscaling.knative.dev" # Specifies HPA as the autoscaling extension. autoscaling.knative.dev/metric: "cpu" # HPA scaling metric. Valid values: cpu and memory. This example uses cpu. autoscaling.knative.dev/target: "30" # The threshold for the HPA CPU metric. Knative HPA adjusts the number of replicas based on this threshold. autoscaling.knative.dev/minScale: "1" # The minimum number of instances for the elastic policy. autoscaling.knative.dev/maxScale: "4" # The maximum number of instances for the elastic policy. spec: containers: - image: registry.cn-hangzhou.aliyuncs.com/knative-sample/autoscale-go:v1024 resources: requests: cpu: '200m' -
Execute o comando abaixo para verificar se o Service está funcionando corretamente.
kubectl get ksvcSaída esperada:
NAME URL LATESTCREATED LATESTREADY READY REASON helloworld-go-hpa http://helloworld-go-hpa.default.example.com helloworld-go-hpa-00001 helloworld-go-hpa-00001 TrueA coluna
READYexibeTrue, o que indica que o Knative Service está operando normalmente.
Etapa 2: Ative o dimensionamento automático baseado em CPU
-
Instale a ferramenta de teste de carga Hey.
Para mais detalhes sobre a ferramenta de teste de carga Hey, consulte Hey.
-
Execute o comando a seguir para realizar um teste de carga enviando requisições ao Service a uma taxa de 100 consultas por segundo (QPS) durante 60 segundos.
NotaSubstitua
121.XX.XX.10pelo endereço IP ou nome de domínio do gateway.hey -z 60s -q 100 -host "helloworld-go-hpa.default.example.com" "http://121.XX.XX.10?prime=40000000" # 121.199.XXX.XXX is the IP address or domain name of the gateway.Durante o teste de carga, execute o comando abaixo para acompanhar o dimensionamento dos Pods em tempo real.
kubectl get pods --watchSaída esperada do dimensionamento de Pods:
NAME READY STATUS RESTARTS AGE # The Pod is running and its containers are ready. helloworld-go-hpa-00001-deployment-67cc8f979b-fxfl5 2/2 Running 0 101m # Pod count scales out to 4, and the status is 0/2 Pending, which means that the containers are waiting to be scheduled and allocated resources. helloworld-go-hpa-00001-deployment-67cc8f979b-kv6rj 0/2 Pending 0 0s helloworld-go-hpa-00001-deployment-67cc8f979b-fxq85 0/2 Pending 0 0s helloworld-go-hpa-00001-deployment-67cc8f979b-kv6rj 0/2 Pending 0 0s helloworld-go-hpa-00001-deployment-67cc8f979b-fxq85 0/2 Pending 0 0s # 4 Pods change to a status of 0/2 ContainerCreating, which indicates that the containers are being created. helloworld-go-hpa-00001-deployment-67cc8f979b-kv6rj 0/2 ContainerCreating 0 0s helloworld-go-hpa-00001-deployment-67cc8f979b-fxq85 0/2 ContainerCreating 0 0s helloworld-go-hpa-00001-deployment-67cc8f979b-kv6rj 0/2 ContainerCreating 0 0s helloworld-go-hpa-00001-deployment-67cc8f979b-fxq85 0/2 ContainerCreating 0 0s # 4 Pods change to statuses of 1/2 Running and 2/2 Running, which indicates that one or both containers are created and running. helloworld-go-hpa-00001-deployment-67cc8f979b-kv6rj 1/2 Running 0 1s helloworld-go-hpa-00001-deployment-67cc8f979b-kv6rj 2/2 Running 0 1s helloworld-go-hpa-00001-deployment-67cc8f979b-fxq85 1/2 Running 0 1s helloworld-go-hpa-00001-deployment-67cc8f979b-fxq85 2/2 Running 0 1sA saída demonstra que o Knative escala automaticamente conforme as requisições. Quando a carga do sistema aumenta e são necessários mais Pods para processá-las, a quantidade de Pods escala horizontalmente de 1 para 4, ampliando a capacidade de processamento e o throughput do sistema.
(Opcional) Etapa 3: Visualize o painel de monitoramento do Knative
O Knative oferece observabilidade pronta para uso. Na página Knative, clique na aba Monitoring Dashboards para acessar os dados de monitoramento do Service. Para mais informações sobre o painel de monitoramento, consulte Visualize the Knative service monitoring dashboard.

Referências
O Alibaba Cloud Knative implementa padrões Serverless ao integrar construção de contêineres (ou funções), gerenciamento de cargas de trabalho (dimensionamento dinâmico) e um modelo de eventos. Para saber mais sobre o Alibaba Cloud Knative, consulte Knative.
Para conhecer melhor os recursos do Alibaba Cloud Knative, consulte Comparison of Alibaba Cloud Knative and open-source Knative.