Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Neste artigo, aprende como agrupar os seus nós para melhorar a utilização dos nós para clusters Azure Kubernetes Service (AKS) usando o plugin de agendamento em árvore. NodeResourcesFit O scheduler AKS predefinido opera num NodeResourcesFit:LeastAllocated modo que prioriza nós com menor utilização ao agendar pods. Configurable Scheduler Profiles no AKS permite-lhe alterar este comportamento predefinido e afinar a configuração para priorizar nós com maior utilização. Esta documentação cobre três perfis diferentes de agendadores personalizados, destacando as práticas recomendadas para melhorar a utilização ao reduzir os nós sobrecarregados.
O agrupamento de bins de nós é uma estratégia de agendamento que maximiza a utilização de recursos ao aumentar a densidade de pods nos nós, em vez de espalhar os pods por um pool de nós ou autoescalar os nós prematuramente. O empacotamento de caixas ajuda a minimizar recursos desperdiçados e pode reduzir o custo operacional de manter nós inativos ou subutilizados. Melhorar a utilização dos nós é fundamental, pois os dados mostram que a CPU e a memória são recursos frequentemente solicitados em excesso. Além disso, à medida que a adoção das GPUs cresce, a utilização eficiente dos aceleradores torna-se igualmente crítica devido à sua relativa escassez e custo.
Limitações
- Atualmente, o AKS não gere a implantação de agendadores de terceiros ou de plugins de agendamento externos.
- O AKS não suporta plugins de agendamento na árvore direcionados ao
aks-systemagendador. Essa restrição está em vigor para ajudar a evitar alterações inesperadas nos complementos do AKS habilitados no cluster. Além disso, não se pode definir umprofilechamadoaks-system.
Pré-requisitos
- A versão
2.76.0ou posterior da CLI do Azure. Executeaz --versionpara localizar a versão e executeaz upgradepara atualizar a versão. Se precisar de instalar ou atualizar, consulte Install Azure CLI. - Versão do Kubernetes
1.33ou posterior em execução no seu cluster AKS. - A extensão
aks-previewCLI do Azure versão18.0.0b27ou posterior. - Registe a
UserDefinedSchedulerConfigurationPreviewfeature flag na tua subscrição do Azure.
Habilitar a configuração do perfil do agendador em um cluster AKS
Você pode habilitar a configuração do perfil de agendamento em um cluster AKS novo ou existente.
Crie um cluster AKS com a configuração do perfil do agendador ativada 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-keysQuando 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 ativar o recurso no cluster AKS, verifique se a definição de recurso personalizada (CRD) do controlador do agendador foi instalada com êxito usando o
kubectl getcomando.kubectl get crd schedulerconfigurations.aks.azure.comObservação
Este 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ós utilizando o plugin RequestedtoCapacity.
Dos três perfis, RequestedToCapacityRatio fornece o controlo de utilizador mais granular para mapear nós para uma utilização explícita. Por exemplo, este perfil de agendamento foi configurado para favorecer nós dentro de uma faixa de utilização de 50-85%, evitar nós vazios e despriorizar severamente nós quase cheios com 90% de utilização ou mais, deixando alguma margem de manobra. Dado este nível de detalhe, RequestedtoCapacity é a estratégia de pontuação recomendada para o agrupamento de bins de 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, empacotando nós enquanto evita a saturação excessiva para aplicações com muita CPU. Por fim, tens de desativar o PodTopologySpread plugin, pois pode sobrepor a pontuação ponderada se NodeResourcesFit for deixado ativado por defeito.
-
NodeResourcesFitDetermina como o agendador avalia se um nó possui recursos suficientes para executar um pod. -
scoringStrategy: RequestedToCapacityRatioPontua os nós com base na razão entre os recursos solicitados e a capacidade total do nó após a colocação hipoteticamente do pod. -
Resourcesespecifica queCPUeMemorysão os principais recursos considerados para a pontuação. Com um peso de8, os nós com utilização de CPU são pontuados 8 vezes mais do que a memória durante o ciclo de agendamento de pods. Isto aumenta a probabilidade de serem selecionados nós com elevada utilização. -
shape:Mapeia a utilização do nó para a pontuação do agendador. Cada ponto representa uma percentagem de utilização e a 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 agrupamento de nós em bin com o Plugin MostAllocated
Configurar o escalonador com MostAllocated prioriza exclusivamente os nós com base no uso de recursos. Quanto maior for a utilização de recursos, maior é a pontuação atribuída a um nó, evitando nós que não são utilizados e adiando o escalonamento até ser necessário. Isoladamente, esta configuração corre o risco de saturar os nós além dos limites desejáveis, causando estrangulamento ou criando mais pontos de estrangulamento.
Esta configuração torna a utilização da CPU o fator dominante na seleção de nós. Para garantir um comportamento consistente, deve desativar o plug-in PodTopologySpread, pois pode sobrepor a pontuação ponderada caso o NodeResourcesFit permaneça ativado por defeito.
-
NodeResourcesFitDetermina como o agendador avalia se um nó possui recursos suficientes para executar um pod. -
scoringStrategy: MostAllocatedPontuações baseadas nas solicitações de pod.MostAllocateddiz ao sistema de agendamento para dar preferência a nós com elevado nível de utilização de recursos. Esta estratégia promove uma colocação densa dos pods e ajuda a alcançar uma melhor utilização dos nós. -
Resourcesespecifica queCPUeMemorysão os principais recursos considerados para a pontuação. Com um peso de8, os nós com utilização de CPU são pontuados 8 vezes mais do que a memória durante o ciclo de agendamento de pods. Isto aumenta a probabilidade de serem selecionados nós com elevada utilização.
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
Configure o bin-packing de nós com os plugins MostAllocated e NodeResourcesBalancedAllocation
Esta configuração procura adicionar algumas barreiras à estratégia MostAllocated simples e eficiente, ao pontuar os nós com base na utilização equilibrada dos recursos-alvo.
NodeResourcesBalancedAllocation incentiva a colocação de pods em nós com utilização proporcional definida pelo utilizador, aumentando a eficiência global enquanto evita gargalos causados pela pressão assimétrica dos recursos. Por exemplo, nós limitados pela CPU com memória abundante e não utilizada teriam uma pontuação mais baixa em favor dos nós com melhor equilíbrio entre utilização da CPU e da memória.
-
NodeResourcesBalancedAllocationAtribui pontuações aos nós com base em quão equilibrado é o uso de vários recursos. Em vez de maximizar a utilização de um único recurso, este plugin prefere nós onde o consumo de recursos é proporcional. -
ResourcesEspecifica quais os recursos considerados durante a avaliação do balanço. Com CPU e memória ponderadas de forma igual, os nós obtêm pontuações mais elevadas 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 AKS inteiro
Crie um ficheiro 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 cargas de trabalho específicas, atualize as suas implementações de pod com o seguinte
schedulerName:... ... spec: schedulerName: binpacking-scheduler ... ...
Passos seguintes
Para saber mais sobre o agendador AKS, outras configurações e melhores práticas, consulte os seguintes recursos: