Déploiement et configuration du schéma d'application Python complexe

Défi

Notre nouvelle application utilise plusieurs services:

  • Création personnalisée postgresql,
  • redis
  • céleri,
  • rabbitmq
  • haproxy
  • nginx,
  • uwsgi,
  • environ 4 nos process internes (principalement python),
  • AngularJS webaplication,

Je l'expédierai dans le model SaS, cela signifie que tous ces services seront hébergés dans notre nuage (pour l'instant dans AWS, plus tard openstack). Chaque client obtiendra son propre exemple. Les installations dépendent des besoins / de l'échelle du client – dans certains cas, tous les services seront exécutés sur une VM unique, dans certains, il y aura plusieurs VM par service. La configuration des services dépend du client (comme des fonctionnalités supplémentaires). Je souhaite qu'il existe un moyen simple de créer des instances de "démo" – juste pour permettre à un futur client de jouer avec notre application.

Exigences

Je cherche une solution qui m'aidera:

  • configurez une ou plusieurs machines virtuelles (aws, openstack),
  • configurez-les avec des règles communes,
  • construisez notre logiciel de git master branch (run grunt for webaplication, twitter.pants pour python),
  • déployer des services sur eux,
  • étendre une installation (append plus de VM avec les services sélectionnés),
  • après un certain time, les services de mise à niveau vers la version sélectionnée,

Solution proposée

J'ai vu vargrant qui a l'air bien, mais c'est pour le développement, pas pour la production. J'ai vu le docker qui est encore plus agréable, mais je ne suis pas sûr que ce soit assez élastique pour supporter une configuration différente des conteneurs par client. Quoi qu'il en soit, j'aurais toujours besoin d'un outil pour créer ces conteneurs …

J'ai proposé d'utiliser Ansible comme un outil pour créer une machine virtuelle, configurer des pièces communes, puis déployer des services sur les hôtes. Je garderais des inventaires séparés par client / instance. Les groupes d'inventaire compatibles permettraient d'installer tous les rôles (services) sur une VM ou de l'avoir sur une machine virtuelle distincte. Je crois que cela nous aiderait également à améliorer les services.

Des questions

Quelques questions que j'ai:

  1. Des problèmes que vous voyez dans mon installation?
  2. Dans quelle situation je ne peux pas suffire, alors j'aimerais avoir quelque chose comme docker?
  3. Comment suivre les cas séparés? Si je change un playbook dans Ansible, comment être sûr de l'exécution sur chaque hôte dans chaque instance?
  4. Existe-t-il une possibilité d'automatiser la création de règles de pare-feu pour chaque machine virtuelle basée sur les rôles et l'inventaire ansible?
  5. Tout autre conseil?

J'apprécie vraiment tous les commentaires à l'avance.

Je vais prendre un coucou sur certaines de vos questions, mais il est beaucoup plus utile si vous pouvez affiner vos questions.

Des problèmes que vous voyez dans mon installation?

Aucun aspect n'est bon, mais cela dépend vraiment de ce que vous faites, et des goulets d'étranglement potentiels.

Dans quelle situation Ansible pourrait ne pas être suffisant, alors je souhaite avoir quelque chose comme docker?

Ansible devrait être bien pour faire toute votre automation, même si vous utilisez Docker. Je n'ai pas beaucoup utilisé Docker, mais Docker est essentiellement un wrapper autour de lxc et Ansible vous permet d'exécuter des commands sur une machine linux complète ou un conteneur lxc.

Comment suivre les cas séparés? Si je change un playbook dans Ansible, comment être sûr de l'exécution sur chaque hôte dans chaque instance?

Chaque fois que vous modifiez vos Playbooks Ansible, vous devrez essentiellement mettre à jour votre conteneur Docker si vous utilisez Docker. Ensuite, à partir de Docker, vous pouvez utiliser vos modifications. Si vous n'utilisez pas Docker, vous devrez exécuter vos Playbooks Ansible sur tous les servers affectés chaque fois que vous les modifiez. Vous voudrez peut-être envisager de décrocher le fonctionnement de vos manuels scolaires. Vous pouvez exécuter ces playbooks localement sur chacun des servers ou à distance à partir d'un post de travail client. Gardez à l'esprit que si vous avez beaucoup de nœuds à partir d'un post de travail client unique peut ne pas être réalisable en raison des contraintes réseau et CPU de votre client.

Existe-t-il une possibilité d'automatiser la création de règles de pare-feu pour chaque machine virtuelle basée sur les rôles et l'inventaire ansible?

Oui. Si vous utilisez Ansible, vous pouvez utiliser des templates pour indiquer configurer iptables sur chacune des machines virtuelles.