Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
À medida que o tráfego de entrada aumenta, ele se torna crucial para escalar verticalmente seus aplicativos com base na demanda.
Esse artigo explica como você pode usar a métrica AvgRequestCountPerHealthyHost
no Gateway de Aplicativo do Azure para dimensionar pods do Azure Kubernetes Service (AKS) para um aplicativo. A métrica AvgRequestCountPerHealthyHost
mede a média de solicitações enviadas para uma combinação específica de um pool de backend e uma configuração HTTP de backend.
Use os dois componentes a seguir:
- Adaptador de métricas do Azure Kubernetes: use este componente para expor métricas do Application Gateway por meio do servidor de métricas. É um projeto de código aberto no Azure, semelhante ao Gateway de Aplicativo do Azure Controlador de entrada.
- Horizontal Pod Autoscaler: use esse componente para aplicar métricas do Gateway de Aplicativo do Azure e direcionar uma implantação para escala.
Observação
O Adaptador de Métricas do Kubernetes do Azure não é mais mantido. O KEDA (Dimensionamento Automático Controlado por Eventos) do Kubernetes é uma alternativa.
Dica
Considere o Gateway de Aplicativo do Azure para contêineres para sua solução de entrada no Kubernetes. Para obter mais informações, veja Dimensionamento e disponibilidade do Gateway de Aplicativo do Azure para contêineres.
Configurar o Adaptador de Métricas do Azure Kubernetes
Crie uma entidade de serviço do Microsoft Entra e atribua a ela
Monitoring Reader
acesso sobre o grupo de recursos da implantação do Gateway de Aplicativo do Azure:applicationGatewayGroupName="<application-gateway-group-id>" applicationGatewayGroupId=$(az group show -g $applicationGatewayGroupName -o tsv --query "id") az ad sp create-for-rbac -n "azure-k8s-metric-adapter-sp" --role "Monitoring Reader" --scopes applicationGatewayGroupId
Implante o Adaptador de Métricas do Azure Kubernetes usando a entidade de serviço do Microsoft Entra que você criou anteriormente:
kubectl create namespace custom-metrics # use values from service principal created previously to create secret kubectl create secret generic azure-k8s-metrics-adapter -n custom-metrics \ --from-literal=azure-tenant-id=<tenantid> \ --from-literal=azure-client-id=<clientid> \ --from-literal=azure-client-secret=<secret> kubectl apply -f kubectl apply -f https://raw.githubusercontent.com/Azure/azure-k8s-metrics-adapter/master/deploy/adapter.yaml -n custom-metrics
Crie um
ExternalMetric
recurso com o nomeappgw-request-count-metric
. Esse recurso instrui o adaptador de métrica a expor aAvgRequestCountPerHealthyHost
métrica para omyApplicationGateway
recurso nomyResourceGroup
grupo de recursos. Você pode usar o campofilter
para direcionar um pool de backend específico e uma configuração HTTP de backend na implantação do Gateway de Aplicativo do Azure.apiVersion: azure.com/v1alpha2 kind: ExternalMetric metadata: name: appgw-request-count-metric spec: type: azuremonitor azure: resourceGroup: myResourceGroup # replace with your Application Gateway deployment's resource group name resourceName: myApplicationGateway # replace with your Application Gateway deployment's name resourceProviderNamespace: Microsoft.Network resourceType: applicationGateways metric: metricName: AvgRequestCountPerHealthyHost aggregation: Average filter: BackendSettingsPool eq '<backend-pool-name>~<backend-http-setting-name>' # optional
Agora você pode fazer uma solicitação ao servidor de métricas para ver se a nova métrica está sendo exposta:
kubectl get --raw "/apis/external.metrics.k8s.io/v1beta1/namespaces/default/appgw-request-count-metric"
# Sample Output
# {
# "kind": "ExternalMetricValueList",
# "apiVersion": "external.metrics.k8s.io/v1beta1",
# "metadata":
# {
# "selfLink": "/apis/external.metrics.k8s.io/v1beta1/namespaces/default/appgw-request-count-metric",
# },
# "items":
# [
# {
# "metricName": "appgw-request-count-metric",
# "metricLabels": null,
# "timestamp": "2019-11-05T00:18:51Z",
# "value": "30",
# },
# ],
# }
Use a nova métrica para ampliar a implantação
Depois de expor appgw-request-count-metric
por meio do servidor de métricas, você estará pronto para usar o Horizontal Pod Autoscaler para dimensionar sua implantação de destino.
O exemplo a seguir tem como alvo uma implantação de amostra denominada aspnet
. Você aumenta os pods quando cada pod appgw-request-count-metric
é 200
criado, até um máximo de 10
pods.
Substitua o nome da implantação de destino e aplique a seguinte configuração de dimensionamento automático:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: deployment-scaler
spec:
scaleTargetRef:
apiVersion: networking.k8s.io/v1
kind: Deployment
name: aspnet # replace with your deployment's name
minReplicas: 1
maxReplicas: 10
metrics:
- type: External
external:
metricName: appgw-request-count-metric
targetAverageValue: 200
Teste sua configuração usando uma ferramenta de teste de carga como o ApacheBench:
ab -n10000 http://<application-gateway-ip-address>/