Melhores práticas para os programadores de aplicações gerirem recursos no Azure Kubernetes Service (AKS)

À medida que você desenvolve e executa aplicativos no Serviço Kubernetes do Azure (AKS), há algumas áreas importantes a serem consideradas. A maneira como você gerencia suas implantações de aplicativos pode afetar negativamente a experiência do usuário final dos serviços que você fornece.

Este artigo se concentra na execução de clusters e cargas de trabalho de uma perspetiva de desenvolvedor de aplicativos. Para obter informações sobre práticas recomendadas administrativas, consulte Práticas recomendadas do operador de cluster para isolamento e gerenciamento de recursos no Serviço Kubernetes do Azure (AKS).

Este artigo aborda os seguintes tópicos:

  • Solicitações e limites de recursos do Pod.
  • Maneiras de desenvolver, depurar e implantar aplicativos com o Bridge to Kubernetes e o Visual Studio Code.

Definir solicitações e limites de recursos do pod

Orientações sobre boas práticas

Defina solicitações de pod e limites em todos os pods em seus manifestos YAML. Se o cluster AKS usar cotas de recursos e você não definir esses valores, sua implantação poderá ser rejeitada.

Use solicitações e limites de pod para gerenciar recursos de computação dentro de um cluster AKS. Solicitações e limites de pod informam o agendador do Kubernetes sobre os recursos de computação a serem atribuídos a um pod.

Pedidos de CPU/Memória do pod

As solicitações de pod definem uma quantidade definida de CPU e memória que o pod precisa regularmente.

Nas especificações do seu pod, é importante que você defina essas solicitações e limites com base nas informações acima. Se você não incluir esses valores, o agendador do Kubernetes não poderá considerar os recursos que seus aplicativos precisam para ajudar nas decisões de agendamento.

Monitore o desempenho do seu aplicativo para ajustar as solicitações de pod. Se você subestimar as solicitações de pod, seu aplicativo poderá receber desempenho degradado devido ao agendamento excessivo de um nó. Se as solicitações forem superestimadas, seu aplicativo pode ter maior dificuldade de agendamento.

Limites de CPU/Memória do pod

Os limites de pod definem a quantidade máxima de CPU e memória que um pod pode usar. Os limites de memória definem quais pods devem ser removidos quando os nós estão instáveis devido a recursos insuficientes. Sem limites adequados definidos, os pods são removidos até que a pressão dos recursos seja levantada. Embora um pod possa exceder o limite de CPU periodicamente, o pod não é removido por exceder o limite de CPU.

Os limites de pod definem quando um pod perde o controle do consumo de recursos. Quando excede o limite, o pod é marcado para remoção. Esse comportamento mantém a integridade do nó e minimiza o impacto nos pods que compartilham o nó. Se você não definir um limite de pod, o padrão será o valor mais alto disponível em um determinado nó.

Evite definir um limite de pod mais alto do que seus nós podem suportar. Cada nó AKS reserva uma quantidade definida de CPU e memória para os componentes principais do Kubernetes. Seu aplicativo pode tentar consumir muitos recursos no nó para que outros pods sejam executados com êxito.

Monitore o desempenho do seu aplicativo em diferentes momentos durante o dia ou a semana. Determine os horários de pico de demanda e alinhe os limites do pod aos recursos necessários para atender às necessidades máximas.

Importante

Nas especificações do seu pod, defina essas solicitações e limites com base nas informações acima. A não inclusão desses valores impede que o agendador do Kubernetes contabilize os recursos de que seus aplicativos precisam para ajudar nas decisões de agendamento.

Se o agendador colocar um pod em um nó com recursos insuficientes, o desempenho do aplicativo será prejudicado. Os administradores de cluster devem definir cotas de recursos em um namespace que exija que você defina solicitações e limites de recursos. Para obter mais informações, consulte cotas de recursos em clusters AKS.

Quando você define uma solicitação ou limite de CPU, o valor é medido em unidades de CPU.

  • A CPU 1.0 equivale a um núcleo de CPU virtual subjacente no nó.
    • A mesma medição é usada para GPUs.
  • É possível definir frações medidas em milinúcleos. Por exemplo, 100 m é 0,1 de um núcleo vCPU subjacente.

No exemplo básico a seguir para um único pod NGINX, o pod solicita 100 m de tempo de CPU e 128Mi de memória. Os limites de recursos para o pod são definidos para 250 m CPU e 256Mi memória.

kind: Pod
apiVersion: v1
metadata:
  name: mypod
spec:
  containers:
  - name: mypod
    image: mcr.microsoft.com/oss/nginx/nginx:1.15.5-alpine
    resources:
      requests:
        cpu: 100m
        memory: 128Mi
      limits:
        cpu: 250m
        memory: 256Mi

Para obter mais informações sobre medições e atribuições de recursos, consulte Gerenciando recursos de computação para contêineres.

Desenvolver e depurar aplicativos em um cluster AKS

Orientações sobre boas práticas

As equipes de desenvolvimento devem implantar e depurar em um cluster AKS usando o Bridge to Kubernetes.

Com o Bridge to Kubernetes, você pode desenvolver, depurar e testar aplicativos diretamente em um cluster AKS. Os desenvolvedores de uma equipe colaboram para criar e testar durante todo o ciclo de vida do aplicativo. Você pode continuar a usar ferramentas existentes, como Visual Studio ou Visual Studio Code com a extensão Bridge to Kubernetes.

O uso do processo integrado de desenvolvimento e teste com o Bridge to Kubernetes reduz a necessidade de ambientes de teste locais, como o minikube. Em vez disso, você desenvolve e testa em um cluster AKS, mesmo em clusters seguros e isolados.

Nota

O Bridge to Kubernetes destina-se ao uso com aplicativos executados em pods e nós Linux.

Usar a extensão Visual Studio Code (VS Code) para Kubernetes

Orientações sobre boas práticas

Instale e use a extensão VS Code para Kubernetes ao escrever manifestos YAML. Você também pode usar a extensão para a solução de implantação integrada, que pode ajudar os proprietários de aplicativos que interagem com pouca frequência com o cluster AKS.

A extensão Visual Studio Code para Kubernetes ajuda você a desenvolver e implantar aplicativos no AKS. A extensão fornece os seguintes recursos:

  • Intellisense para recursos do Kubernetes, gráficos Helm e modelos.

  • A capacidade de navegar, implantar e editar recursos para recursos do Kubernetes a partir do VS Code.

  • O Intellisense verifica se há solicitações de recursos ou limites definidos nas especificações do pod:

    VS Code extension for Kubernetes warning about missing memory limits

Próximos passos

Este artigo concentrou-se em como executar o cluster e as cargas de trabalho da perspetiva do operador de cluster. Para obter informações sobre práticas recomendadas administrativas, consulte Práticas recomendadas do operador de cluster para isolamento e gerenciamento de recursos no Serviço Kubernetes do Azure (AKS).

Para implementar algumas dessas práticas recomendadas, consulte Desenvolver com o Bridge to Kubernetes.