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

À medida que desenvolve e executa aplicações no Azure Kubernetes Service (AKS), existem algumas áreas-chave a considerar. A forma como gere as implementações de aplicações pode afetar negativamente a experiência do utilizador final dos serviços que fornece.

Este artigo centra-se na execução de clusters e cargas de trabalho a partir de uma perspetiva de programador de aplicações. Para obter informações sobre as melhores práticas administrativas, veja Melhores práticas do operador de cluster para isolamento e gestão de recursos no Azure Kubernetes Service (AKS).

Este artigo aborda os seguintes tópicos:

  • Pedidos e limites de recursos do Pod.
  • Formas de desenvolver, depurar e implementar aplicações com Bridge para Kubernetes e Visual Studio Code.

Definir pedidos e limites de recursos do pod

Orientação sobre melhores práticas

Defina pedidos de pod e limites em todos os pods nos seus manifestos YAML. Se o cluster do AKS utilizar quotas de recursos e não definir estes valores, a sua implementação poderá ser rejeitada.

Utilize pedidos de pod e limites para gerir recursos de computação num cluster do AKS. Os pedidos e limites do Pod informam o agendador do Kubernetes dos recursos de computação a atribuir a um pod.

Pedidos de CPU/Memória do pod

Os pedidos de pod definem uma quantidade definida de CPU e memória de que o pod precisa regularmente.

Nas especificações do pod, é importante definir estes pedidos e limites com base nas informações acima. Se não incluir estes valores, o agendador do Kubernetes não pode considerar os recursos necessários para ajudar nas decisões de agendamento.

Monitorize o desempenho da sua aplicação para ajustar os pedidos do pod. Se subestimar os pedidos de pod, a aplicação poderá receber um desempenho degradado devido ao agendamento excessivo de um nó. Se os pedidos forem sobrestimados, a sua aplicação poderá ter maior dificuldade de agendamento.

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 utilizar. Os limites de memória definem que pods devem ser removidos quando os nós são instáveis devido a recursos insuficientes. Sem limites adequados definidos, os pods são removidos até que a pressão dos recursos seja elevada. Embora um pod possa exceder periodicamente o limite da CPU , o pod não é removido para exceder o limite da CPU.

Os limites do pod definem quando um pod perde o controlo do consumo de recursos. Quando excede o limite, o pod é marcado para remoção. Este comportamento mantém o estado de funcionamento do nó e minimiza o impacto nos pods que partilham o nó. Se não definir um limite de pods, este será predefinido para o valor mais alto disponível num determinado nó.

Evite definir um limite de pods superior ao 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. A sua aplicação pode tentar consumir demasiados recursos no nó para que outros pods possam ser executados com êxito.

Monitorize o desempenho da sua aplicação em horas diferentes durante o dia ou a semana. Determine os picos de procura e alinhe os limites do pod com os recursos necessários para satisfazer as necessidades máximas.

Importante

Nas especificações do pod, defina estes pedidos e limites com base nas informações acima. Não incluir estes valores impede o agendador do Kubernetes de contabilizar os recursos necessários para as suas aplicações para ajudar nas decisões de agendamento.

Se o agendador coloca um pod num nó com recursos insuficientes, o desempenho da aplicação será degradado. Os administradores de clusters têm de definir quotas de recursos num espaço de nomes que exija que defina os pedidos de recursos e os limites. Para obter mais informações, veja Quotas de recursos em clusters do AKS.

Quando define um pedido ou limite da 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 é utilizada para GPUs.
  • Pode definir frações medidas em millicores. Por exemplo, 100 m é 0,1 de um núcleo de vCPU subjacente.

No exemplo básico seguinte para um único pod NGINX, o pod pede 100 m de tempo de CPU e 128Mi de memória. Os limites de recursos do pod estão definidos como CPU de 250 m e memória 256Mi .

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 as medições e atribuições de recursos, veja Gerir recursos de computação para contentores.

Desenvolver e depurar aplicações num cluster do AKS

Orientação sobre melhores práticas

As equipas de desenvolvimento devem implementar e depurar num cluster do AKS com Bridge para Kubernetes.

Com o Bridge to Kubernetes, pode desenvolver, depurar e testar aplicações diretamente num cluster do AKS. Os programadores numa equipa colaboram para criar e testar ao longo do ciclo de vida da aplicação. Pode continuar a utilizar ferramentas existentes, como o Visual Studio ou o Visual Studio Code, com a extensão Bridge to Kubernetes.

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

Nota

A bridge para o Kubernetes destina-se a ser utilizada com aplicações em execução em pods e nós do Linux.

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

Orientação sobre melhores práticas

Instale e utilize a extensão do VS Code para Kubernetes ao escrever manifestos YAML. Também pode utilizar a extensão para a solução de implementação integrada, o que pode ajudar os proprietários de aplicações que interagem com pouca frequência com o cluster do AKS.

A extensão do Visual Studio Code para Kubernetes ajuda-o a desenvolver e implementar aplicações no AKS. A extensão fornece as seguintes funcionalidades:

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

  • A capacidade de procurar, implementar e editar capacidades para recursos do Kubernetes a partir do VS Code.

  • O Intellisense verifica se existem pedidos de recursos ou limites definidos nas especificações do pod:

    Extensão do VS Code para Kubernetes alerta sobre limites de memória em falta

Passos seguintes

Este artigo focou-se em como executar o cluster e as cargas de trabalho a partir de uma perspetiva do operador de cluster. Para obter informações sobre as melhores práticas administrativas, veja Melhores práticas do operador de cluster para isolamento e gestão de recursos no Azure Kubernetes Service (AKS).

Para implementar algumas destas melhores práticas, veja Desenvolver com Bridge para Kubernetes.