Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Neste artigo, você aprenderá a empacotar seus nós para melhorar a utilização de nós nos clusters do Serviço de Kubernetes do Azure (AKS) usando o plug-in de agendamento nativo, NodeResourcesFit O scheduler padrão do AKS opera em um modo NodeResourcesFit:LeastAllocated, que prioriza nós com menor utilização ao agendar pods. Perfis configuráveis do Agendador no AKS permitem alterar esse comportamento padrão e ajustar a configuração para priorizar nós com maior utilização. Esta documentação aborda três perfis de agendador personalizados diferentes, destacando a recomendação de melhores práticas para aumentar a utilização enquanto reduz os pontos quentes de nós.
O empacotamento de nós em compartimento é uma estratégia de agendamento que maximiza a utilização de recursos ao aumentar a densidade dos pods nos nós, em vez de espalhar os pods por um pool de nós ou dimensionar os nós de forma automática prematuramente. O empacotamento de itens ajuda a minimizar os recursos não utilizados e pode reduzir os custos operacionais ao manter nós ociosos ou subutilizados. Melhorar a utilização do nó de processamento é fundamental, pois os dados mostram que a CPU e a memória são recursos frequentemente sobrecarregados. Além disso, à medida que a adoção da GPU cresce, a utilização eficiente dos aceleradores torna-se igualmente crítica devido à sua escassez e custo relativos.
Limitações
- Atualmente, o AKS não gerencia a implantação de agendadores de terceiros ou de plug-ins de agendamento não nativos ao sistema.
- O AKS não dá suporte a plug-ins de agendamento na árvore direcionados ao agendador
aks-system. Essa restrição está em vigor para ajudar a evitar alterações inesperadas nos complementos do AKS habilitados em seu cluster. Além disso, você não pode definir umprofilechamadoaks-system.
Pré-requisitos
- A versão
2.76.0da CLI do Azure ou posterior. Executeaz --versionpara localizar a versão eaz upgradepara atualizar a versão. Se precisar instalar ou atualizar, consulte Instalar Azure CLI. - Versão do Kubernetes
1.33ou posterior em execução no cluster AKS. - A
aks-previewextensão da CLI do Azure versão18.0.0b27ou posterior. - Registre o
UserDefinedSchedulerConfigurationPreviewsinalizador de recurso em sua assinatura do Azure.
Habilitar a configuração de perfil do agendador em um cluster do AKS
Você pode habilitar a configuração de perfil de agendamento em um cluster AKS novo ou existente.
Crie um cluster do AKS com a configuração de perfil do agendador habilitada usando o comando
az aks createcom o flag--enable-upstream-kubescheduler-user-configuration.# Set environment variables export RESOURCE_GROUP=<resource-group-name> export CLUSTER_NAME=<aks-cluster-name> # Create an AKS cluster with schedule profile configuration enabled az aks create \ --resource-group $RESOURCE_GROUP \ --name $CLUSTER_NAME \ --enable-upstream-kubescheduler-user-configuration \ --generate-ssh-keysDepois que o processo de criação for concluído, conecte-se ao cluster usando o
az aks get-credentialscomando.az aks get-credentials --resource-group $RESOURCE_GROUP --name $CLUSTER_NAME
Verificar a instalação do controlador do agendador
Depois de habilitar o recurso no cluster do AKS, verifique se a CRD (definição de recurso personalizado) do controlador do agendador foi instalada com êxito usando o
kubectl getcomando.kubectl get crd schedulerconfigurations.aks.azure.comObservação
Esse comando não terá êxito se o recurso não tiver sido habilitado com êxito na seção anterior.
Configurar o bin-packing de nó com o Plug-in RequestedtoCapacity
Dos três perfis, RequestedToCapacityRatio fornece o controle de usuário mais granular para mapeamento de nós para uma utilização explícita. Por exemplo, esse perfil de agendamento foi configurado para favorecer nós dentro de uma faixa de utilização de 50 a 85%, evitar nós quase vazios e despriorizar severamente nós quase completos com utilização de 90% ou mais, deixando algum espaço de sobra. Dado esse nível de detalhe, RequestedtoCapacity é a estratégia de pontuação recomendada para o empacotamento de contêineres em nós no AKS para clusters de produção.
Esta configuração torna a utilização da CPU o fator dominante na seleção de nós, balanceando a carga dos nós e evitando a super saturação para aplicações intensivas em CPU. Por fim, você deve desabilitar o PodTopologySpread plugin, pois ele pode substituir a pontuação ponderada de NodeResourcesFit se deixado habilitado por padrão.
-
NodeResourcesFitcontrola como o agendador avalia se um nó tem recursos suficientes para executar um pod. -
scoringStrategy: RequestedToCapacityRatiopontua os nós com base na relação entre recursos solicitados e a capacidade total do nó após a colocação hipotética do pod. -
Resourcesespecifica queCPUeMemorysão os principais recursos considerados para a pontuação. Com um peso de8, nós que utilizam CPU recebem uma pontuação 8x maior em comparação à memória durante o ciclo de agendamento do pod. Isso aumenta a probabilidade de nós com alta utilização serem selecionados. -
shape:mapeia a utilização dos nós para a pontuação do agendador. Cada ponto representa um percentual de utilização e sua pontuação correspondente, com uma pontuação linear entre pontos.
apiVersion: aks.azure.com/v1alpha1
kind: SchedulerConfiguration
metadata:
name: upstream
spec:
rawConfig: |
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: cpu-binpack-scheduler-RtC
plugins:
multiPoint:
enabled:
- name: NodeResourcesFit
disabled:
- name: PodTopologySpread
pluginConfig:
- name: NodeResourcesFit
args:
apiVersion: kubescheduler.config.k8s.io/v1
kind: NodeResourcesFitArgs
scoringStrategy:
type: RequestedToCapacityRatio
resources:
- name: cpu
weight: 8
- name: memory
weight: 1
requestedToCapacityRatio:
shape:
- utilization: 0
score: 0
- utilization: 30
score: 9
- utilization: 50
score: 10
- utilization: 85
score: 10
- utilization: 90
score: 5
- utilization: 100
score: 0
Configurar o bin-packing de nó com o Plug-in MostAllocated
Configurar o agendador com MostAllocated prioritiza exclusivamente os nós com base no uso de recursos. Quanto maior a utilização do recurso, maior será a pontuação de um nó, evitando nós não utilizados ou dimensionamento até que seja necessário. Isoladamente, essa configuração corre o risco de saturar os nós além dos limites desejáveis, causando estrangulamento ou gargalos adicionais.
Essa configuração torna a utilização da CPU o fator dominante na seleção de nós. Para garantir um comportamento consistente, você deve desabilitar o plug-in PodTopologySpread, pois ele pode substituir a pontuação ponderada se o plug-in NodeResourcesFit for deixado habilitado por padrão.
-
NodeResourcesFitcontrola como o agendador avalia se um nó tem recursos suficientes para executar um pod. -
scoringStrategy: MostAllocatedpontuações com base em solicitações de pod.MostAllocatedorienta o agendador a preferir nós com alto uso de recursos. Essa estratégia promove o agrupamento denso de pods e ajuda a obter melhor utilização de nós. -
Resourcesespecifica queCPUeMemorysão os principais recursos considerados para a pontuação. Com um peso de8, nós que utilizam CPU recebem uma pontuação 8x maior em comparação à memória durante o ciclo de agendamento do pod. Isso aumenta a probabilidade de nós com alta utilização serem selecionados.
apiVersion: aks.azure.com/v1alpha1
kind: SchedulerConfiguration
metadata:
name: upstream
spec:
rawConfig: |
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: cpu-binpack-scheduler-mA
plugins:
multiPoint:
enabled:
- name: NodeResourcesFit
disabled:
- name: PodTopologySpread
pluginConfig:
# NodeResourcesFit configuration
- name: NodeResourcesFit
args:
apiVersion: kubescheduler.config.k8s.io/v1
kind: NodeResourcesFitArgs
scoringStrategy:
type: MostAllocated
resources:
- name: cpu
weight: 8
- name: memory
weight: 1
Configuração de empacotamento de nós com os plug-ins MostAllocated e NodeResourcesBalancedAllocation
Essa configuração busca adicionar algumas diretrizes à estratégia MostAllocated simples e eficiente, avaliando nós com base no uso equilibrado de recursos-alvo.
NodeResourcesBalancedAllocation incentiva o posicionamento de pods em nós com uma utilização proporcional definida pelo usuário, aumentando a eficiência geral e evitando os gargalos causados pela pressão assimétrica dos recursos. Por exemplo, nós com foco em CPU e memória abundante não utilizada receberiam pontuações mais baixas em favor de nós com um melhor equilíbrio de utilização de CPU e memória.
-
NodeResourcesBalancedAllocationavalia os nós com base em quão equilibrado é o uso dos recursos entre vários deles. Em vez de maximizar a utilização de um único recurso, esse plug-in prefere nós em que o consumo de recursos é proporcional. -
Resourcesespecifica quais recursos são considerados durante a avaliação de saldo. Com a CPU e a memória ponderadas igualmente, os nós recebem uma pontuação mais alta quando ambos os recursos são consumidos em níveis semelhantes.
apiVersion: aks.azure.com/v1alpha1
kind: SchedulerConfiguration
metadata:
name: upstream
spec:
rawConfig: |
apiVersion: kubescheduler.config.k8s.io/v1
kind: KubeSchedulerConfiguration
profiles:
- schedulerName: cpu-binpack-scheduler-mA-BalancedAllocation
plugins:
multiPoint:
enabled:
- name: NodeResourcesFit
- name: NodeResourcesBalancedAllocation
disabled:
- name: PodTopologySpread
pluginConfig:
# NodeResourcesFit configuration
- name: NodeResourcesFit
args:
apiVersion: kubescheduler.config.k8s.io/v1
kind: NodeResourcesFitArgs
scoringStrategy:
type: MostAllocated
resources:
- name: cpu
weight: 8
- name: memory
weight: 1
- name: NodeResourcesBalancedAllocation
args:
apiVersion: kubescheduler.config.k8s.io/v1
kind: NodeResourcesBalancedAllocationArgs
resources:
- name: cpu
weight: 1
- name: memory
weight: 1
Atribuir um perfil de agendador a um cluster inteiro do AKS
Criar um arquivo chamado
cpu-bin-packing-scheduler.yaml, com o CRD nomeadoupstreamAplique o manifesto de configuração de agendamento usando o
kubectl applycomando.kubectl apply -f cpu-bin-packing-scheduler.yamlPara direcionar esse mecanismo de agendamento para workloads específicas, atualize suas implantações de pods com o seguinte
schedulerName:... ... spec: schedulerName: binpacking-scheduler ... ...
Próximas Etapas
Para saber mais sobre o agendador do AKS, outras configurações e práticas recomendadas, consulte os seguintes recursos: