Déploiement d'applications sur des pools worker où le dispositif de mise à l'échelle automatique est activé
Pour limiter un déploiement de pod à un pool de noeuds worker spécifique qui est géré par le programme de mise à l'échelle automatique de cluster, utilisez une combinaison de libellés et le paramètre nodeSelector ou nodeAffinity afin de déployer des applications uniquement sur les pools de noeuds worker mis à l'échelle automatiquement. Le paramètre nodeAffinity vous permet de mieux contrôler la façon dont le comportement de planification fonctionne pour
faire correspondre des pods et des noeuds worker. Ensuite, utilisez des taches et des tolérances de sorte que seules ces applications puissent s'exécuter sur vos pools de noeuds worker mis à l'échelle automatiquement.
Pour plus d'informations, consultez la documentation Kubernetes suivante :
Avant de commencer :
Pour limiter l'exécution des pods à certains pools de noeuds worker mis à l'échelle automatiquement :
-
Vérifiez que vous avez appliqué un libellé et une tache à votre pool de noeuds worker mis à l'échelle automatiquement comme indiqué dans la rubrique Préparation de votre cluster à la mise à l'échelle automatique.
-
Dans le modèle de spécification (spec) de votre pod, faites correspondre
nodeSelectorounodeAffinityau libellé que vous avez utilisé dans votre pool de noeuds worker.Exemple de
nodeSelector:... spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent nodeSelector: app: nginx ...Exemple de
nodeAffinity:spec: containers: - name: nginx image: nginx imagePullPolicy: IfNotPresent affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: use operator: In values: - autoscale -
Dans le modèle de spécification (spec) de votre pod, faites correspondre
tolerationà la tache que vous avez utilisée dans votre pool de noeuds worker.Exemple de tolérance
NoExecute:tolerations: - key: use operator: "Exists" effect: "NoExecute" -
Déployez le pod. En raison du libellé correspondant, le pod est planifié sur un noeud worker qui se trouve dans le pool de noeuds worker avec ce libellé. En raison de la tolérance correspondante, le pod peut s'exécuter sur le pool de noeuds worker auquel une tache est appliquée.
oc apply -f pod.yaml
Augmentation des noeuds worker avant que le pool de noeuds worker soit à court de ressources
Comme décrit dans la rubrique Comprendre le fonctionnement de l'autoscaler de cluster et dans la FAQ Kubernetes Cluster Autoscaler, l'autoscaler de cluster augmente vos pools de travailleurs en fonction des ressources demandées par la charge de travail par rapport aux ressources disponibles du pool de travailleurs. Cependant, vous préférez peut-être que ce programme augmente vos noeuds worker avant que le pool de noeuds worker soit à court de ressources. Dans ce cas, votre charge de travail n'a pas besoin d'attendre que les noeuds worker soient mis à disposition car le pool de noeuds worker est déjà mis à l'échelle pour répondre aux demandes de ressources.
Le programme de mise à l'échelle automatique de cluster ne prend pas en charge la mise à l'échelle anticipée (mise à disposition excessive) des pools de noeuds worker. Cependant, vous pouvez configurer d'autres ressources Kubernetes pour utiliser ce programme et réaliser une mise à l'échelle anticipée.
Pods de pause
Vous pouvez créer un déploiement qui déploie des conteneurs de pause dans des pods avec des demandes de ressources spécifiques, et attribuer au déploiement une faible priorité de pod. Lorsque ces ressources sont requises par les charges de travail de priorité plus élevée, le pod de pause est préempté et devient un pod en attente. Cet événement déclenche le programme de mise à l'échelle automatique de cluster pour augmenter la capacité.
Pour plus d'informations sur la mise en place d'un déploiement de pods de pause, voir la FAQ Kubernetes. Vous pouvez utiliser cet exemple de fichier de configuration d'overprovisioning pour créer la classe de priorité, le compte de service et les déploiements.
Si vous utilisez cette méthode, assurez-vous de comprendre comment fonctionne la priorité de pod et comment définir la priorité de pod pour vos déploiements. Par exemple, si le pod de
pause ne dispose pas de ressources suffisantes pour un pod de priorité élevée, le pod n'est pas préempté. La charge de travail de priorité plus élevée reste en attente, provoquant le déclenchement du programme de mise à l'échelle automatique
de cluster pour augmenter la capacité. Toutefois, dans ce cas, l'action d'échelle n'est pas précoce car la charge de travail que vous souhaitez exécuter ne peut pas être planifiée en raison de ressources insuffisantes. Le pod de pause doit
avoir la valeur nodeAffinity ou nodeSelector ainsi que les tolérances correspondantes que vous avez définies pour votre pool de noeuds worker.
Mise à l'échelle automatique de pod horizontale (HPA)
Comme la mise à l'échelle automatique de pod horizontale est basée sur l'utilisation d'UC moyenne des pods, la limite d'utilisation d'UC que vous avez définie est atteinte avant même que les ressources du pool de noeuds worker ne soient effectivement épuisées.
Plus de pods sont demandés, ce qui déclenche le programme de mise à l'échelle automatique de cluster pour augmenter le pool de noeuds worker. Pour plus d'informations sur la configuration de HPA, consultez la documentation de Kubernetes.