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 :

  1. 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.

  2. Dans le modèle de spécification (spec) de votre pod, faites correspondre nodeSelector ou nodeAffinity au 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
    
  3. 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"
    
  4. 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.