Définition d'une priorité de pod
Avec la priorité et la préemption des pods, vous pouvez configurer des classes de priorité pour indiquer la priorité relative des pods qui constituent la charge de travail de votre cluster Red Hat OpenShift. Le contrôleur Red Hat OpenShift tient compte de la priorité d'un pod et peut même préempter (retirer) des pods dont la priorité est plus faible pour libérer de la place sur un noeud worker pour des pods de priorité plus élevée. Pour plus d'informations, voir la documentation de Red Hat OpenShift.
- Pourquoi dois-je définir la priorité d'un pod?
- En tant qu'administrateur de cluster, vous souhaitez contrôler les pods essentiels à la charge de travail de votre cluster. Les classes de priorité peuvent vous aider à contrôler les décisions du contrôleur Red Hat OpenShift pour privilégier les pods avec une priorité plus élevée par rapport aux pods avec une priorité plus faible. Le contrôleur Red Hat OpenShift peut même préempter (retirer) les pods de priorité plus faible en cours d'exécution de sorte que les pods en attente dont la priorité est plus élevée puissent être planifiés.
En définissant la priorité des pods, vous pouvez empêcher des charges de travail avec une priorité plus faible d'impacter des charges de travail essentielles dans votre cluster, notamment dans les cas où le cluster commence à atteindre la limite de capacité de ses ressources.
Assurez-vous d'avoir configuré l'accès utilisateur approprié pour votre cluster, et, le cas échéant, des contraintes de contexte de sécurité (SCC). Les règles d'accès et les contraintes SCC permettent d'éviter que des utilisateurs non fiables déploient des pods de priorité élevée empêchant la planification d'autres pods.
Comment fonctionnent la planification prioritaire et la préemption?
En général, les pods en attente ayant une priorité plus élevée sont planifiés avant les pods avec une priorité plus faible. Si vos nœuds de travail ne disposent plus de ressources suffisantes, le contrôleur « Red Hat OpenShift » peut préempter (supprimer) des pods afin de libérer suffisamment de ressources pour permettre la planification des pods ayant une priorité plus élevée. La préemption est également affectée par les périodes d'arrêt approprié, les objets pod disruption budget et l'affinité des noeuds worker.
Si vous ne spécifiez pas de priorité pour votre déploiement de pod, la classe de priorité globalDefault est utilisée par défaut. Si vous n'avez pas de classe de priorité globalDefault, la priorité par défaut pour tous
les pods est zéro (0). Par défaut, Red Hat OpenShift on IBM Cloud n'est pas défini sur globalDefault. Par conséquent, la priorité par défaut de pod est zéro.
Pour comprendre comment s'articule la priorité des pods avec le contrôleur Red Hat OpenShift, considérez les scénarios illustrés dans la figure suivante. Vous devez placer les pods dont la priorité est définie sur des noeuds worker avec des ressources disponibles. Autrement, les pods de priorité élevée dans votre cluster peuvent rester en attente, alors que des pods existants sont retirés au même moment, comme dans le scénario 3.
- Trois pods avec une priorité élevée, moyenne et faible sont en attente de planification. Le contrôleur Red Hat OpenShift trouve un noeud worker disponible disposant d'assez d'espace pour les trois pods et planifie ces pods par ordre de priorité, en planifiant en premier le pod dont la priorité est la plus élevée.
- Trois pods avec une priorité élevée, moyenne et faible sont en attente de planification. Le contrôleur Red Hat OpenShift trouve un noeud worker disponible mais ce noeud a juste assez de ressources pour prendre en charge les pods de priorité élevée et moyenne. Le pod de priorité faible n'est pas planifié et reste en attente.
- Deux pods avec une priorité élevée et moyenne sont en attente de planification. Il existe déjà un troisième pod avec une priorité faible sur un noeud worker disponible. Cependant, le noeud worker ne dispose pas de ressources suffisantes pour planifier les pods en attente. Le contrôleur Red Hat OpenShift préempte, ou retire, le pod de faible priorité, qui repasse alors à l'état En attente. Ensuite, le contrôleur Red Hat OpenShift tente de planifier le pod à priorité élevée. Cependant, le noeud worker ne dispose pas de ressources suffisantes pour planifier le pod de priorité élevée et le contrôleur Red Hat OpenShift planifie à la place le pod avec une priorité moyenne.
Pour plus d'informations, consultez la documentation d' Kubernetes concernant Priorité et préemption des pods.
- Puis-je désactiver le contrôleur d'admission prioritaire des pods?
- Non. Si vous ne souhaitez pas utiliser la priorité pod, ne définissez pas
globalDefaultou incluez une classe de priorité dans vos déploiements de pod. Tous les pods prennent la valeur zéro, sauf les pods essentiels pour le cluster qu'IBM déploie avec les classes de priorité par défaut. Comme la priorité des pods est relative, cette configuration de base garantit que les pods essentiels pour le cluster sont prioritaires pour les ressources et planifie tous les autres pods en suivant les règles de planification existantes en vigueur.
Description des classes de priorité par défaut
Vos clusters Red Hat® OpenShift® on IBM Cloud® sont fournis avec des classes de priorité par défaut.
Ne modifiez pas les classes par défaut qui sont utilisées pour gérer correctement votre cluster. Vous pouvez utiliser ces classes dans les déploiements de vos applications ou créer vos propres classes de priorité.
Le tableau suivant présente les classes de priorité fournies par défaut dans votre cluster et indique pourquoi elles sont utilisées.
| Nom | Définie par | Valeur de priorité | Objectif |
|---|---|---|---|
system-node-critical |
Kubernetes | 2000001000 | Sélectionnez cette classe de priorité pour les pods déployés dans les espaces de noms système privilégiés lors de la création du cluster, afin de protéger les fonctionnalités critiques des nœuds de travail, telles que les pods liés à la mise en réseau, au stockage, à la journalisation, à la surveillance et aux métriques. |
system-cluster-critical |
Kubernetes | 2000000000 | Sélectionnez cette classe de priorité pour les pods déployés dans les espaces de noms système privilégiés lors de la création du cluster, afin de protéger les fonctionnalités critiques de celui-ci, telles que les pods liés à la mise en réseau, au stockage, à la journalisation, à la surveillance et aux métriques. |
ibm-app-cluster-critical |
IBM | 900000000 | Les pods déployés dans des espaces de noms système privilégiés lors de la création du cluster utilisent cette classe de priorité pour protéger les fonctionnalités critiques des applications, telles que les pods de l'équilibreur de charge. |
Vous pouvez vérifier les pods qui utilisent des classes de priorité en exécutant la commande suivante.
oc get pods --all-namespaces -o custom-columns=NAME:.metadata.name,PRIORITY:.spec.priorityClassName
Création d'une classe de priorité
Pour définir la priorité d'un pod, vous devez utiliser une classe de priorité.
Avant de commencer :
- Accédez à votre cluster Red Hat OpenShift.
- Assurez-vous de disposer de l'Auteur ou Responsable IBM Cloud Rôle d'accès au service IAM pour l'espace de noms
default.
-
Répertoriez les classes de priorité existantes. Vous pouvez utiliser une classe de priorité existante comme modèle pour la nouvelle classe.
oc get priorityclasses -
Sélectionnez la classe de priorité que vous voulez copier et créez un fichier YAML local.
oc get priorityclass <priority_class> -o yaml > Downloads/priorityclass.yaml -
Créez un fichier YAML pour votre classe de priorité.
apiVersion: scheduling.k8s.io/v1alpha1 kind: PriorityClass metadata: name: <priority_class_name> value: <1000000> globalDefault: <false> description: "Use this class for XYZ service pods only."Description des composants du fichier YAML Composants Description nameObligatoire : nom de la classe de priorité que vous souhaitez créer. valueObligatoire : entrez un entier inférieur ou égal à 1 milliard (1000000000). Plus la valeur est élevée, plus la priorité est élevée. Les valeurs sont relatives aux valeurs des autres classes de priorité dans le cluster. Réservez des nombres très élevés pour les gousses critiques système que vous ne souhaitez pas préempter (supprimé). Par exemple, la valeur Classes de priorité critique de cluster par défaut de la valeur de 900000000-2000001000, entrez une valeur inférieure à ces nombres pour les nouvelles classes de priorité, de sorte que rien n'est priorisés plus haut que ces pods.
globalDefaultFacultatif : définissez cette zone sur truepour faire en sorte que cette classe de priorité soit la valeur par défaut globale appliquée à tous les pods planifiés sans valeurpriorityClassName. Une seule classe de priorité dans votre cluster peut être définie avec cette valeur par défaut globale. S'il n'y a pas de valeur par défaut globale, les pods sanspriorityClassNamespécifiées ont une priorité de zéro (0).La classes de priorité par défaut n'est pas défini sur
globalDefault. Si vous avez créé d'autres classes de priorité dans votre cluster, vous pouvez vérifier qu'elles n'ont pas définiglobalDefaulten exécutantoc describe priorityclass <name>.descriptionFacultatif : informez les utilisateurs de la fonction de cette classe de priorité. Mettez cette chaîne entre guillemets ( ""). -
Créez la classe de priorité dans votre cluster.
oc apply -f filepath/priorityclass.yaml -
Vérifiez que la classe de priorité a été créée.
oc get priorityclasses
Parfait ! Vous avez créé une classe de priorité. Informez votre équipe de l'existence de cette classe de priorité en indiquant la classe de priorité qu'ils doivent utiliser pour leurs déploiements de pods, le cas échéant.
Affectation de priorité à vos pods
Affectez une classe de priorité à la spécification de votre pod pour définir la priorité du pod au sein de votre cluster Red Hat OpenShift on IBM Cloud.
Avant de commencer :
- Accédez à votre cluster Red Hat OpenShift.
- Assurez-vous de disposer du rôle d'accès au service IAM « Writer » ou « Manager » IBM Cloud dans l'espace de noms dans lequel vous souhaitez déployer les pods.
- Familiarisez-vous avec le fonctionnement de la planification des priorités, car la priorité peut préempter des pods existants et affecter le mode de consommation des ressources de votre cluster.
Suivez les étapes ci-dessous pour évaluer l'importance des autres pods déployés, afin de pouvoir choisir la classe de priorité appropriée pour vos pods en fonction de ce qui est déjà déployé.
-
Affichez les classes de priorité utilisées par les autres pods dans l'espace de noms.
oc get pods -n <namespace> -o custom-columns=NAME:.metadata.name,PRIORITY:.spec.priorityClassName -
Obtenez les caractéristiques de la classe de priorité et notez le nombre correspondant à sa valeur. Les pods ayant les nombres les plus élevés sont prioritaires par rapport aux pods avec des nombres plus faibles. Répétez cette étape pour chaque classe de priorité que vous désirez passer en revue.
oc describe priorityclass <priorityclass_name> -
Obtenez la classe de priorité que vous désirez utiliser ou créez votre propre classe de priorité.
oc get priorityclasses -
Dans votre spécification de pod, ajoutez la zone
priorityClassNameavec le nom de la classe de priorité que vous avez obtenue à l'étape précédente.apiVersion: apps/v1 kind: Deployment metadata: name: ibmliberty spec: replicas: 1 selector: matchLabels: app: ibmliberty template: metadata: labels: app: ibmliberty spec: containers: - name: ibmliberty image: icr.io/ibm/liberty:latest ports: - containerPort: 9080 priorityClassName: <priorityclass_name> -
Créez vos pods hiérarchisés dans l'espace de noms où vous voulez les déployer.
oc apply -f filepath/pod-deployment.yaml