5.5. Ordonnancement des charges de travail avec l'ordonnanceur NUMA-aware
Vous pouvez planifier des charges de travail avec le planificateur NUMA-aware à l'aide de Deployment CR qui spécifient les ressources minimales requises pour traiter la charge de travail.
L'exemple de déploiement suivant utilise l'ordonnancement NUMA-aware pour un exemple de charge de travail.
Conditions préalables
-
Installez le CLI OpenShift (
oc). -
Connectez-vous en tant qu'utilisateur disposant des privilèges
cluster-admin. - Installez l'opérateur de ressources NUMA et déployez l'ordonnanceur secondaire compatible NUMA.
Procédure
Obtenez le nom de l'ordonnanceur NUMA-aware déployé dans le cluster en exécutant la commande suivante :
$ oc get numaresourcesschedulers.nodetopology.openshift.io numaresourcesscheduler -o json | jq '.status.schedulerName'Exemple de sortie
topo-aware-schedulerCréez un CR
Deploymentqui utilise l'ordonnanceur nommétopo-aware-scheduler, par exemple :Enregistrez le YAML suivant dans le fichier
nro-deployment.yaml:apiVersion: apps/v1 kind: Deployment metadata: name: numa-deployment-1 namespace: openshift-numaresources spec: replicas: 1 selector: matchLabels: app: test template: metadata: labels: app: test spec: schedulerName: topo-aware-scheduler1 containers: - name: ctnr image: quay.io/openshifttest/hello-openshift:openshift imagePullPolicy: IfNotPresent resources: limits: memory: "100Mi" cpu: "10" requests: memory: "100Mi" cpu: "10" - name: ctnr2 image: gcr.io/google_containers/pause-amd64:3.0 imagePullPolicy: IfNotPresent command: ["/bin/sh", "-c"] args: [ "while true; do sleep 1h; done;" ] resources: limits: memory: "100Mi" cpu: "8" requests: memory: "100Mi" cpu: "8"- 1
schedulerNamedoit correspondre au nom de l'ordonnanceur NUMA-aware déployé dans votre cluster, par exempletopo-aware-scheduler.
Créez le CR
Deploymenten exécutant la commande suivante :$ oc create -f nro-deployment.yaml
Vérification
Vérifiez que le déploiement s'est déroulé correctement :
$ oc get pods -n openshift-numaresourcesExemple de sortie
NAME READY STATUS RESTARTS AGE numa-deployment-1-56954b7b46-pfgw8 2/2 Running 0 129m numaresources-controller-manager-7575848485-bns4s 1/1 Running 0 15h numaresourcesoperator-worker-dvj4n 2/2 Running 0 18h numaresourcesoperator-worker-lcg4t 2/2 Running 0 16h secondary-scheduler-56994cf6cf-7qf4q 1/1 Running 0 18hVérifiez que le site
topo-aware-schedulerplanifie le pod déployé en exécutant la commande suivante :$ oc describe pod numa-deployment-1-56954b7b46-pfgw8 -n openshift-numaresourcesExemple de sortie
Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal Scheduled 130m topo-aware-scheduler Successfully assigned openshift-numaresources/numa-deployment-1-56954b7b46-pfgw8 to compute-0.example.comNoteLes déploiements qui demandent plus de ressources qu'il n'y en a de disponibles pour la planification échoueront avec une erreur
MinimumReplicasUnavailable. Le déploiement réussit lorsque les ressources requises sont disponibles. Les pods restent dans l'étatPendingjusqu'à ce que les ressources nécessaires soient disponibles.Vérifiez que les ressources allouées prévues sont répertoriées pour le nœud. Exécutez la commande suivante :
$ oc describe noderesourcetopologies.topology.node.k8s.ioExemple de sortie
... Zones: Costs: Name: node-0 Value: 10 Name: node-1 Value: 21 Name: node-0 Resources: Allocatable: 39 Available: 211 Capacity: 40 Name: cpu Allocatable: 6442450944 Available: 6442450944 Capacity: 6442450944 Name: hugepages-1Gi Allocatable: 134217728 Available: 134217728 Capacity: 134217728 Name: hugepages-2Mi Allocatable: 262415904768 Available: 262206189568 Capacity: 270146007040 Name: memory Type: Node- 1
- La capacité de
Availableest réduite en raison des ressources qui ont été allouées au pod garanti.
Les ressources consommées par les pods garantis sont soustraites des ressources de nœuds disponibles répertoriées sous
noderesourcetopologies.topology.node.k8s.io.Les allocations de ressources pour les modules ayant une qualité de service
Best-effortouBurstable(qosClass) ne sont pas reflétées dans les ressources des nœuds NUMA sousnoderesourcetopologies.topology.node.k8s.io. Si les ressources consommées par un pod ne sont pas prises en compte dans le calcul des ressources du nœud, vérifiez que le pod aqosClassdeGuaranteeden exécutant la commande suivante :$ oc get pod <pod_name> -n <pod_namespace> -o jsonpath="{ .status.qosClass }"Exemple de sortie
Guaranteed