13.2. À l’aide de taintes et de tolérances pour contrôler le placement des pods d’enregistrement
Les taintes et les tolérances permettent au nœud de contrôler quels pods doivent (ou ne devraient pas) être programmés sur eux.
13.2.1. Comprendre les taintes et les tolérances Copier lienLien copié sur presse-papiers!
La tainte permet à un nœud de refuser la programmation d’une gousse à moins que cette gousse n’ait une tolérance correspondante.
Appliquez des taintes à un nœud via la spécification Node (NodeSpec) et appliquez des tolérances à un pod via la spécification Pod (PodSpec). Lorsque vous appliquez une tainte sur un nœud, le programmeur ne peut pas placer une gousse sur ce nœud à moins que la gousse ne puisse tolérer la tainte.
Exemple taint dans une spécification de nœud
Exemple de tolérance dans un Pod spec
Les taintes et les tolérances se composent d’une clé, d’une valeur et d’un effet.
Le paramètre | Description | ||||||
---|---|---|---|---|---|---|---|
| La clé est n’importe quelle chaîne, jusqu’à 253 caractères. La clé doit commencer par une lettre ou un nombre, et peut contenir des lettres, des chiffres, des traits d’union, des points et des accents. | ||||||
| La valeur est n’importe quelle chaîne, jusqu’à 63 caractères. La valeur doit commencer par une lettre ou un nombre, et peut contenir des lettres, des chiffres, des traits d’union, des points et des accents. | ||||||
| L’effet est l’un des suivants:
| ||||||
|
|
Lorsque vous ajoutez un taint NoSchedule à un nœud de plan de contrôle, le nœud doit avoir le node-role.kubernetes.io/master=:NoSchedule taint, qui est ajouté par défaut.
À titre d’exemple:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
A tolérance correspond à une tainte:
Lorsque le paramètre de l’opérateur est défini sur Equal:
- les paramètres clés sont les mêmes;
- les paramètres de valeur sont les mêmes;
- les paramètres d’effet sont les mêmes.
Lorsque le paramètre opérateur est défini sur Exist:
- les paramètres clés sont les mêmes;
- les paramètres d’effet sont les mêmes.
Les taintes suivantes sont intégrées dans Red Hat OpenShift Service sur AWS:
- node.kubernetes.io/not-ready: Le nœud n’est pas prêt. Cela correspond à la condition du nœud Ready=False.
- node.kubernetes.io/unreachable: Le nœud est inaccessible à partir du contrôleur du nœud. Cela correspond à la condition du nœud Ready=Inknown.
- node.kubernetes.io/Memory-pression: Le nœud a des problèmes de pression de mémoire. Cela correspond à la condition du nœud MemoryPressure=True.
- node.kubernetes.io/disk-pression: Le nœud a des problèmes de pression du disque. Cela correspond à la condition du nœud DiskPressure=True.
- node.kubernetes.io/network-indisponible: Le réseau de nœuds n’est pas disponible.
- node.kubernetes.io/Unschedulable: Le nœud est imprévu.
- node.cloudprovider.kubernetes.io/non initialisé: Lorsque le contrôleur de nœud est démarré avec un fournisseur de cloud externe, cette tainte est définie sur un nœud pour le marquer comme inutilisable. Après qu’un contrôleur du cloud-controller-manager initialise ce nœud, le kubelet enlève cette tainte.
node.kubernetes.io/pid-pression: Le nœud a une pression pid. Cela correspond à la condition du nœud PIDPressure=True.
ImportantLe service Red Hat OpenShift sur AWS ne définit pas d’éviction pid.available par défaut.
13.2.2. Loki Pod placement Copier lienLien copié sur presse-papiers!
Il est possible de contrôler les nœuds sur lesquels les pods Loki s’exécutent et d’empêcher d’autres charges de travail d’utiliser ces nœuds, en utilisant des tolérances ou des sélecteurs de nœuds sur les pods.
Avec la ressource personnalisée LokiStack (CR) vous pouvez appliquer des tolérances aux pods de log store et appliquer des taintes à un nœud avec la spécification du nœud. La tainte sur un nœud est une paire key:value qui ordonne au nœud de repousser toutes les gousses qui ne permettent pas la tainte. En utilisant une paire clé:valeur spécifique qui n’est pas sur d’autres gousses garantit que seuls les pods de log store peuvent fonctionner sur ce nœud.
Exemple LokiStack avec sélecteurs de nœuds
Dans la configuration de l’exemple précédent, tous les pods Loki sont déplacés vers des nœuds contenant l’étiquette node-role.kubernetes.io/infra: "".
Exemple LokiStack CR avec sélecteurs de nœuds et tolérances
Afin de configurer les champs nodeSelector et tolerations du LokiStack (CR), vous pouvez utiliser la commande oc explicative pour afficher la description et les champs d’une ressource particulière:
oc explain lokistack.spec.template
$ oc explain lokistack.spec.template
Exemple de sortie
Afin d’obtenir des informations plus détaillées, vous pouvez ajouter un champ spécifique:
oc explain lokistack.spec.template.compactor
$ oc explain lokistack.spec.template.compactor
Exemple de sortie
13.2.3. À l’aide de tolérances pour contrôler le placement de pod de collecteur de journal Copier lienLien copié sur presse-papiers!
Les pods collector de journaux par défaut ont la configuration de tolérance suivante:
Conditions préalables
- Le Red Hat OpenShift Logging Operator et OpenShift CLI (oc) ont été installés.
Procédure
Ajoutez un taint à un nœud où vous voulez enregistrer des pods collector pour programmer les pods de collecte de journalisation en exécutant la commande suivante:
oc adm taint nodes <node_name> <key>=<value>:<effect>
$ oc adm taint nodes <node_name> <key>=<value>:<effect>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Commande d’exemple
oc adm taint nodes node1 collector=node:NoExecute
$ oc adm taint nodes node1 collector=node:NoExecute
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Cet exemple place une tainte sur node1 qui a le collecteur de clés, le nœud de valeur et l’effet taint NoExecute. Il faut utiliser l’effet NoExecute taint. Le programme noexecute uniquement les pods qui correspondent à la tainte et supprime les pods existants qui ne correspondent pas.
Éditer la strophe de collection de la ressource personnalisée ClusterLogging (CR) pour configurer une tolérance pour les pods de collecte de journalisation:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Indiquez la clé que vous avez ajoutée au nœud.
- 2
- Indiquez l’opérateur existant pour exiger que les paramètres clés/valeur/effet correspondent.
- 3
- Indiquez l’effet NoExecute.
- 4
- En option, spécifiez le paramètre de toléranceSeconds pour définir combien de temps un pod peut rester lié à un nœud avant d’être expulsé.
Cette tolérance correspond à la tainte créée par la commande oc adm taint. La gousse avec cette tolérance peut être programmée sur le nœud1.
13.2.4. Configuration des ressources et planification pour les collectionneurs de journalisation Copier lienLien copié sur presse-papiers!
Les administrateurs peuvent modifier les ressources ou la planification du collecteur en créant une ressource personnalisée ClusterLogging (CR) qui se trouve dans le même espace de noms et a le même nom que le ClusterLogForwarder CR qu’il prend en charge.
Les strophes applicables au ClusterLogging CR lors de l’utilisation de plusieurs transmetteurs de journaux dans un déploiement sont l’état de gestion et la collecte. Les autres strophes sont ignorées.
Conditions préalables
- Il y a des autorisations d’administrateur.
- La version 5.8 ou plus récente de Red Hat OpenShift Logging Operator a été installée.
- ClusterLogForwarder CR a créé un ClusterLogForwarder CR.
Procédure
Créez un ClusterLogging CR qui prend en charge votre ClusterLogForwarder CR existant:
Exemple ClusterLogging CR YAML
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Appliquez le ClusterLogging CR en exécutant la commande suivante:
oc apply -f <filename>.yaml
$ oc apply -f <filename>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.2.5. Affichage des pods de collecteurs de journalisation Copier lienLien copié sur presse-papiers!
Il est possible d’afficher les pods de collecteurs de journalisation et les nœuds correspondants sur lesquels ils sont en cours d’exécution.
Procédure
Exécutez la commande suivante dans un projet pour afficher les pods de collecte de journalisation et leurs détails:
oc get pods --selector component=collector -o wide -n <project_name>
$ oc get pods --selector component=collector -o wide -n <project_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Copy to Clipboard Copied! Toggle word wrap Toggle overflow