Práticas recomendadas para recursos do Agendador básico no serviço de Kubernetes do Azure (AKS)

À medida que você gerencia clusters no Serviço de Kubernetes do Azure (AKS), geralmente é necessário isolar equipes e cargas de trabalho. O agendador Kubernetes possibilita controlar a distribuição de recursos de computação ou limitar o impacto de eventos de manutenção.

Este artigo sobre práticas recomendadas se concentra em recursos de agendamento de Kubernetes básicos para os operadores do cluster. Neste artigo, você aprenderá como:

  • Cotas de uso de recursos para fornecer uma quantidade fixa de recursos para as equipes ou cargas de trabalho
  • Limitar o impacto da manutenção agendada usando os orçamentos de interrupção de pod

Enforce resource quotas

Orientação de melhor prática

Planejar e aplicar cotas de recursos no nível do namespace. Se os pods não definem limites e solicitações de recursos, rejeite a implantação. Monitorare o uso de recursos e ajuste as cotas conforme necessário.

Solicitações de recursos e limites são colocados na especificação de pod. Solicitações são usadas pelo agendador Kubernetes no momento da implantação para encontrar um nó disponível no cluster. Esses limites e solicitações funcionam no nível do pod individual. Para obter mais informações sobre como definir esses valores, consulte Definir solicitações de recurso de pod e limites.

Para fornecer uma maneira para reservar e limitar os recursos em uma equipe de desenvolvimento ou um projeto, você deve usar as cotas de recursos. Essas cotas são definidas em um namespace e podem ser usadas para definir cotas nas seguinte base:

  • Recursos de computação, como CPU e memória ou GPUs.
  • Recursos de armazenamento, incluindo o número total de volumes ou quantidade de espaço em disco para uma classe de armazenamento específica.
  • Contagem de objetos, como o número máximo de segredos, serviços ou trabalhos podem ser criados.

Kubernetes não sobrecarregam os recursos. Depois que o total da solicitação de recursos cumulativos passar a cota atribuída, todas as implantações adicionais não serão bem-sucedidas.

Quando você define as cotas de recursos, todos os pods criados no namespace devem fornecer limites ou solicitações em suas especificações de pod. Se eles não fornecerem esses valores, você pode rejeitar a implantação. Em vez disso, você pode configurar limites para um namespace e as solicitações padrão.

O manifesto YAML do exemplo a seguir chamado dev-app-team-quotas.yaml define um limite rígido de um total de 10 CPUs, Gi 20 de memória, e 10pods:

apiVersion: v1
kind: ResourceQuota
metadata:
  name: dev-app-team
spec:
  hard:
    cpu: "10"
    memory: 20Gi
    pods: "10"

Essa cota de recursos pode ser aplicada, especificando o namespace, tal como aplicativos de desenvolvimento:

kubectl apply -f dev-app-team-quotas.yaml --namespace dev-apps

Trabalhe com seus desenvolvedores de aplicativos e proprietários para entender suas necessidades e aplicar as cotas de recurso apropriado.

Para obter mais informações sobre objetos de recursos disponíveis, escopos e prioridades, consulte Cotas de recursos no Kubernetes.

Planejar a disponibilidade usando os orçamentos de interrupção de pod

Orientação de melhor prática

Para manter a disponibilidade de aplicativos, defina PDBs (orçamentos de interrupção de Pod) para garantir que um número mínimo de pods esteja disponível no cluster.

Há dois eventos de interrupção que fazem com que os pods sejam removidos:

Interrupções involuntárias

Interrupções involuntárias são eventos além do controle típico do operador de cluster ou o proprietário do aplicativo. Inclusão:

  • Falha de hardware no computador físico
  • Pane do kernel
  • Exclusão de uma máquina virtual de nó

Interrupções involuntárias podem ser atenuadas ao:

  • Usar várias réplicas dos seus pods em uma implantação.
  • Executar vários nós no cluster AKS.

Interrupções voluntárias

Interrupções involuntárias são eventos solicitados além do controle típico do operador de cluster ou o proprietário do aplicativo. Inclusão:

  • Atualizações do cluster
  • Modelo de implantação atualizado
  • Exclusão acidental de um pod

O Kubernetes fornece orçamentos de interrupção de pod para interrupções voluntárias, possibilitando que você planeje como as implantações ou conjuntos de réplicas respondem quando ocorre um evento de interrupção voluntária. Usando orçamentos de interrupção de pod, operadores de cluster podem definir uma contagem do mínimo ou máximo de recursos indisponíveis.

Se você fizer upgrade de um cluster ou atualizar um modelo de implantação, o agendador Kubernetes agendará pods extras em outros nós antes de permitir que eventos de interrupção voluntária continuem. O Agendador aguarda a reinicialização de um nó até que o número definido de pods seja agendado com êxito em outros nós no cluster.

Vamos examinar um exemplo de um conjunto de réplicas com cinco compartimentos que executam o NGINX. Os pods no conjunto de réplicas são atribuídos ao rótulo app: nginx-frontend. Durante um evento de interrupção voluntária, como uma atualização de cluster, você deseja certificar-se de que pelo menos três pods continuam em execução. O manifesto YAML a seguir para o objeto para um PodDisruptionBudget define esses requisitos:

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
   name: nginx-pdb
spec:
   minAvailable: 3
   selector:
    matchLabels:
      app: nginx-frontend

Você também pode definir uma porcentagem, tal como 60%, que permite que você compense a réplica automaticamente definido com o aumento do número de pods.

Você pode definir um número máximo de instâncias que não está disponível em um conjunto de réplicas. Novamente, uma porcentagem para os máximo pods indisponíveis também pode ser definida. O manifesto YAML do orçamento de interrupção pod a seguir define não mais do que dois pods na réplica de conjunto não disponível:

apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
   name: nginx-pdb
spec:
   maxUnavailable: 2
   selector:
    matchLabels:
      app: nginx-frontend

Depois que seu orçamento de interrupção do pod é definido, você o cria no cluster do AKS assim como acontece com qualquer outro objeto de Kubernetes:

kubectl apply -f nginx-pdb.yaml

Trabalhe com seus desenvolvedores de aplicativos e proprietários para entender suas necessidades e aplicar os orçamentos de interrupção de pod.

Para obter mais informações sobre como usar os orçamentos de interrupção de pod, consulte Especificar um orçamento de interrupção para o seu aplicativo.

Próximas etapas

Este artigo se concentra nos recursos básicos de agendador Kubernetes. Para obter mais informações sobre operações de cluster no AKS, consulte as seguintes práticas recomendadas: