Melhores práticas para funcionalidades básicas do scheduler no Azure Kubernetes Service (AKS)

À medida que gere clusters no Azure Kubernetes Service (AKS), muitas vezes tem de isolar equipas e cargas de trabalho. O agendador do Kubernetes permite-lhe controlar a distribuição de recursos de computação ou limitar o impacto dos eventos de manutenção.

Este artigo de melhores práticas centra-se nas funcionalidades básicas de agendamento do Kubernetes para operadores de cluster. Neste artigo, vai aprender a:

  • Utilizar quotas de recursos para fornecer uma quantidade fixa de recursos a equipas ou cargas de trabalho
  • Limitar o impacto da manutenção agendada através de orçamentos de interrupção do pod

Impor quotas de recursos

Orientação de melhor prática

Planeie e aplique quotas de recursos ao nível do espaço de nomes. Se os pods não definirem os pedidos de recursos e os limites, rejeite a implementação. Monitorize a utilização de recursos e ajuste as quotas conforme necessário.

Os pedidos de recursos e os limites são colocados na especificação do pod. Os pedidos são utilizados pelo agendador do Kubernetes no momento da implementação para encontrar um nó disponível no cluster. Os limites e pedidos funcionam ao nível do pod individual. Para obter mais informações sobre como definir estes valores, veja Definir pedidos e limites de recursos do pod.

Para fornecer uma forma de reservar e limitar recursos numa equipa de desenvolvimento ou projeto, deve utilizar quotas de recursos. Estas quotas são definidas num espaço de nomes e podem ser utilizadas para definir quotas na seguinte base:

  • Recursos de computação, como CPU e memória, ou GPUs.
  • Recursos de armazenamento, incluindo o número total de volumes ou a quantidade de espaço em disco para uma determinada classe de armazenamento.
  • A contagem de objetos, como o número máximo de segredos, serviços ou trabalhos, pode ser criada.

O Kubernetes não sobrecompromissa os recursos. Assim que o total do pedido de recurso cumulativo passar a quota atribuída, todas as implementações adicionais não terão êxito.

Quando define quotas de recursos, todos os pods criados no espaço de nomes têm de fornecer limites ou pedidos nas respetivas especificações de pods. Se não fornecerem estes valores, pode rejeitar a implementação. Em vez disso, pode configurar pedidos e limites predefinidos para um espaço de nomes.

O seguinte manifesto YAML de exemplo com o nome dev-app-team-quotas.yaml define um limite rígido de um total de 10 CPUs, 20Gi de memória e 10 pods:

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

Esta quota de recursos pode ser aplicada ao especificar o espaço de nomes, como dev-apps:

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

Trabalhe com os programadores e proprietários da sua aplicação para compreender as suas necessidades e aplicar as quotas de recursos adequadas.

Para obter mais informações sobre objetos de recursos disponíveis, âmbitos e prioridades, veja Quotas de recursos no Kubernetes.

Planear a disponibilidade com orçamentos de interrupção do pod

Orientação de melhor prática

Para manter a disponibilidade das aplicações, defina Orçamentos de Interrupção de Pods (PDBs) para garantir que está disponível um número mínimo de pods no cluster.

Existem dois eventos disruptivos que fazem com que os pods sejam removidos:

Interrupções involuntárias

As interrupções involuntárias são eventos fora do controlo típico do operador de cluster ou proprietário da aplicação. Incluir:

  • Falha de hardware no computador físico
  • Emergência no kernel
  • Eliminação de uma VM de nó

As perturbações involuntárias podem ser atenuadas por:

  • Utilizar várias réplicas dos pods numa implementação.
  • Executar vários nós no cluster do AKS.

Interrupções voluntárias

As interrupções voluntárias são eventos pedidos pelo operador do cluster ou proprietário da aplicação. Incluir:

  • Atualizações do cluster
  • Modelo de implementação atualizado
  • Eliminar acidentalmente um pod

O Kubernetes fornece orçamentos de interrupção do pod para interrupções voluntárias, permitindo-lhe planear a forma como as implementações ou conjuntos de réplicas respondem quando ocorre um evento de interrupção voluntária. Com os orçamentos de interrupção do pod, os operadores de cluster podem definir um número mínimo de recursos disponíveis ou máximo indisponível.

Se atualizar um cluster ou atualizar um modelo de implementação, o agendador do Kubernetes agendará pods adicionais noutros nós antes de permitir que os eventos de interrupção voluntária continuem. O agendador aguarda para reiniciar um nó até que o número definido de pods seja agendado com êxito noutros nós do cluster.

Vejamos um exemplo de um conjunto de réplicas com cinco pods que executam o NGINX. Os pods no conjunto de réplicas recebem a etiqueta app: nginx-frontend. Durante um evento de interrupção voluntária, como uma atualização do cluster, quer certificar-se de que pelo menos três pods continuam a ser executados. O seguinte manifesto YAML para um objeto PodDisruptionBudget define estes requisitos:

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

Também pode definir uma percentagem, como 60%, que lhe permite compensar automaticamente o conjunto de réplicas ao aumentar verticalmente o número de pods.

Pode definir um número máximo de instâncias indisponíveis num conjunto de réplicas. Mais uma vez, também pode ser definida uma percentagem para o máximo de pods indisponíveis. O seguinte manifesto YAML do orçamento de interrupção do pod define que não estão disponíveis mais do que dois pods no conjunto de réplicas:

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

Assim que o orçamento de interrupção do pod estiver definido, crie-o no cluster do AKS, tal como acontece com qualquer outro objeto do Kubernetes:

kubectl apply -f nginx-pdb.yaml

Trabalhe com os programadores e proprietários da sua aplicação para compreender as suas necessidades e aplicar os orçamentos de interrupção do pod adequados.

Para obter mais informações sobre como utilizar orçamentos de interrupção do pod, veja Especificar um orçamento de interrupção para a sua aplicação.

Passos seguintes

Este artigo focou-se nas funcionalidades básicas do agendador do Kubernetes. Para obter mais informações sobre as operações de cluster no AKS, veja as seguintes melhores práticas: