Melhores Práticas do Dimensionador Automático
Saiba mais sobre as melhores práticas para usar o Kubernetes Cluster Autoscaler (CA), Horizontal Pod Autoscaler (HPA) e Vertical Pod Autoscaler (VPA) com clusters que você criou pelo Kubernetes Engine (OKE).
Esta seção contém as melhores práticas para usar o Kubernetes Cluster Autoscaler (CA), Horizontal Pod Autoscaler (HPA) e Vertical Pod Autoscaler (VPA) com clusters criados pelo Kubernetes Engine.
O dimensionamento automático é uma maneira de dimensionar dinamicamente (para cima e para baixo) o número de recursos de computação que estão sendo alocados para um aplicativo, com base nas necessidades do aplicativo. Você pode usar:
- o Kubernetes Cluster Autoscaler para redimensionar automaticamente os pools de nós de um cluster com base nas demandas de carga de trabalho do aplicativo.
- o Kubernetes Horizontal Pod Autoscaler para dimensionar automaticamente o número de pods em uma implantação.
- o Kubernetes Vertical Pod Autoscaler para ajustar automaticamente as solicitações e os limites de recursos (como atributos de CPU e Memória) de contêineres executados em pods de uma implantação.
Para obter mais informações, consulte Dimensionando Automaticamente Pools e Pods de Nós do Kubernetes.
Melhores Práticas: Gerencie manualmente pelo menos um pool de nós para complementos críticos de cluster
Recomendamos que você sempre tenha pelo menos um pool de nós em um cluster que não seja gerenciado pelo Kubernetes Cluster Autoscaler. Este pool de nós é necessário para executar complementos críticos do cluster. Observe também que é sua responsabilidade dimensionar manualmente todos os pools de nós que não são gerenciados pelo Kubernetes Cluster Autoscaler.
Também recomendamos que você programe pods de aplicativo para serem executados em pools de nós do usuário e execute pods críticos do sistema (como pods coredns) em pools de nós do sistema dedicados. Separar pods de aplicativo e pods de sistema dessa maneira evita que pods de aplicativo desonestos eliminem acidentalmente pods de sistema. Imponha esse comportamento usando a mancha CriticalAddonsOnly=true:NoSchedule
para pools de nós do sistema.
Consulte Usando o Kubernetes Cluster Autoscaler.
Melhores Práticas: Definir várias réplicas
Recomendamos que você sempre defina várias réplicas para a implantação do Kubernetes Cluster Autoscaler no arquivo de configuração. Se houver apenas uma réplica e ela for removida e não puder ser reprogramada, o Kubernetes Cluster Autoscaler não poderá criar mais nós de trabalho.
Consulte Usando o Kubernetes Cluster Autoscaler.
Melhores Práticas: Definir max-node-provision-time
Recomendamos que você defina max-node-provision-time
como 25 minutos no arquivo de configuração. Normalmente, novos nós de trabalho são provisionados e movidos para a condição Pronto em muito menos tempo do que isso. No entanto, quando muitos nós são adicionados a um pool de nós ao mesmo tempo, pode levar mais tempo para provisioná-los. Observe que a Console exibe uma advertência ao lado dos nós de trabalho que levam mais de 20 minutos para serem inicializados.
Consulte Usando o Kubernetes Cluster Autoscaler.
Melhores Práticas: Especifique o número máximo de nós em um pool de nós
Recomendamos que você especifique o número máximo de nós permitidos no pool de nós no arquivo de configuração. Certifique-se de que o número máximo de nós especificado não exceda o limite da tenancy para a forma do nó de trabalho definida para o pool de nós. O Kubernetes Cluster Autoscaler nunca criará mais nós do que o limite da tenancy. Se você especificar um número maior que o limite da tenancy, o Kubernetes Cluster Autoscaler tentará periodicamente criar nós adicionais, mas não o fará enquanto o limite da tenancy não tiver sido aumentado.
Ao definir clusters que você deseja que o Kubernetes Cluster Autoscaler gerencie, recomendamos criar vários pools de nós com um domínio de disponibilidade especificado por pool de nós.
Consulte Usando o Kubernetes Cluster Autoscaler.
Melhores Práticas: Especifique vários pools de nós com um domínio de disponibilidade diferente para cada pool de nós
Recomendamos que você especifique vários pools de nós (com um domínio de disponibilidade diferente para cada pool de nós) ao definir clusters que você deseja que o Kubernetes Cluster Autoscaler gerencie.
A especificação de vários pools de nós em diferentes domínios de disponibilidade reduz a probabilidade de o Kubernetes Cluster Autoscaler não conseguir criar nós de trabalho porque uma forma de nó selecionada não está disponível em um domínio de disponibilidade específico.
Consulte Usando o Kubernetes Cluster Autoscaler.
Melhores Práticas: Use reservas de capacidade para provisionar nós de trabalho
Recomendamos que você use reservas de capacidade para provisionar nós de trabalho. O uso de reservas de capacidade garante que a capacidade de computação esteja disponível para cargas de trabalho quando necessário durante eventos críticos, como recuperação de desastres ou picos inesperados de carga de trabalho.
Consulte Usando Reservas de Capacidade para Provisionar Nós Gerenciados.
Melhores Práticas: Projete aplicativos que aproveitem orçamentos de interrupção de pod
Recomendamos que você projete aplicativos para que tolerem as interrupções que podem ocorrer quando o Kubernetes Cluster Autoscaler remove nós de trabalho ou move pods para outro nó de trabalho antes de remover um nó de trabalho subutilizado.
Por exemplo, projete aplicativos que aproveitem os orçamentos de interrupção do pod.
Consulte Especificando um Orçamento de Interrupção para seu Aplicativo na documentação do Kubernetes.
Melhores Práticas: Evite configurar manualmente pools de nós gerenciados pelo Kubernetes Cluster Autoscaler
Evite alterar manualmente os pools de nós gerenciados pelo Kubernetes Cluster Autoscaler. Por exemplo, não adicione ou remova nós usando kubectl
ou usando a Console (ou a CLI ou API do Oracle Cloud Infrastructure). O Kubernetes Cluster Autoscaler poderá substituir essas alterações ou as alterações poderão modificar seu comportamento.
Se você quiser remover todos os nós de um pool de nós gerenciado pelo Kubernetes Cluster Autoscaler, sempre use o Kubernetes Cluster Autoscaler para escalar o pool de nós para zero.
Consulte Usando o Kubernetes Cluster Autoscaler.
Melhores Práticas: Evite usar o Kubernetes Horizontal Pod Autoscaler e o Vertical Pod Autoscaler juntos
Recomendamos que você não use o Horizontal Pod Autoscaler e o Vertical Pod Autoscaler juntos.
O Vertical Pod Autoscaler ajusta automaticamente a configuração de solicitações e limites e visa reduzir custos indiretos e obter economia de custos.
O Horizontal Pod Autoscaler dimensiona o número de pods com base na utilização de CPU ou memória ou em outras métricas. O Horizontal Pod Autoscaler tem maior probabilidade de aumentar em vez de diminuir o número de pods.
Se você usar o Horizontal Pod Autoscaler e o Vertical Pod Autoscaler juntos, verifique novamente se suas respectivas políticas não estão interferindo umas nas outras.
Melhores Práticas: Crie recomendações sem aplicá-las durante o desenvolvimento de aplicativos
Recomendamos que você considere o uso do Vertical Pod Autoscaler quando estiver nos estágios iniciais de criação de um aplicativo, simplesmente para criar recomendações (sem atualizar pods).
Para simplesmente criar recomendações sem aplicá-las, defina updateMode: "Off"
na seção updatePolicy
do manifesto VerticalPodAutoscaler
. Quando os pods são criados, o Vertical Pod Autoscaler analisa as necessidades de CPU e memória dos contêineres e registra essas recomendações no campo Status
. O Vertical Pod Autoscaler não executa qualquer ação para atualizar as solicitações de recursos para os contêineres em execução.