Neste tutorial, pode configurar o ajuste automático com base numa das seguintes métricas:
Pub/Sub
Atraso do Pub/Sub
Dimensione com base numa métrica externa que comunique o número de mensagens não reconhecidas restantes numa subscrição do Pub/Sub. Isto pode reduzir eficazmente a latência antes de se tornar um problema, mas pode usar relativamente mais recursos do que o dimensionamento automático com base na utilização da CPU.
Métrica personalizada
Métrica Prometheus personalizada
Escalar com base numa métrica personalizada definida pelo utilizador, exportada no formato Prometheus através do Prometheus gerido pela Google. A sua métrica do Prometheus tem de ser do tipo Gauge.
O dimensionamento automático consiste fundamentalmente em encontrar um equilíbrio aceitável entre o custo e a latência. Pode experimentar uma combinação destas métricas e de outras para encontrar uma política que funcione para si.
Implementar o adaptador de métricas personalizadas
O adaptador de métricas personalizadas permite que o cluster envie e receba métricas com o Cloud Monitoring.
Pub/Sub
O procedimento de instalação do adaptador de métricas personalizadas difere para clusters com ou sem a Workload Identity Federation para o GKE ativada. Selecione a opção correspondente à configuração que escolheu quando criou o cluster.
Workload Identity
Conceda ao utilizador a capacidade de criar funções de autorização necessárias:
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin --user "$(gcloud config get-value account)"
Implemente o adaptador de métricas personalizadas no cluster:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml
O adaptador usa a conta de serviço do Kubernetes no espaço de nomes custom-metrics
.custom-metrics-stackdriver-adapter
Permita que esta conta de serviço leia as métricas do Cloud Monitoring atribuindo a função de Leitor de monitorização:
gcloud projects add-iam-policy-binding projects/$PROJECT_ID \
--role roles/monitoring.viewer \
--member=principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/custom-metrics/sa/custom-metrics-stackdriver-adapter
Autenticação antiga
Conceda ao utilizador a capacidade de criar funções de autorização necessárias:
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin --user "$(gcloud config get-value account)"
Implemente o adaptador de métricas personalizadas no cluster:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml
Métrica personalizada
O procedimento de instalação do adaptador de métricas personalizadas difere para clusters com ou sem a Workload Identity Federation para o GKE ativada. Selecione a opção correspondente à configuração que escolheu quando criou o cluster.
Workload Identity
Conceda ao utilizador a capacidade de criar funções de autorização necessárias:
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin --user "$(gcloud config get-value account)"
Implemente o adaptador de métricas personalizadas no cluster:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml
O adaptador usa a conta de serviço do Kubernetes no espaço de nomes custom-metrics
.custom-metrics-stackdriver-adapter
Permita que esta conta de serviço leia as métricas do Cloud Monitoring atribuindo a função de Leitor de monitorização:
gcloud projects add-iam-policy-binding projects/$PROJECT_ID \
--role roles/monitoring.viewer \
--member=principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/custom-metrics/sa/custom-metrics-stackdriver-adapter
Autenticação antiga
Conceda ao utilizador a capacidade de criar funções de autorização necessárias:
kubectl create clusterrolebinding cluster-admin-binding \
--clusterrole cluster-admin --user "$(gcloud config get-value account)"
Implemente o adaptador de métricas personalizadas no cluster:
kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/k8s-stackdriver/master/custom-metrics-stackdriver-adapter/deploy/production/adapter_new_resource_model.yaml
Implementar uma aplicação com métricas
Transfira o repositório que contém o código da aplicação para este tutorial:
Pub/Sub
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
cd kubernetes-engine-samples/databases/cloud-pubsub
Métrica personalizada
git clone https://github.com/GoogleCloudPlatform/kubernetes-engine-samples.git
cd kubernetes-engine-samples/observability/custom-metrics-autoscaling/google-managed-prometheus
O repositório contém código que exporta métricas para o Cloud Monitoring:
Pub/Sub
Esta aplicação consulta uma subscrição do Pub/Sub para novas mensagens, confirmando-as à medida que chegam. As métricas de subscrição do Pub/Sub são recolhidas automaticamente pelo Cloud Monitoring.
Métrica personalizada
Esta aplicação responde a qualquer pedido Web para o caminho /metrics
com uma métrica de valor constante usando o formato Prometheus.
O repositório também contém um manifesto do Kubernetes para implementar a aplicação no seu cluster. Uma implementação é um objeto da API Kubernetes que lhe permite executar várias réplicas de pods distribuídos entre os nós num cluster.
Pub/Sub
O manifesto difere para clusters com ou sem a Workload Identity Federation para o GKE ativada. Selecione a opção correspondente à configuração escolhida quando criou o cluster.
Workload Identity
Autenticação antiga
Métrica personalizada
Com o recurso PodMonitoring, o Google Cloud Managed Service for Prometheus exporta as métricas do Prometheus para o Cloud Monitoring:
A partir da versão 1.27 do GKE Standard ou da versão 1.25 do GKE Autopilot, o Google Cloud Managed Service for Prometheus está ativado. Para ativar o Google Cloud Managed Service for Prometheus em clusters de versões anteriores, consulte o artigo Ative a recolha gerida.
Implemente a aplicação no cluster:
Pub/Sub
O procedimento para implementar a sua aplicação difere para clusters com ou sem a Workload Identity Federation para o GKE ativada. Selecione a opção correspondente à configuração que escolheu quando criou o cluster.
Workload Identity
Ative a API Pub/Sub no seu projeto:
gcloud services enable cloudresourcemanager.googleapis.com pubsub.googleapis.com
Crie um tópico e uma subscrição do Pub/Sub:
gcloud pubsub topics create echo gcloud pubsub subscriptions create echo-read --topic=echo
Implemente a aplicação no cluster:
kubectl apply -f deployment/pubsub-with-workload-identity.yaml
Esta aplicação define uma conta de serviço do
pubsub-sa
Kubernetes. Atribua-lhe a função de subscritor do Pub/Sub para que a aplicação possa publicar mensagens no tópico do Pub/Sub.gcloud projects add-iam-policy-binding projects/$PROJECT_ID \ --role=roles/pubsub.subscriber \ --member=principal://iam.googleapis.com/projects/$PROJECT_NUMBER/locations/global/workloadIdentityPools/$PROJECT_ID.svc.id.goog/subject/ns/default/sa/pubsub-sa
O comando anterior usa um identificador principal, que permite ao IAM referir-se diretamente a uma conta de serviço do Kubernetes.
Prática recomendada: Use identificadores principais, mas considere a limitação na descrição de um método alternativo.
Autenticação antiga
Ative a API Pub/Sub no seu projeto:
gcloud services enable cloudresourcemanager.googleapis.com pubsub.googleapis.com
Crie um tópico e uma subscrição do Pub/Sub:
gcloud pubsub topics create echo gcloud pubsub subscriptions create echo-read --topic=echo
Crie uma conta de serviço com acesso ao Pub/Sub:
gcloud iam service-accounts create autoscaling-pubsub-sa gcloud projects add-iam-policy-binding $PROJECT_ID \ --member "serviceAccount:autoscaling-pubsub-sa@$PROJECT_ID.iam.gserviceaccount.com" \ --role "roles/pubsub.subscriber"
Transfira o ficheiro da chave da conta de serviço:
gcloud iam service-accounts keys create key.json \ --iam-account autoscaling-pubsub-sa@$PROJECT_ID.iam.gserviceaccount.com
Importe a chave de conta de serviço para o cluster como um segredo:
kubectl create secret generic pubsub-key --from-file=key.json=./key.json
Implemente a aplicação no cluster:
kubectl apply -f deployment/pubsub-with-secret.yaml
Métrica personalizada
kubectl apply -f custom-metrics-gmp.yaml
Depois de aguardar um momento para que a aplicação seja implementada, todos os pods atingem o estado Ready
:
Pub/Sub
kubectl get pods
Saída:
NAME READY STATUS RESTARTS AGE
pubsub-8cd995d7c-bdhqz 1/1 Running 0 58s
Métrica personalizada
kubectl get pods
Saída:
NAME READY STATUS RESTARTS AGE
custom-metrics-gmp-865dffdff9-x2cg9 1/1 Running 0 49s
Ver métricas no Cloud Monitoring
À medida que a aplicação é executada, escreve as suas métricas no Cloud Monitoring.
Para ver as métricas de um recurso monitorizado através do Metrics Explorer, faça o seguinte:
-
Na Google Cloud consola, aceda à página leaderboard Explorador de métricas:
Se usar a barra de pesquisa para encontrar esta página, selecione o resultado cujo subtítulo é Monitorização.
- No elemento Métrica, expanda o menu Selecionar uma métrica e, de seguida,
selecione um tipo de recurso e um tipo de métrica. Por exemplo, para criar um gráfico da utilização da CPU de uma máquina virtual, faça o seguinte:
- (Opcional) Para reduzir as opções do menu, introduza parte do nome da métrica na
barra de filtros. Para este exemplo, introduza
utilization
. - No menu Recursos ativos, selecione Instância de VM.
- No menu Categorias de métricas ativas, selecione Instância.
- No menu Métricas ativas, selecione Utilização da CPU e, de seguida, clique em Aplicar.
- (Opcional) Para reduzir as opções do menu, introduza parte do nome da métrica na
barra de filtros. Para este exemplo, introduza
Para filtrar as séries cronológicas apresentadas, use o elemento Filtro.
Para combinar séries cronológicas, use os menus no elemento Agregação. Por exemplo, para apresentar a utilização da CPU das suas VMs, com base na respetiva zona, defina o primeiro menu como Média e o segundo menu como zona.
Todas as séries cronológicas são apresentadas quando o primeiro menu do elemento Agregação está definido como Não agregado. As predefinições do elemento Agregação são determinadas pelo tipo de métrica que selecionou.
O tipo de recurso e as métricas são os seguintes:
Pub/Sub
Tipo de recurso: pubsub_subscription
Métrica: pubsub.googleapis.com/subscription/num_undelivered_messages
Métrica personalizada
Tipo de recurso: prometheus_target
Métrica: prometheus.googleapis.com/custom_prometheus/gauge
Consoante a métrica, pode ainda não ver muita atividade no Explorador de métricas do Cloud Monitoring. Não se surpreenda se a sua métrica não estiver a ser atualizada.
Criar um objeto HorizontalPodAutoscaler
Quando vir a sua métrica no Cloud Monitoring, pode implementar um
HorizontalPodAutoscaler
para redimensionar a sua implementação com base na métrica.
Pub/Sub
Métrica personalizada
Implemente o HorizontalPodAutoscaler
no seu cluster:
Pub/Sub
kubectl apply -f deployment/pubsub-hpa.yaml
Métrica personalizada
kubectl apply -f custom-metrics-gmp-hpa.yaml
A gerar carga
Para algumas métricas, pode ter de gerar carga para observar o ajuste de escala automático:
Pub/Sub
Publicar 200 mensagens no tópico Pub/Sub:
for i in {1..200}; do gcloud pubsub topics publish echo --message="Autoscaling #${i}"; done
Métrica personalizada
Não aplicável: o código usado nesta amostra exporta um valor constante de 40
para a métrica personalizada. O HorizontalPodAutoscaler está definido com um valor de destino de 20
, pelo que tenta dimensionar automaticamente a implementação.
Pode ter de aguardar alguns minutos para que o HorizontalPodAutoscaler responda às alterações das métricas.
Observar o aumento da escala do HorizontalPodAutoscaler
Pode verificar o número atual de réplicas da sua implementação executando o seguinte comando:
kubectl get deployments
Depois de dar algum tempo para a métrica ser propagada, a implementação cria cinco pods para processar o backlog.
Também pode inspecionar o estado e a atividade recente do HorizontalPodAutoscaler executando o seguinte comando:
kubectl describe hpa