Opções de dimensionamento para aplicações no Serviço Kubernetes do Azure (AKS)
Ao executar aplicações no Azure Kubernetes Service (AKS), poderá ter de aumentar ou diminuir a quantidade de recursos de computação. À medida que altera o número de instâncias de aplicação que tem, poderá ter de alterar o número de nós do Kubernetes subjacentes. Também poderá ter de aprovisionar um grande número de instâncias de aplicações adicionais.
Este artigo apresenta os principais conceitos de dimensionamento de aplicações do AKS, incluindo o dimensionamento manual de pods ou nós, a utilização do dimensionador automático de pods horizontal, a utilização do Dimensionador automático de clusters e a integração com Azure Container Instances (ACI).
Dimensionar pods ou nós manualmente
Pode dimensionar manualmente réplicas ou pods e nós para testar a forma como a sua aplicação responde a uma alteração nos recursos e no estado disponíveis. O dimensionamento manual de recursos permite-lhe definir uma quantidade definida de recursos a utilizar para manter um custo fixo, como o número de nós. Para dimensionar manualmente, defina a contagem de réplicas ou nós. Em seguida, a API do Kubernetes agenda a criação de pods adicionais ou a drenagem de nós com base nessa contagem de réplicas ou nós.
Ao reduzir verticalmente os nós, a API do Kubernetes chama a API de Computação do Azure relevante associada ao tipo de computação utilizado pelo cluster. Por exemplo, para clusters criados com base em Conjuntos de Dimensionamento de Máquinas Virtuais, a lógica para selecionar os nós a remover é determinada pela API de Conjuntos de Dimensionamento de Máquinas Virtuais. Para saber mais sobre como os nós são selecionados para remoção na redução vertical, veja as FAQ do Conjuntos de Dimensionamento de Máquinas Virtuais.
Para começar a dimensionar manualmente pods e nós, veja Dimensionar aplicações no AKS.
Dimensionador automático de pods horizontal
O Kubernetes utiliza o dimensionador automático de pods horizontal (HPA) para monitorizar a procura de recursos e dimensionar automaticamente o número de pods. Por predefinição, o HPA verifica a API de Métricas a cada 15 segundos quanto a quaisquer alterações necessárias na contagem de réplicas e a API de Métricas obtém dados do Kubelet a cada 60 segundos. Assim, o HPA é atualizado a cada 60 segundos. Quando são necessárias alterações, o número de réplicas é aumentado ou diminuído em conformidade. O HPA funciona com clusters do AKS que implementaram o Servidor de Métricas para Kubernetes 1.8 ou superior.
Quando configura o HPA para uma determinada implementação, define o número mínimo e máximo de réplicas que podem ser executadas. Também pode definir a métrica para monitorizar e basear quaisquer decisões de dimensionamento, como a utilização da CPU.
Para começar a utilizar o dimensionador automático de pods horizontal no AKS, veja Dimensionamento automático de pods no AKS.
Resumo dos eventos de dimensionamento
Como o HPA é efetivamente atualizado a cada 60 segundos, os eventos de dimensionamento anteriores podem não ter sido concluídos com êxito antes de ser efetuada outra verificação. Este comportamento pode fazer com que o HPA altere o número de réplicas antes de o evento de dimensionamento anterior poder receber a carga de trabalho da aplicação e as exigências dos recursos ajustarem-se em conformidade.
Para minimizar os eventos de corrida, é definido um valor de atraso. Este valor define quanto tempo o HPA tem de aguardar após um evento de dimensionamento antes de outro evento de dimensionamento poder ser acionado. Este comportamento permite que a nova contagem de réplicas entre em vigor e a API de Métricas reflita a carga de trabalho distribuída. Não há atraso para eventos de aumento vertical a partir do Kubernetes 1.12. No entanto, o atraso predefinido nos eventos de redução vertical é de 5 minutos.
Dimensionador automático de cluster
Para responder à alteração das exigências dos pods, o dimensionador automático do cluster do Kubernetes ajusta o número de nós com base nos recursos de computação pedidos no conjunto de nós. Por predefinição, o dimensionador automático do cluster verifica o servidor da API de Métricas a cada 10 segundos para verificar se existem alterações necessárias na contagem de nós. Se o dimensionador automático do cluster determinar que é necessária uma alteração, o número de nós no cluster do AKS é aumentado ou diminuído em conformidade. O dimensionador automático de clusters funciona com clusters do AKS compatíveis com RBAC do Kubernetes que executam o Kubernetes 1.10.x ou superior.
Normalmente, o dimensionador automático de clusters é utilizado juntamente com o dimensionador automático de pods horizontal. Quando combinado, o dimensionador automático de pods horizontal aumenta ou diminui o número de pods com base na procura de aplicações e o dimensionador automático do cluster ajusta o número de nós para executar pods adicionais.
Para começar a utilizar o dimensionador automático de clusters no AKS, veja Cluster autoscaler on AKS (Dimensionador automático de clusters no AKS).
Aumentar horizontalmente eventos
Se um nó não tiver recursos de computação suficientes para executar um pod pedido, esse pod não pode progredir durante o processo de agendamento. O pod não pode ser iniciado a menos que estejam disponíveis recursos de computação adicionais no conjunto de nós.
Quando o dimensionador automático do cluster repara em pods que não podem ser agendados devido a restrições de recursos do conjunto de nós, o número de nós no conjunto de nós é aumentado para fornecer os recursos de computação adicionais. Quando esses nós adicionais são implementados com êxito e disponíveis para utilização no conjunto de nós, os pods são então agendados para serem executados nos mesmos.
Se a sua aplicação precisar de dimensionar rapidamente, alguns pods poderão permanecer num estado à espera de serem agendados até que os nós adicionais implementados pelo dimensionador automático do cluster possam aceitar os pods agendados. Para aplicações com elevadas exigências de expansão, pode dimensionar com nós virtuais e Azure Container Instances.
Dimensionar eventos
O dimensionador automático do cluster também monitoriza o estado de agendamento do pod para nós que não receberam recentemente novos pedidos de agendamento. Este cenário indica que o conjunto de nós tem mais recursos de computação do que o necessário e que o número de nós pode ser diminuído. Por predefinição, os nós que ultrapassam um limiar para já não serem necessários durante 10 minutos estão agendados para eliminação. Quando esta situação ocorre, os pods são agendados para serem executados noutros nós no conjunto de nós e o dimensionador automático do cluster diminui o número de nós.
As aplicações podem sofrer algumas interrupções, uma vez que os pods são agendados em nós diferentes quando o dimensionador automático do cluster diminui o número de nós. Para minimizar a interrupção, evite aplicações que utilizem uma única instância de pod.
Expandir para Azure Container Instances (ACI)
Para dimensionar rapidamente o cluster do AKS, pode integrar com o Azure Container Instances (ACI). O Kubernetes tem componentes incorporados para dimensionar a contagem de réplicas e nós. No entanto, se a sua aplicação precisar de dimensionar rapidamente, o dimensionador automático de pods horizontal poderá agendar mais pods do que os recursos de computação existentes no conjunto de nós. Se estiver configurado, este cenário acionaria o dimensionador automático do cluster para implementar nós adicionais no conjunto de nós, mas poderá demorar alguns minutos para que esses nós aprovisionem com êxito e permitam que o agendador do Kubernetes execute pods nos mesmos.
O ACI permite-lhe implementar rapidamente instâncias de contentor sem sobrecarga de infraestrutura adicional. Quando se liga ao AKS, o ACI torna-se uma extensão lógica segura do cluster do AKS. O componente de nós virtuais , baseado no Kubelet virtual, está instalado no cluster do AKS que apresenta o ACI como um nó virtual do Kubernetes. Em seguida, o Kubernetes pode agendar pods que são executados como instâncias do ACI através de nós virtuais e não como pods em nós de VM diretamente no cluster do AKS.
A sua aplicação não necessita de modificações para utilizar nós virtuais. As implementações podem ser dimensionadas entre o AKS e o ACI e sem atrasos, uma vez que o dimensionador automático do cluster implementa novos nós no cluster do AKS.
Os nós virtuais são implementados numa sub-rede adicional na mesma rede virtual que o cluster do AKS. Esta configuração de rede virtual protege o tráfego entre o ACI e o AKS. Tal como um cluster do AKS, uma instância do ACI é um recurso de computação lógica seguro isolado de outros utilizadores.
Passos seguintes
Para começar a utilizar aplicações de dimensionamento, siga o início rápido para criar um cluster do AKS com a CLI do Azure. Em seguida, pode começar a dimensionar manual ou automaticamente aplicações nos clusters do AKS com os seguintes recursos:
- Dimensionar pods ou nós manualmente
- Utilizar o dimensionador automático de pods horizontal
- Utilizar o dimensionador automático de clusters
Para obter mais informações sobre os principais conceitos do Kubernetes e do AKS, veja os seguintes artigos: