Chapitre 5. À l’aide d’emplois et de jeux de démons
5.1. Exécuter des tâches d’arrière-plan sur les nœuds automatiquement avec les ensembles de démons Copier lienLien copié sur presse-papiers!
En tant qu’administrateur, vous pouvez créer et utiliser des ensembles de démons pour exécuter des répliques d’un pod sur des nœuds spécifiques ou tous les nœuds d’un Red Hat OpenShift Service sur le cluster AWS.
Le jeu de démon garantit que tous les nœuds (ou certains) exécutent une copie d’un pod. Comme les nœuds sont ajoutés au cluster, des pods sont ajoutés au cluster. Comme les nœuds sont retirés de l’amas, ces gousses sont enlevées par collecte des ordures. La suppression d’un jeu de démons nettoiera les gousses qu’il a créées.
Il est possible d’utiliser des ensembles de démons pour créer un stockage partagé, exécuter un pod de journalisation sur tous les nœuds de votre cluster ou déployer un agent de surveillance sur chaque nœud.
Les administrateurs de cluster et les administrateurs de projet peuvent pour des raisons de sécurité créer des ensembles de démons.
Consultez la documentation Kubernetes pour plus d’informations sur les ensembles de démons.
La programmation du jeu de démon est incompatible avec le sélecteur de nœud par défaut du projet. Lorsque vous ne le désactivez pas, le jeu de démon est limité en fusionnant avec le sélecteur de nœud par défaut. Il en résulte une recréation fréquente de la gousse sur les nœuds qui n’ont pas été sélectionnés par le sélecteur de nœud fusionné, ce qui à son tour met une charge indésirable sur le cluster.
5.1.1. Programmé par défaut de planification Copier lienLien copié sur presse-papiers!
L’ensemble de démons garantit que tous les nœuds éligibles exécutent une copie d’un pod. Habituellement, le nœud sur lequel un pod fonctionne est sélectionné par le planificateur Kubernetes. Cependant, les gousses de jeu de démon sont créées et programmées par le contrôleur de jeu de démon. Cela pose les questions suivantes:
- Comportement des gousses incohérentes: Les gousses normales qui attendent d’être programmées sont créées et dans l’état en attente, mais les gousses de jeu de démons ne sont pas créées dans l’état en attente. C’est déroutant pour l’utilisateur.
- La préemption de Pod est gérée par le programmeur par défaut. Lorsque la préemption est activée, le contrôleur de jeu de démon prendra des décisions de planification sans tenir compte de la priorité et de la préemption des pod.
La fonction ScheduleDaemonSetPods, activée par défaut dans Red Hat OpenShift Service sur AWS, vous permet de programmer les jeux de démons en utilisant le programmateur par défaut au lieu du contrôleur de jeu de démon, en ajoutant le terme NodeAffinity aux pods de jeu de démons, au lieu du terme spec.nodeName. Le planificateur par défaut est ensuite utilisé pour lier le pod à l’hôte cible. Lorsque l’affinité des nœuds de la gousse de démon existe déjà, elle est remplacée. Le contrôleur de jeu de démon effectue uniquement ces opérations lors de la création ou de la modification de gousses de jeu de démons, et aucune modification n’est apportée à la spéc.template de l’ensemble de démon.
De plus, un node.kubernetes.io/unschedulable:NoSchedule tolérance est ajouté automatiquement aux pods de daemon. Le programmeur par défaut ignore les nœuds imprévus lors de la planification des gousses de jeu de démons.
5.1.2. Créer des démons Copier lienLien copié sur presse-papiers!
Lors de la création de jeux de démons, le champ nodeSelector est utilisé pour indiquer les nœuds sur lesquels le jeu de démon devrait déployer des répliques.
Conditions préalables
Avant de commencer à utiliser les jeux de démons, désactivez le sélecteur de nœuds par défaut dans votre espace de noms, en définissant l’annotation openshift.io/node-selector de l’espace de noms sur une chaîne vide:
oc patch namespace myproject -p \ '{"metadata": {"annotations": {"openshift.io/node-selector": ""}}}'
$ oc patch namespace myproject -p \ '{"metadata": {"annotations": {"openshift.io/node-selector": ""}}}'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow AstuceAlternativement, vous pouvez appliquer le YAML suivant pour désactiver le sélecteur de nœud par défaut à l’échelle du projet pour un espace de noms:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Procédure
Créer un jeu de démon:
Définir le fichier daemon set yaml:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Le sélecteur d’étiquette qui détermine quels pods appartiennent à l’ensemble de démons.
- 2
- Le sélecteur d’étiquette du modèle de pod. Doit correspondre au sélecteur d’étiquette ci-dessus.
- 3
- Le sélecteur de nœuds qui détermine sur quels nœuds les répliques de pod doivent être déployés. L’étiquette correspondante doit être présente sur le nœud.
Créer l’objet de jeu de démon:
oc create -f daemonset.yaml
$ oc create -f daemonset.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Afin de vérifier que les gousses ont été créées, et que chaque nœud a une réplique de pod:
Découvrez les gousses de daemonset:
oc get pods
$ oc get pods
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
hello-daemonset-cx6md 1/1 Running 0 2m hello-daemonset-e3md9 1/1 Running 0 2m
hello-daemonset-cx6md 1/1 Running 0 2m hello-daemonset-e3md9 1/1 Running 0 2m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Afficher les gousses pour vérifier que la gousse a été placée sur le nœud:
oc describe pod/hello-daemonset-cx6md|grep Node
$ oc describe pod/hello-daemonset-cx6md|grep Node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Node: openshift-node01.hostname.com/10.14.20.134
Node: openshift-node01.hostname.com/10.14.20.134
Copy to Clipboard Copied! Toggle word wrap Toggle overflow oc describe pod/hello-daemonset-e3md9|grep Node
$ oc describe pod/hello-daemonset-e3md9|grep Node
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Exemple de sortie
Node: openshift-node02.hostname.com/10.14.20.137
Node: openshift-node02.hostname.com/10.14.20.137
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- En cas de mise à jour d’un modèle de pod daemon, les répliques de pod existantes ne sont pas affectées.
- Lorsque vous supprimez un jeu de démons, puis créez un nouveau jeu de démons avec un modèle différent mais le même sélecteur d’étiquettes, il reconnaît que les répliques de gousses existantes ont des étiquettes correspondantes et ne les met pas à jour ou ne crée pas de nouvelles répliques malgré une inadéquation dans le modèle de pod.
- Lorsque vous changez d’étiquettes de nœuds, le jeu de démons ajoute des pods aux nœuds qui correspondent aux nouvelles étiquettes et supprime les pods des nœuds qui ne correspondent pas aux nouvelles étiquettes.
Afin de mettre à jour un jeu de démons, forcez de nouvelles répliques de gousses à être créées en supprimant les anciennes répliques ou nœuds.