web-dev-qa-db-fra.com

Comment travailler une attente d'emploi avec Kubettes avec la mise à l'échelle

J'ai besoin d'une manipulation de la file d'attente évolutive basée sur Docker/Python Travailleur. Ma pensée est allé vers Kubettes. Cependant, je ne sais pas le meilleur contrôleur/service.

Basé sur des fonctions Azure, je reçois un trafic HTTP entrant ajoutant des messages simples à une file d'attente de stockage. Ces messages doivent être travaillés et les résultats de la réalisation d'une file d'attente de résultat.

Pour traiter ces messages de la file d'attente, j'ai développé python Code en boucle la file d'attente et travaillant sur ces travaux. Après chaque boucle réussie, le message sera supprimé de la file d'attente source et du résultat écrit dans le résultat. la file d'attente. Une fois que la file d'attente est vide, le code existe.

Donc j'ai créé une image Docker qui exécute le python===. Si plusieurs conteneurs sont démarrés, la file d'attente est travaillée plus rapidement. J'ai également mis en place les nouveaux services Kubettes Azure à l'échelle. Tout en étant nouvelle Pour Kubernettes, j'ai lu sur le travail paradigme pour travailler une file d'attente jusqu'à ce que le travail soit prêt. Mon modèle YAML simple ressemble à ceci:

apiVersion: batch/v1
kind: Job
metadata:
  name: myjob
spec:
  parallelism: 4
  template:
    metadata:
      name: myjob
    spec:
      containers:
      - name: c
        image: repo/image:tag

Mon problème est maintenant que le travail ne peut pas être redémarré.

Habituellement, la file d'attente est remplie de quelques entrées, puis pendant un moment, rien ne se passe. Ensuite, de plus grandes files d'attente peuvent arriver que cela doit être travaillé aussi vite que possible. Bien sûr, je veux courir le travail à nouveau, mais cela ne semble pas possible. De plus, je souhaite réduire l'empreinte de l'empreinte au minimum si rien n'est dans la file d'attente.

Donc, ma question est de savoir quelle architecture/constructions dois-je utiliser pour ce scénario et existe-t-il des exemples de YamL simples pour cela?

8
Tom Seidel

Ceci est un modèle commun, et il existe plusieurs façons d'archiver une solution.

Une solution commune consiste à avoir une application avec un ensemble de travailleurs interroge toujours votre file d'attente (cela pourrait être votre python Script mais vous devez en faire un service) et vous voudrez généralement utiliser Un kubettes déploiement éventuellement avec un Horizontal POD autoscaler Basé sur certaines mesures pour votre file d'attente ou votre CPU.

Dans votre cas, vous voudrez faire votre script A Daemon et sonder la file d'attente s'il y a des éléments (je suppose que vous gérez déjà des conditions de course avec le parallélisme). Déployez ensuite ce démon à l'aide d'un déploiement Kubettes, puis vous pouvez accumuler des mesures ou des horaires basés sur la mise en place.

Il existe déjà des planificateurs de travail pour de nombreuses langues différentes. Celui qui est très populaire est Flux d'air qu'il a déjà la capacité d'avoir des "travailleurs", mais cela peut être surchargé pour un seul python Script.

2
Rico