Os clusters do Container Service (ACS) incluem um agendador padrão. Ao enviar um pod para o cluster, o agendador default-scheduler aloca recursos por padrão. Para atender a tipos especiais de recursos e políticas complexas de agendamento, os clusters ACS permitem usar um agendador personalizado. Este tópico descreve como usar um agendador personalizado em um cluster ACS e suas restrições.
Pré-requisitos
O componente acs-virtual-node está instalado na versão v2.12.0-acs.8 ou posterior.
-
O componente kube-scheduler está instalado e atende aos seguintes requisitos de versão:
Versão do cluster ACS
Versão necessária do kube-scheduler
1,32 e posteriores
Todas as versões são compatíveis.
1,31
v1.31.0-aliyun-1.1.2 e posteriores.
1,30
v1.30.3-aliyun-1.1.2 e posteriores.
1,28
v1.28.9-aliyun-1.1.2 e posteriores.
A opção Enable custom labels and schedulers for GPU-HPN nodes no componente kube-scheduler vem ativada por padrão nas versões recentes. Para mais informações, consulte kube-scheduler.
NotaAo usar um agendador personalizado, configure
spec.schedulerNamepara o pod. Para mais detalhes, consulte Specify schedulers for pods.
Procedimento
Etapa 1: Implantar um agendador personalizado
Implante um agendador personalizado no cluster. Para mais informações, consulte a documentação do Kubernetes.
Etapa 2: Modifique a configuração do agendador ACS
Faça login no console do ACS. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique em nome do cluster desejado. No painel de navegação à esquerda, clique em Add-ons.
Na página Add-ons, localize o cartão Kube Scheduler e clique em Configuration.
-
Na caixa de diálogo, selecione Enable custom labels and schedulers for GPU-HPN nodes e clique em OK.
Para mais informações, consulte kube-scheduler .
-
A tabela a seguir compara os efeitos sobre pods e nós quando esta opção está ativada ou desativada.
NotaEste recurso aplica-se apenas a pods e nós GPU-HPN. Não há suporte para agendadores personalizados em outros tipos de computação.
Agendador padrão (desativado)
Agendador personalizado (ativado)
Nome do agendador do pod
Não há suporte para personalização. Após o envio do pod, o campo
spec.schedulerNameé sobrescrito com default-scheduler.Você pode definir
spec.schedulerNamedo Pod com qualquer valor. Esse valor não será modificado após o envio.Processo de agendamento do pod
O agendador padrão do ACS aloca recursos para todos os pods.
O agendador padrão do ACS agenda apenas pods cujo
spec.schedulerNamesejadefault-scheduler. O agendador personalizado aloca recursos para todos os demais pods.Restrições sobre rótulos, anotações e taints para nós GPU-HPN
As restrições do ACS aplicam-se à adição, modificação e exclusão de rótulos, anotações e taints dos nós. Para mais informações, consulte Gerencie node labels and taints.
As restrições do ACS deixam de se aplicar à adição, modificação e exclusão de rótulos, anotações e taints dos nós.
Restrições no agendamento por afinidade de pod
As restrições do ACS aplicam-se à configuração dos campos de afinidade. Para mais informações, consulte Node Affinity Scheduling.
As restrições do ACS deixam de se aplicar à configuração dos campos de afinidade.
Etapa 3: Atribuir um agendador personalizado a um pod
-
Crie um arquivo chamado
dep-with-koordinator.yamlcom o seguinte conteúdo:O arquivo descreve uma aplicação Deployment em que o modelo de Pod especifica um agendador personalizado chamado
koord-scheduler.apiVersion: apps/v1 kind: Deployment metadata: name: dep-with-koordinator labels: app: dep-with-koordinator spec: replicas: 1 selector: matchLabels: app: dep-with-koordinator template: metadata: labels: app: dep-with-koordinator # Specify the compute class as gpu-hpn. Custom schedulers are not supported for other compute types. alibabacloud.com/compute-class: gpu-hpn spec: containers: - name: demo image: registry.cn-hangzhou-finance.aliyuncs.com/acs/stress:v1.0.4 command: - "sleep" - "infinity" restartPolicy: Always # Specify the scheduler name as koord-scheduler. The name must match the one configured in Step 1. schedulerName: koord-scheduler -
Envie o pod para o cluster ACS.
kubectl apply -f dep-with-koordinator.yaml -
Verifique o
schedulerNamena configuração do Pod.kubectl get pod -lapp=dep-with-koordinator -o custom-columns=NAME:.metadata.name,schedulerName:.spec.schedulerNameSaída esperada:
# The pod specifies the custom scheduler named koord-scheduler. NAME schedulerName dep-with-koordinator-xxxxx-xxxxx koord-scheduler
Perguntas frequentes
Erro de agendamento de PVC: Insufficient attachable-volumes-xxx
Esse problema não ocorre com o agendador padrão do Kubernetes. Alguns agendadores personalizados, ao processarem recursos PersistentVolumeClaim (PVC), exigem que o objeto Node da Container Storage Interface (CSI) exista ou tenha reportado informações de capacidade para o driver CSI correspondente. Se o nó não atender a essas condições, o agendador poderá determinar incorretamente que os recursos são insuficientes.
Para resolver isso, configure o agendador para ignorar drivers CSI específicos. Por exemplo, ao usar o agendador Volcano, adicione o parâmetro de inicialização --ignored-provisioners=${csi-driver-name}:
# You can specify multiple drivers, separated by commas.
--ignored-provisioners=povplugin.csi.alibabacloud.com
Ajuste o parâmetro conforme o driver CSI em uso.
Erros de insuficiência de recursos: resource in cluster is overused ou queue resource quota insufficient
Esse problema não ocorre com o agendador padrão do Kubernetes. Certos agendadores personalizados convertem os valores de capacidade de recursos que não sejam CPU ou memória, como ephemeral-storage, para mili-unidades. Como os nós virtuais reportam uma capacidade muito grande por padrão, essa conversão pode causar estouro de inteiro de 64 bits. Consequentemente, o agendador calcula erroneamente a capacidade restante do nó ou cluster como um valor negativo e aciona um erro de insuficiência de recursos. Abra um ticket para o suporte técnico resolver esse problema.