Práticas recomendadas para os desenvolvedores de aplicativos gerenciarem os recursos no serviço de Kubernetes do Azure (AKS)

Ao desenvolver e executar aplicativos no serviço de Kubernetes do Azure (AKS), há algumas áreas principais a serem consideradas. A forma de você gerenciar 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 em como executar seus clusters e cargas de trabalho sob o ponto de vista do desenvolvedor de aplicativos. Para obter informações sobre as melhores práticas administrativas, consulte Práticas recomendadas de operador de cluster para isolamento e gerenciamento de recursos no serviço de Kubernetes do Azure (AKS).

Este artigo aborda os seguintes tópicos:

  • Limites e solicitações de recursos de pod.
  • Maneiras de desenvolver, depurar e implantar aplicativos com o recurso Bridge to Kubernetes e o Visual Studio Code.

Defina as solicitações e limites de recurso de pod

Orientação de melhor prática

Defina solicitações e limites de pod 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 limites e solicitações de pod para gerenciar recursos de computação dentro de um cluster do AKS. Os limites e solicitações de pod informam ao agendador do Kubernetes quais recursos de computação atribuir a um pod.

Solicitações de CPU/memória Pod

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

Nas suas especificações do 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á levar em conta os recursos de que os aplicativos precisam como apoio às decisões de agendamento.

Monitore o desempenho do seu aplicativo para ajustar as solicitações do pod. Se você subestimar solicitações do pod, seu aplicativo poderá receber um desempenho degradado devido ao excesso de agendamento de um nó. Se as solicitações forem superestimadas, seu aplicativo poderá enfrentar uma crescente dificuldade para agendar.

Limites de CPU/memória do pod

Os limites do 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 estiverem instáveis devido à insuficiência de recursos. Sem uma definição de limites adequada, os pods serão removidos até que a pressão sobre o recurso seja aliviada. Embora possa exceder o limite de CPU periodicamente, o pod não será removido por exceder o limite de CPU.

Os limites do pod definem quando um pod perde o controle do consumo de recursos. Quando exceder o limite, o pod será 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 pod adotará como padrão o valor mais alto disponível em um determinado nó.

Evite configurar um limite de pod maior do que os nós podem suportar. Cada nó do 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 outros pods para ser executado com êxito.

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

Importante

Nas especificações do pod, defina essas solicitações e os limites com base nas informações acima. A não inclusão desses valores impede que o agendador do Kubernetes leve em conta os recursos de que seus aplicativos precisam como apoio às decisões de agendamento.

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

Ao definir uma solicitação de CPU ou o limite, o valor é medido em unidades de CPU.

  • 1.0 CPU é igual a um núcleo da CPU virtual no nó.
    • A mesma medida é usada para GPUs.
  • Você pode definir as frações medidas em milicores. Por exemplo, 100 miliCPU são 0,1 de um núcleo de vCPU subjacente.

No exemplo básico a seguir para um único pod do NGINX, o pod solicita 100 miliCPU do tempo de CPU e 128 MiB de memória. Os limites de recursos para o pod são definidos como 250 miliCPU de CPU e 256 MiB de 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 a respeito de medidas de recursos e atribuições, consulte Gerenciando os recursos para contêineres de computação.

Desenvolver e depurar aplicativos em relação a um cluster do AKS

Orientação de melhor prática

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 os aplicativos diretamente com um cluster AKS. Os desenvolvedores de uma equipe colaboram para compilar e testar durante todo o ciclo de vida do aplicativo. Você pode continuar a usar ferramentas existentes, como o Visual Studio ou o 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 local, como minikube. Em vez disso, você desenvolve e testa com relação a um cluster do AKS, mesmo no caso de clusters isolados e protegidos.

Observação

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

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

Orientação de melhor prática

Instale e use a extensão do VS Code para o Kubernetes quando você grava manifestos YAML. Você também pode usar a extensão para solução de implantação integradas, que pode ajudar os proprietários do aplicativo que raramente interagem com o cluster do AKS.

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

  • Recursos IntelliSense para Kubernetes, gráficos do Helm e modelos.

  • A capacidade de navegar, implantar e editar opções para recursos do Kubernetes de dentro do VS Code.

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

    VS Code extension for Kubernetes warning about missing memory limits

Próximas etapas

Este artigo aborda como executar suas cargas de trabalho e clusters de uma perspectiva do operador de cluster. Para obter informações sobre as melhores práticas administrativas, consulte Práticas recomendadas de operador de cluster para isolamento e gerenciamento de recursos no serviço de Kubernetes do Azure (AKS).

Para implementar algumas dessas boas práticas, confira Desenvolver com o Bridge to Kubernetes.