Solucionar problemas do complemento de dimensionamento automático controlado por eventos do Kubernetes

Este artigo discute como solucionar problemas do complemento keda (dimensionamento automático controlado por eventos) do Kubernetes para o AKS (Microsoft Serviço de Kubernetes do Azure). Ao implantar o suplemento KEDA AKS, você poderá ter problemas associados à configuração do dimensionador automático do aplicativo. Este artigo ajudará você a solucionar erros e resolve problemas comuns que afetam o complemento, mas não são abordados no guia oficial de perguntas frequentes e solução de problemas do KEDA.

Pré-requisitos

Suporte ao suplemento KEDA

O suplemento KEDA segue um modelo de suporte semelhante a outros complementos do AKS. Todos os dimensionadores KEDA do Azure têm suporte, mas o AKS não dá suporte a scalers de terceiros. Se você encontrar problemas com scalers de terceiros, abra um problema no repositório oficial keda GitHub.

Lista de verificação de solução de problemas

Verifique e solução de problemas de componentes KEDA usando as instruções nas seções a seguir.

Verificar a versão keda disponível

Você pode determinar a versão keda disponível usando o comando kubectl get :

kubectl get crd/scaledobjects.keda.sh -o custom-columns='APP:.metadata.labels.app\.kubernetes\.io/version'

A saída de comando exibe a versão instalada do KEDA:

APP
2.8.1

Verifique se o firewall de cluster está configurado corretamente

O KEDA pode não escalar aplicativos com êxito porque não pode iniciar.

Quando você marcar os logs do operador, você pode encontrar entradas de erro que se assemelham ao seguinte texto:

1.6545953013458195e+09 ERROR Failed to get API Group-Resources {"error": "Get \"https://10.0.0.1:443/api?timeout=32s\": EOF"}
sigs.k8s.io/controller-runtime/pkg/cluster.New
/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.2/pkg/cluster/cluster.go:160
sigs.k8s.io/controller-runtime/pkg/manager.New
/go/pkg/mod/sigs.k8s.io/controller-runtime@v0.11.2/pkg/manager/manager.go:313
main.main
/workspace/main.go:87
runtime.main
/usr/local/go/src/runtime/proc.go:255
1.6545953013459463e+09 ERROR setup unable to start manager {"error": "Get \"https://10.0.0.1:443/api?timeout=32s\": EOF"}
main.main
/workspace/main.go:97
runtime.main
/usr/local/go/src/runtime/proc.go:255

Na seção servidor de métrica, você pode descobrir que o KEDA não pode iniciar:

I0607 09:53:05.297924 1 main.go:147] keda_metrics_adapter "msg"="KEDA Version: 2.7.1"
I0607 09:53:05.297979 1 main.go:148] keda_metrics_adapter "msg"="KEDA Commit: "
I0607 09:53:05.297996 1 main.go:149] keda_metrics_adapter "msg"="Go Version: go1.17.9"
I0607 09:53:05.298006 1 main.go:150] keda_metrics_adapter "msg"="Go OS/Arch: linux/amd64"
E0607 09:53:15.344324 1 logr.go:279] keda_metrics_adapter "msg"="Failed to get API Group-Resources" "error"="Get \"https://10.0.0.1:443/api?timeout=32s\": EOF"
E0607 09:53:15.344360 1 main.go:104] keda_metrics_adapter "msg"="failed to setup manager" "error"="Get \"https://10.0.0.1:443/api?timeout=32s\": EOF"
E0607 09:53:15.344378 1 main.go:209] keda_metrics_adapter "msg"="making provider" "error"="Get \"https://10.0.0.1:443/api?timeout=32s\": EOF"
E0607 09:53:15.344399 1 main.go:168] keda_metrics_adapter "msg"="unable to run external metrics adapter" "error"="Get \"https://10.0.0.1:443/api?timeout=32s\": EOF"

Esse cenário provavelmente significa que o complemento keda não é capaz de iniciar devido a um firewall mal configurado. Para garantir que o KEDA seja executado corretamente, configure o firewall para atender às regras de rede necessárias do Azure Global.

Habilitar o complemento para clusters com instalações keda de código aberto autogerenciadas

Em teoria, você pode instalar o KEDA muitas vezes, embora o Kubernetes permita que apenas um servidor de métrica seja instalado. No entanto, não recomendamos várias instalações porque apenas uma instalação funcionaria.

Quando o suplemento KEDA for instalado em um cluster do AKS, a instalação anterior do KEDA de código aberto será substituída e o complemento assumirá o controle. Nesse cenário, a personalização e a configuração da implantação auto-instalada do KEDA serão perdidas e não serão mais aplicadas.

Embora o dimensionamento automático existente possa continuar operacional, essa situação introduz um risco. O complemento KEDA será configurado de forma diferente e não oferecerá suporte a recursos como identidade gerenciada. Para evitar erros durante a instalação, recomendamos desinstalar instalações keda existentes antes de habilitar o complemento KEDA.

Para determinar qual adaptador de métricas é usado pelo KEDA, execute o kubectl get comando:

kubectl get APIService/v1beta1.external.metrics.k8s.io -o custom-columns='NAME:.spec.service.name,NAMESPACE:.spec.service.namespace'

Uma visão geral mostra o serviço e o namespace que o Kubernetes usará para obter métricas:

NAME                              NAMESPACE
keda-operator-metrics-apiserver   kube-system

Aviso

Se o namespace não kube-systemestiver , o complemento do AKS está sendo ignorado e outro servidor de métrica está sendo usado.

Como reiniciar pods de operador KEDA quando a identidade da carga de trabalho não é injetada corretamente

Se você estiver usando ID de carga de trabalho do Microsoft Entra e habilitar o KEDA antes que o ID de carga de trabalho seja usado, reinicie os pods do operador KEDA. Isso garante que as variáveis de ambiente corretas sejam injetadas. Para fazer isso, siga estas etapas:

  1. Reinicie os pods executando o seguinte comando:

    kubectl rollout restart deployment keda-operator -n kube-system
    
  2. Obtenha pods de operador KEDA executando o comando a seguir e localize pods com nomes começando com 'keda-operator'.

    kubectl get pod -n kube-system
    
  3. Para verificar se as variáveis de ambiente foram injetadas com êxito, execute o seguinte comando:

    kubectl describe pod <keda-operator-pod-name> -n kube-system
    

    Se as variáveis tiverem sido injetadas com êxito, você deverá ver valores para AZURE_TENANT_ID, AZURE_FEDERATED_TOKEN_FILEe AZURE_AUTHORITY_HOST na seção Ambiente .

Aviso de isenção de responsabilidade para informações de terceiros

Os produtos de terceiros mencionados neste artigo são produzidos por empresas independentes da Microsoft. A Microsoft não oferece nenhuma garantia, implícita ou não, do desempenho ou da confiabilidade desses produtos.

Entre em contato conosco para obter ajuda

Se você tiver dúvidas ou precisar de ajuda, crie uma solicitação de suporte ou peça ajuda à comunidade de suporte do Azure. Você também pode enviar comentários sobre o produto para a comunidade de comentários do Azure.