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.
Important
As funcionalidades em versão preliminar do AKS estão disponíveis de forma optativa e por autoatendimento. As versões prévias são fornecidas “no estado em que se encontram” e “conforme disponíveis” e são excluídas dos contratos de nível de serviço e da garantia limitada. As versões prévias do AKS são parcialmente cobertas pelo suporte ao cliente em uma base de melhor esforço. Dessa forma, esses recursos não são destinados ao uso em produção. Para obter mais informações, consulte os seguintes artigos:
Durante as atualizações do cluster AKS, o processo de atualização esvazia os nós removendo os pods para que possa reinstalar ou substituir os nós. Os PDBs (Orçamentos de Interrupção do Pod) protegem a disponibilidade do aplicativo durante esse processo, limitando o número de pods que podem ficar indisponíveis ao mesmo tempo. No entanto, PDBs configurados incorretamente também podem impedir completamente o desalojamento, ou as implantações podem não ter réplicas suficientes para atender ao orçamento. Implantações sem PDB têm o problema inverso: nada protege pods contra a remoção simultânea, o que pode gerar tempo de inatividade durante atualizações.
O gerenciamento automático de PDB é uma extensão do AKS, baseada no projeto de software livre, que automatiza o gerenciamento de PDB durante as atualizações. Isso:
- Cria PDBs automaticamente para implantações sem um PDB; assim, suas cargas de trabalho ficam protegidas durante interrupções voluntárias.
- Aumenta temporariamente as réplicas quando um PDB bloqueia a remoção de pods em um nó isolado, de modo que o orçamento de interrupção é atendido e a drenagem pode continuar.
- Reduz novamente o número de réplicas após a conclusão das remoções, impedindo que você pague por capacidade adicional além do que a atualização exige.
O resultado é que as atualizações são concluídas com confiabilidade sem que você tenha de contornar à força as proteções do PDB ou resolver manualmente os nós em quarentena. Para saber mais sobre como as atualizações do AKS esvaziam os nós e como os PDBs afetam esse processo, veja Como as atualizações de cluster do AKS funcionam.
Quando usar o gerenciamento automático do PDB
Considere habilitar o gerenciamento automático do PDB quando:
- As implantações não possuem PDBs. Os pods são removidos sem garantias de disponibilidade durante as atualizações, o que pode causar tempo de inatividade.
- PDBs bloqueiam a drenagem de nós. Um PDB com
minAvailableigual à contagem réplicas (oumaxUnavailable: 0) impede a remoção de um pod, levando à falha da atualização com um erro comoCannot evict pod as it would violate the pod's disruption budget. - As réplicas são insuficientes para o orçamento de interrupção. O PDB existe e está configurado corretamente, mas a implantação não tem réplicas suficientes para absorver nem mesmo uma remoção.
- Você enfrenta falhas frequentes de esvaziamento durante a atualização e deseja uma solução automatizada e proativa em vez de limpeza manual.
Identificar falhas de drenagem relacionadas ao PDB
Antes de habilitar o gerenciamento automático do PDB, verifique se o cluster está enfrentando falhas de drenagem relacionadas ao PDB:
log de atividades do Azure. No portal Azure, abra o recurso de cluster do AKS e selecione o log de atividades. Procure operações de atualização com falha com status
Failede mensagens referenciem orçamentos de interrupção do pod ou erros de remoção.Eventos do Kubernetes. Execute o seguinte comando para localizar eventos recentes de remoção e drenagem:
kubectl get events --sort-by='.lastTimestamp' -A | grep -i "disruption\|evict\|drain"Para obter um guia completo sobre como trabalhar com eventos do Kubernetes, consulte os eventos do Kubernetes.
Como ele se compara a outras opções
| Approach | Behavior | Compromisso |
|---|---|---|
| Forçar atualização | Ignora totalmente as proteções do PDB | Risco de remoção simultânea do pod e interrupção de serviço |
| Comportamento de nó não drenável | Isolamentos e quarentenas bloquearam nós; a atualização continua em outros nós | Requer a limpeza manual de nós em quarentena após a atualização |
| Superprovisionamento | Execute de forma permanente réplicas de implantação extras (mais pods do que a carga de trabalho precisa) para que um PDB sempre tenha espaço para permitir a remoção | Custo contínuo para a capacidade do pod de aplicativo que só é necessária durante atualizações |
| Gerenciamento automático do PDB (versão prévia) | Cria PDBs para implantações desprotegidas e aumenta temporariamente o número de réplicas para atender às restrições dos PDBs e, em seguida, o reduz novamente | Requer a extensão; adiciona capacidade transitória somente durante o dreno |
Como funciona
O gerenciamento automático de PDB tem dois comportamentos complementares: criação automática de PDB (proativa) e escalonamento de réplicas durante o esvaziamento (reativo).
Criação automática do PDB
Quando você habilita a criação automática do PDB (controllerConfig.pdb.create=true), a extensão observa continuamente as implantações que não têm um PDB. A extensão determina se há correspondência comparando o seletor de rótulo do PDB com os rótulos do modelo de pod do Deployment. Essa comparação garante que cada implantação seja protegida apenas uma vez e evite PDBs duplicados. Quando encontra uma implantação desprotegida em um namespace habilitado, ela cria um PDB. Para implantações sem HPA ou KEDA, minAvailable é definido como a contagem de réplicas atual da implantação. Para implantações com HPA ou KEDA, minAvailable acompanha o número mínimo de réplicas do autoscaler para que o comportamento do PDB permaneça alinhado com as restrições do autoscaler. A extensão reconcilia continuamente PDBs criados automaticamente, portanto, se a contagem de réplicas da implantação for alterada (por exemplo, por meio de uma atualização manual ou de um dimensionador externo), o valor do minAvailable PDB será atualizado para corresponder. Essa proteção garante que os pods não sejam removidos ao mesmo tempo durante interrupções voluntárias.
Os PDBs criados automaticamente são gerenciados pela extensão durante todo o ciclo de vida. Para obter detalhes sobre propriedade, limpeza e como assumir manualmente o controle, consulte propriedade e limpeza do PDB.
Observação
O gerenciamento automático de PDB coordena-se com segurança com o HPA e o KEDA quando cada implantação é gerenciada por um único escalador automático. Para obter detalhes sobre como a extensão interage com cada uma delas, incluindo uma configuração sem suporte, consulte Coordenação com dimensionadores automáticos (HPA e KEDA).
Escalonamento de réplicas durante a drenagem
A extensão monitora seu cluster para identificar situações em que pods protegidos por PDB não podem ser removidos durante operações de drenagem de nós. Veja o que acontece durante uma atualização típica:
- O AKS isola um nó como parte do processo de atualização, marcando-o como não agendável.
- A extensão detecta o isolamento e verifica se os pods protegidos pelo PDB nesse nó não têm interrupções permitidas.
-
Se o PDB bloquear a remoção, a extensão aumentará temporariamente a contagem de réplicas da implantação pelo número de pods protegidos pelo PDB em nós isolados (até o limite configurado
maxSurgeda implantação), garantindo que o aumento seja dimensionado corretamente e você não provisione demais. As réplicas extras são agendadas em outros nós disponíveis. -
As interrupções permitidas pelo PDB sobem acima de zero porque o número total de pods íntegros agora excede o limite
minAvailabledo PDB. - A drenagem de nós prossegue normalmente. A API de remoção agora pode remover pods do nó isolado sem violar o PDB.
- Depois que os sinais de remoção param e as interrupções permitidas aumentam acima de zero, a extensão redimensiona a implantação para a contagem original de réplicas. A redução de escala não prosseguirá se ainda houver mais nós marcados como indisponíveis para agendamento ou se a drenagem estiver em andamento. Essa condição impede a rotatividade desnecessária durante drenagens de vários nós. A redução de escala ocorre automaticamente após um período de espera (o padrão é 60 segundos), sem necessidade de intervenção manual.
Observação
O gerenciamento automático do PDB atua apenas em interrupções voluntárias, como drenagens de atualização e operações manuais de isolamento/drenagem. Ele não reage a falhas de nós, falhas de pods ou outras interrupções involuntárias.
Coordenação com dimensionadores automáticos (HPA e KEDA)
As implantações geralmente são gerenciadas por um dimensionador automático. Para evitar condições de corrida em que o dimensionador automático reduz novamente a implantação antes do término de remoções, a extensão ajusta o mínimo do dimensionador automático (não apenas a contagem de réplicas) e reverte a alteração quando a drenagem é concluída.
| Configuração | Como a extensão aumenta | Como a extensão é revertida | Notes |
|---|---|---|---|
| Apenas implantação | Aumenta diretamente a replicas da implantação. |
Restaura o número original de réplicas após o período de espera. | Comportamento padrão quando nenhum dimensionador automático é anexado. |
| Deployment + HPA | Eleva o mínimo minReplicas do HPA e adiciona logo uma réplica para que o HPA não reduza a escala no meio da drenagem e não aguarde o ciclo de métricas. |
Restaura o valor original minReplicas; o HPA faz a redução de escala de forma natural. |
Coordenação segura com um único HPA. |
| Implantação + KEDA | Aumenta o minReplicaCount no ScaledObject e adiciona uma réplica imediatamente porque o KEDA tem um salto extra de latência (o KEDA sincroniza com seu HPA e, depois, o HPA sincroniza com a implantação). |
Restaura o minReplicaCount original; o KEDA e o HPA cuidam da redução de escala. |
Coordenação segura com um único KEDA ScaledObject. |
| Implantação + KEDA + um HPA independente | Sem suporte. KEDA já cria seu próprio HPA; assim, um segundo HPA gera gravações conflitantes na mesma implantação. | A extensão é marcada como Degraded no status EvictionAutoScaler e não escala porque não consegue coordenar com segurança dois dimensionadores automáticos escrevendo no mesmo destino. |
Inspecione o status do recurso EvictionAutoScaler e remova o HPA extra para corrigir o problema. |
Para verificar a visão da extensão de uma implantação, incluindo o status Degraded devido a uma configuração de dimensionador automático sem suporte:
kubectl get evictionautoscalers -A -o yaml
Pré-requisitos
Antes de instalar a extensão de gerenciamento automático do PDB, verifique se você tem o seguinte:
- Um cluster do AKS executando uma versão do Kubernetes com suporte.
- Cargas de trabalho que usam Deployments. Não há suporte para StatefulSets e não é recomendável usar o gerenciamento automático de PDB com StatefulSets.
- CLI do Azure versão 2.64.0 ou posterior. Execute
az --versionpara verificar. Para instalar ou atualizar, consulte Instalar CLI do Azure. - O provedor
Microsoft.KubernetesConfigurationregistrado em sua assinatura. - O cluster do AKS deve usar uma identidade gerenciada (não uma principal de serviço). As extensões de cluster não funcionam com clusters baseados em entidade de serviço. Para obter mais informações, consulte extensões de cluster do AKS.
Observação
O gerenciamento automático de PDB age somente sobre Orçamentos de Interrupção de Pod e o número de réplicas de implantações. É ortogonal para configurações de atualização do pool de nós, como max-surge, tempo limite de drenagem de nó, tempo de imersão do nó e a estratégia de atualização (rolagem versus azul-verde). Qualquer configuração de pool de nós que funcione para o cluster continua funcionando com essa extensão habilitada.
Permissões de extensão
A extensão de gerenciamento automático de PDB requer permissões para ler e escrever Deployments, Pod Disruption Budgets e Events nos namespaces que ela gerencia. A extensão instala sua própria conta de serviço e funções RBAC durante a instalação. Para obter a lista completa de funções e permissões, consulte o repositório de projetos no GitHub.
Registrar o provedor de configuração
Se você ainda não usou as extensões do Azure Kubernetes, registre o provedor necessário:
az feature register --namespace Microsoft.KubernetesConfiguration --name Extensions
# Verify registration status
az feature show --namespace Microsoft.KubernetesConfiguration --name Extensions
# After the feature shows "Registered", refresh the provider
az provider register -n Microsoft.KubernetesConfiguration
Instalar o gerenciamento automático do PDB
O gerenciamento automático de PDB é instalado como uma extensão no cluster do AKS. Escolha uma opção de instalação com base em suas necessidades.
Instalação básica
Instale a extensão com configurações padrão. Nesse modo, a extensão observa remoções bloqueadas pelo PDB no kube-system namespace, mas não cria automaticamente PDBs para implantações desprotegidas. O kube-system namespace é incluído por padrão porque os componentes do sistema gerenciado pelo AKS também usam PDBs que podem bloquear drenos de nós durante as atualizações:
az k8s-extension create \
--cluster-name <cluster-name> \
--cluster-type managedClusters \
--extension-type microsoft.evictionautoscaler \
--name eviction-autoscaler \
--resource-group <resource-group-name> \
--release-train stable \
--auto-upgrade-minor-version true
Instalar com a criação automática do PDB para namespaces específicos
Habilite a criação automática do PDB e especifique quais namespaces a extensão deve proteger. Essa é a configuração recomendada para a maioria dos clusters:
az k8s-extension create \
--cluster-name <cluster-name> \
--cluster-type managedClusters \
--extension-type microsoft.evictionautoscaler \
--name eviction-autoscaler \
--resource-group <resource-group-name> \
--release-train stable \
--configuration-settings controllerConfig.pdb.create=true controllerConfig.namespaces.actionedNamespaces="{kube-system,production}" \
--auto-upgrade-minor-version true
Instalar com proteção em todo o cluster
Habilite a criação automática do PDB em todos os namespaces:
az k8s-extension create \
--cluster-name <cluster-name> \
--cluster-type managedClusters \
--extension-type microsoft.evictionautoscaler \
--name eviction-autoscaler \
--resource-group <resource-group-name> \
--release-train stable \
--configuration-settings controllerConfig.pdb.create=true controllerConfig.namespaces.enabledByDefault=true \
--auto-upgrade-minor-version true
Opções de configuração
As configurações a seguir controlam como o gerenciamento automático de PDB se comporta:
| Setting | Description | Default |
|---|---|---|
controllerConfig.pdb.create |
Crie automaticamente PDBs para implantações que não têm um. | false |
controllerConfig.namespaces.enabledByDefault |
Habilite o gerenciamento automático de PDB em todos os namespaces, incluindo namespaces que já existem e todos os namespaces criados posteriormente. | false |
controllerConfig.namespaces.actionedNamespaces |
Lista separada por vírgulas de namespaces para habilitar quando enabledByDefault for false. Não há um limite rígido no número de namespaces, mas o limite de tamanho do objeto da API kubernetes (aproximadamente 1 MiB por objeto) se aplica. |
{kube-system} |
Padrões de configuração comuns
| Pattern | Settings | Caso de uso |
|---|---|---|
| Conservador |
pdb.create=false, enabledByDefault=false, actionedNamespaces={kube-system} |
Você gerencia PDBs manualmente e deseja dimensionamento automático apenas para cargas de trabalho do sistema. |
| Proteção automática direcionada (recomendado) |
pdb.create=true, enabledByDefault=false, actionedNamespaces={production,staging} |
Você deseja a criação automática de PDB e o escalonamento automático em namespaces específicos. |
| Proteção em todo o cluster |
pdb.create=true, enabledByDefault=true |
Você deseja que todos os namespaces sejam protegidos automaticamente. |
| Somente monitoramento |
pdb.create=false, enabledByDefault=true |
Você deseja usar escalonamento automático em todos os namespaces, mas gerenciar os PDBs por conta própria. |
Controle de namespace
A extensão opera em um dos dois modos, dependendo da enabledByDefault configuração.
Dois controles complementares regem em quais namespaces a extensão atua:
-
controllerConfig.namespaces.actionedNamespacesdefine a lista de linhas de base no momento da instalação e é a maneira mais fácil de habilitar um conjunto conhecido de namespaces. - A anotação de namespace
eviction-autoscaler.azure.com/enable(oudisable) permite que os operadores do cluster incluam ou excluam namespaces em tempo de execução, sem reinstalar a extensão.
Modo de aceitação (padrão)
Quando enabledByDefault estiver false, somente os namespaces listados em actionedNamespaces estarão habilitados. Você pode habilitar namespaces adicionais individualmente adicionando uma anotação:
apiVersion: v1
kind: Namespace
metadata:
name: my-namespace
annotations:
eviction-autoscaler.azure.com/enable: "true"
Modo de recusa
Quando enabledByDefault estiver true, todos os espaços de nomes estarão habilitados. Você pode excluir namespaces específicos adicionando uma anotação:
apiVersion: v1
kind: Namespace
metadata:
name: my-excluded-namespace
annotations:
eviction-autoscaler.azure.com/enable: "false"
Excluir implantações específicas
Para impedir que a extensão crie um PDB para uma implantação específica, adicione a seguinte anotação à implantação:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-deployment
annotations:
eviction-autoscaler.azure.com/pdb-create: "false"
Observação
O gerenciamento automático de PDB ignora automaticamente a criação do PDB para implantações que têm maxUnavailable (diferente de 0) em sua estratégia de atualização sem interrupção, porque essas implantações já toleram algum nível de tempo de inatividade.
Criação automática do PDB
Quando controllerConfig.pdb.create definido como true, a extensão cria PDBs para implantações que atendem a todos os seguintes critérios:
- A implantação ainda não possui um PDB correspondente.
- A implantação está em um namespace habilitado.
- A implantação não é excluída via anotação
eviction-autoscaler.azure.com/pdb-create: "false".
PDBs criados automaticamente com minAvailable com base na fonte de dimensionamento da carga de trabalho. Para implantações sem HPA ou KEDA, minAvailable corresponde ao número atual de réplicas da implantação (excluindo quaisquer réplicas excedentes adicionadas pela extensão). Para implantações com HPA ou KEDA, minAvailable corresponde ao limite mínimo de réplicas do autoscaler. Isso significa que a remoção é bloqueada até que a extensão expanda a implantação, momento em que as réplicas extras atendem ao orçamento e permitem que a drenagem prossiga.
Propriedade e limpeza do PDB
PDBs criados pela extensão são marcados com uma ownedBy: EvictionAutoScaler anotação. Esses PDBs de propriedade do controlador são excluídos automaticamente quando:
- A implantação principal é excluída.
- O namespace é removido do escopo da extensão.
- A extensão é removida do cluster. PDBs com a anotação
ownedBy: EvictionAutoScalersão removidos pela coleta de lixo do Kubernetes.
PDBs criados manualmente nunca são modificados ou excluídos pela extensão.
Para assumir o controle manual de um PDB criado pela extensão, remova a anotação de propriedade. Depois de remover essa anotação, a extensão não gerencia mais esse PDB e você é responsável por atualizá-la ou excluí-la:
kubectl annotate pdb <pdb-name> -n <namespace> ownedBy-
Verificar a instalação
Depois de instalar a extensão, verifique se o gerenciamento automático do PDB está funcionando corretamente.
Verifique se os PDBs foram criados para implantações em namespaces habilitados. Filtro para PDBs criados pela extensão:
kubectl get pdb -A -o custom-columns=NAME:.metadata.name,NAMESPACE:.metadata.namespace,MIN-AVAILABLE:.spec.minAvailable,OWNER:.metadata.annotations.ownedBy | grep EvictionAutoScalerVerifique os recursos personalizados de gerenciamento automático do PDB:
kubectl get evictionautoscalers --all-namespacesTeste com um isolamento de nó (opcional). Em um ambiente de teste ou preparo, isole um nó e verifique se a extensão aumenta a implantação e as interrupções permitidas do PDB aumentam acima de zero:
# Cordon a node NODE=$(kubectl get pods -n <namespace> -l app=<app-label> -o=jsonpath='{.items[0].spec.nodeName}') kubectl cordon $NODE # Watch for automatic PDB management events kubectl get events -n <namespace> --sort-by='.lastTimestamp' # Check that the deployment scaled up kubectl get pods -n <namespace> # Verify PDB allowed disruptions kubectl get poddisruptionbudget <pdb-name> -n <namespace> -o yaml # After verification, uncordon the node kubectl uncordon $NODE
Atualizar ou remover a extensão
Atualizar configuração
Para alterar as configurações, exclua e recrie a extensão com as novas configurações:
# Delete the existing extension
az k8s-extension delete \
--resource-group <resource-group-name> \
--cluster-name <cluster-name> \
--cluster-type managedClusters \
--name eviction-autoscaler \
--yes
# Recreate with new configuration
az k8s-extension create \
--cluster-name <cluster-name> \
--cluster-type managedClusters \
--extension-type microsoft.evictionautoscaler \
--name eviction-autoscaler \
--resource-group <resource-group-name> \
--release-train stable \
--configuration-settings controllerConfig.pdb.create=true controllerConfig.namespaces.enabledByDefault=true \
--auto-upgrade-minor-version true
Remova a extensão
Para desinstalar o gerenciamento automático do PDB:
az k8s-extension delete \
--resource-group <resource-group-name> \
--cluster-name <cluster-name> \
--cluster-type managedClusters \
--name eviction-autoscaler \
--yes
Observação
Quando você remove a extensão, os PDBs criados automaticamente (marcados com a ownedBy: EvictionAutoScaler anotação) são limpos automaticamente. Para obter mais detalhes, confira propriedade e limpeza do PDB.
Limitações e considerações
- As atualizações de configuração exigem a exclusão e recriação da extensão.
- O gerenciamento automático do PDB funciona somente com Implantações . Não há suporte para StatefulSets e o uso dessa extensão com StatefulSets não é recomendado.
- O gerenciamento automático de PDB não substitui nem modifica PDBs existentes. Ele funciona em conjunto com eles ao ajustar o número de réplicas.
- O gerenciamento automático de PDB se coordena com um único dimensionador automático por implantação (HPA ou KEDA). Uma implantação gerenciada por KEDA e um HPA separado não tem suporte; a extensão marca a si mesma
Degradede ignora o aumento. Confira Coordenação com dimensionadores automáticos (HPA e KEDA). - O gerenciamento automático de PDB é independente das configurações de atualização de um pool de nós. Configurações como
max-surge, tempo limite de drenagem do nó, tempo de estabilização do nó e estratégia de atualização (rolagem versus azul-verde) não precisam ser alteradas para que essa extensão funcione, e a extensão não muda o comportamento dessas configurações. - O aumento temporário de réplicas requer capacidade disponível no cluster. Se nenhum nó tiver capacidade para os pods extras, considere habilitar o dimensionador automático de cluster ou o provisionamento automático de nós (NAP) para que novos nós possam ser provisionados.
Troubleshooting
Para obter sintomas, causas e resoluções, consulte o hub de solução de problemas do AKS: solucionar problemas Serviço de Kubernetes do Azure.
Para inspecionar a atividade de extensão diretamente no cluster, execute:
kubectl get evictionautoscalers -A -o yaml
kubectl get events -A --sort-by='.lastTimestamp'
Conteúdo relacionado
- Opções e recomendações de atualização – inclui o Cenário 2: falhas de drenagem de nós e PDBs, com várias opções de resolução.
- Como as atualizações de cluster do AKS funcionam – explica o processo de atualização sem interrupção passo a passo e o que acontece quando um PDB bloqueia a drenagem de nós.
- Práticas recomendadas para Pod Disruption Budgets (PDBs) — diretrizes sobre como configurar PDBs para alta disponibilidade.
- Documentação do Kubernetes: Pod Disruption Budgets — referência upstream para PDB.
- Projeto de gerenciamento automático do PDB em GitHub — código-fonte e referência técnica detalhada.