Les clusters ACS intègrent un default-scheduler qui alloue les ressources à tous les pods. Pour les charges de travail GPU-HPN nécessitant des politiques de planification complexes (gang scheduling, placement tenant compte de la topologie), déployez un planificateur personnalisé (par exemple Koordinator ou Volcano) et configurez ACS pour l'utiliser.
Les planificateurs personnalisés sont pris en charge uniquement pour les pods GPU-HPN. Tous les autres types de calcul utilisent des nœuds virtuels standard et ne prennent pas en charge les planificateurs personnalisés.
Prérequis
Avant de commencer, assurez-vous de disposer des éléments suivants :
Un pod dont le type de calcul est défini sur High-Performance Network GPU (gpu-hpn)
Le composant additionnel acs-virtual-node installé en version v2.12.0-acs.8 ou ultérieure
-
Le composant kube-scheduler installé dans une version prenant en charge les planificateurs personnalisés :
Version du cluster ACS Version minimale de kube-scheduler 1,32 et ultérieures Toutes les versions sont prises en charge 1.31 v1.31.0-aliyun-1.1.2 ou ultérieure 1.30 v1.30.3-aliyun-1.1.2 ou ultérieure 1.28 v1.28.9-aliyun-1.1.2 ou ultérieure
Lorsque vous utilisez un planificateur personnalisé pour les pods GPU-HPN, configurez le champ spec.schedulerName de chaque pod. Pour plus d'informations, consultez Specify schedulers for pods .
Remarques d'utilisation
L'activation des planificateurs personnalisés modifie la gestion des pods et des nœuds GPU-HPN par ACS. Prenez connaissance des différences de comportement avant de poursuivre.
| Aspect | Planificateur par défaut (désactivé) | Planificateur personnalisé (activé) |
|---|---|---|
| Nom du planificateur de pod | Non personnalisable. Après l'envoi d'un pod, spec.schedulerName est remplacé par default-scheduler. |
Personnalisable. La valeur de spec.schedulerName est conservée après l'envoi et peut prendre n'importe quelle valeur. |
| Processus de planification des pods | Le planificateur par défaut d'ACS alloue les ressources pour tous les pods. | Le planificateur par défaut d'ACS traite uniquement les pods où spec.schedulerName correspond à default-scheduler. Votre planificateur personnalisé gère tous les autres pods. |
| Contraintes liées aux libellés et aux taints des nœuds GPU-HPN | L'ajout, la modification et la suppression de libellés, d'annotations et de taints de nœuds sont soumis aux contraintes d'ACS. Consultez Manage node labels and taints. | Les contraintes relatives aux libellés, annotations et taints des nœuds ne s'appliquent plus. |
| Contraintes de planification par affinité des pods | La configuration du champ d'affinité est soumise aux contraintes d'ACS. Consultez Node affinity scheduling. | Les contraintes liées au champ d'affinité ne s'appliquent plus. |
Ces modifications concernent exclusivement les pods et les nœuds GPU-HPN. Les autres types de calcul ne prennent pas en charge les planificateurs personnalisés.
Déployer et configurer un planificateur personnalisé
Étape 1 : Déployer un planificateur personnalisé
Déployez votre planificateur personnalisé dans le cluster ACS. Pour un exemple complet incluant la configuration requise du ServiceAccount et du ClusterRoleBinding, reportez-vous à la documentation Kubernetes.
Étape 2 : Activer les planificateurs personnalisés dans ACS
Connectez-vous à la console ACS. Dans le volet de navigation de gauche, cliquez sur Clusters.
Sur la page Clusters, cliquez sur l'ID du cluster cible. Dans le volet de navigation de gauche, choisissez Operations > Add-ons.
Sur la page Add-ons, localisez la carte Kube Scheduler puis cliquez sur Configuration.
Dans la boîte de dialogue, sélectionnez Enable custom labels and schedulers for GPU-HPN nodes, puis cliquez sur OK.
Étape 3 : Configurer un planificateur personnalisé pour un pod
-
Créez un fichier nommé
dep-with-koordinator.yamlavec le contenu suivant. Ce Deployment définitalibabacloud.com/compute-class: gpu-hpnsur le modèle de pod et attribuekoord-schedulercomme planificateur. Remplacezkoord-schedulerpar le nom configuré à l'étape 1.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 # Set the compute class to gpu-hpn. Other compute types do not support custom schedulers. 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 # Set the scheduler name to match the one deployed in Step 1. schedulerName: koord-scheduler -
Appliquez le Deployment au cluster.
kubectl apply -f dep-with-koordinator.yaml -
Vérifiez que le pod utilise bien le planificateur personnalisé.
kubectl get pod -lapp=dep-with-koordinator -o custom-columns=NAME:.metadata.name,schedulerName:.spec.schedulerNameRésultat attendu :
NAME schedulerName dep-with-koordinator-xxxxx-xxxxx koord-scheduler
FAQ
Pourquoi l'erreur « Insufficient attachable-volumes-xxx » apparaît-elle lorsqu'un pod utilise un PVC avec un planificateur personnalisé ?
Certains planificateurs personnalisés exigent que l'objet Node CSI (Container Storage Interface) du nœud existe et ait signalé les informations de capacité pour le pilote CSI correspondant. Si cette condition n'est pas remplie, le planificateur signale une erreur de ressource insuffisante, alors que le planificateur Kubernetes par défaut gère ce cas automatiquement.
Configurez le planificateur personnalisé pour qu'il ignore certains pilotes CSI. Pour le planificateur Volcano, ajoutez l'indicateur --ignored-provisioners au démarrage :
# Separate multiple drivers with commas.
--ignored-provisioners=povplugin.csi.alibabacloud.com
Adaptez le nom du pilote afin qu'il corresponde au pilote CSI présent dans votre cluster.