Práticas recomendadas para recursos básicos do agendador no Serviço Kubernetes do Azure (AKS)
Ao gerenciar clusters no Serviço Kubernetes do Azure (AKS), muitas vezes você precisa isolar equipes e cargas de trabalho. O agendador do Kubernetes permite controlar a distribuição de recursos de computação ou limitar o impacto de eventos de manutenção.
Este artigo de práticas recomendadas se concentra nos recursos básicos de agendamento do Kubernetes para operadores de cluster. Neste artigo, vai aprender a:
- Usar cotas de recursos para fornecer uma quantidade fixa de recursos para equipes ou cargas de trabalho
- Limitar o impacto da manutenção programada usando orçamentos de interrupção de pod
Impor cotas de recursos
Orientações sobre boas práticas
Planeje e aplique cotas de recursos no nível do namespace. Se os pods não definirem solicitações e limites de recursos, rejeite a implantação. Monitore o uso de recursos e ajuste as cotas conforme necessário.
As solicitações e limites de recursos são colocados na especificação do pod. As solicitações são usadas pelo agendador do Kubernetes no momento da implantação para localizar um nó disponível no cluster. Limites e solicitações funcionam no nível de pod individual. Para obter mais informações sobre como definir esses valores, consulte Definir solicitações e limites de recursos de pod.
Para fornecer uma maneira de reservar e limitar recursos em uma equipe de desenvolvimento ou projeto, você deve usar cotas de recursos. Essas cotas são definidas em um namespace e podem ser usadas para definir cotas com base no seguinte:
- 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 compromete recursos em excesso. Quando o total de solicitações de recursos acumulados ultrapassar a cota atribuída, todas as implantações adicionais não serão bem-sucedidas.
Quando você define 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ê poderá rejeitar a implantação. Em vez disso, você pode configurar solicitações padrão e limites para um namespace.
O exemplo de manifesto YAML a seguir chamado 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"
Essa cota de recursos pode ser aplicada especificando o namespace, como dev-apps:
kubectl apply -f dev-app-team-quotas.yaml --namespace dev-apps
Trabalhe com seus desenvolvedores e proprietários de aplicativos para entender suas necessidades e aplicar as cotas de recursos apropriadas.
Para obter mais informações sobre objetos, escopos e prioridades de recursos disponíveis, consulte Cotas de recursos no Kubernetes.
Planejar a disponibilidade usando orçamentos de interrupção de pod
Orientações sobre boas práticas
Para manter a disponibilidade de aplicativos, defina PDBs (Pod Disruption Budgets) para garantir que um número mínimo de pods esteja disponível no cluster.
Existem dois eventos disruptivos 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 proprietário do aplicativo. Inclui:
- Falha de hardware na máquina física
- Emergência no kernel
- Exclusão de uma VM de nó
As interrupções involuntárias podem ser atenuadas através de:
- Usando várias réplicas de seus pods em uma implantação.
- Execução de vários nós no cluster AKS.
Interrupções voluntárias
As interrupções voluntárias são eventos solicitados pelo operador do cluster ou pelo proprietário do aplicativo. Inclui:
- Atualizações de cluster
- Modelo de implantação atualizado
- Excluir acidentalmente um pod
O Kubernetes fornece orçamentos de interrupção de pod para interrupções voluntárias, permitindo 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, os operadores de cluster podem definir uma contagem mínima de recursos disponíveis ou máxima indisponível.
Se você atualizar um cluster ou um modelo de implantação, o agendador do Kubernetes agendará pods extras em outros nós antes de permitir que os eventos de interrupção voluntária continuem. O agendador aguarda para reinicializar um nó até que o número definido de pods seja agendado com êxito em outros nós no cluster.
Vejamos um exemplo de um conjunto de réplicas com cinco pods que executam NGINX. Os pods no conjunto de réplicas recebem o rótulo app: nginx-frontend
. Durante um evento de interrupção voluntária, como uma atualização de cluster, você deseja garantir que pelo menos três pods continuem a ser executados. O seguinte manifesto YAML para um objeto 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, como 60%, que permite compensar automaticamente o conjunto de réplicas aumentando o número de pods.
Você pode definir um número máximo de instâncias indisponíveis em um conjunto de réplicas. Novamente, uma porcentagem para os pods máximos indisponíveis também pode ser definida. O seguinte manifesto YAML de orçamento de interrupção de pod define que não mais do que dois pods no conjunto de réplicas estejam indisponíveis:
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: nginx-pdb
spec:
maxUnavailable: 2
selector:
matchLabels:
app: nginx-frontend
Depois que o orçamento de interrupção do pod estiver definido, você o criará em seu cluster AKS como com qualquer outro objeto do Kubernetes:
kubectl apply -f nginx-pdb.yaml
Trabalhe com seus desenvolvedores e proprietários de aplicativos para entender suas necessidades e aplicar os orçamentos apropriados de interrupção de pod.
Para obter mais informações sobre como usar orçamentos de interrupção de pod, consulte Especificar um orçamento de interrupção para seu aplicativo.
Próximos passos
Este artigo se concentrou nos recursos básicos do agendador do Kubernetes. Para obter mais informações sobre operações de cluster no AKS, consulte as seguintes práticas recomendadas:
Azure Kubernetes Service