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:
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.