Implantação e configuração do esquema de aplicativo complexo python

2

Desafio

Nossa nova aplicação usa vários serviços:

  • custom buildgresql,
  • redis,
  • aipo,
  • rabbitmq,
  • haproxy,
  • nginx,
  • uwsgi,
  • cerca de 4 nossos processos internos (principalmente python),
  • WebAplication AngularJS,

Vou enviá-lo no modelo SaS, o que significa que todos esses serviços serão hospedados em nossa nuvem (por enquanto na AWS, posteriormente em openstack). Cada cliente terá sua própria instância. As instalações dependerão das necessidades / escala do cliente - em alguns casos, todos os serviços serão executados em uma única VM, em alguns, haverá várias VMs por serviço. A configuração dos serviços depende do cliente (como recursos adicionais). Eu gostaria que houvesse uma maneira simples de criar instâncias de "demonstração" - apenas para permitir que um futuro cliente jogue com nosso aplicativo.

Requisitos

Eu procuro uma solução que me ajude:

  • configurar uma ou várias máquinas virtuais (aws, openstack),
  • configurá-los com regras comuns,
  • construa nosso software a partir do git master branch (execute grunt para webaplication, twitter.pants for python),
  • implantar serviços neles,
  • expande uma instalação (adicione mais VM com serviços selecionados),
  • depois de algum tempo fazer upgrade dos serviços para a versão selecionada,

Solução proposta

Eu vi vargrant que parece bom, mas é para desenvolvimento e não para produção. Eu tenho visto docker que é ainda melhor, mas não tenho certeza se será elástico o suficiente para suportar diferentes configurações de contêineres por cliente. De qualquer forma eu ainda precisaria de uma ferramenta para criar esses containers ...

Eu propus o uso de ansible como uma ferramenta para criar uma VM, configurar partes comuns e, em seguida, implantar serviços em hosts. Eu manteria inventários separados por cliente / instância. Grupos de inventários que podem permitir a instalação de todas as funções (serviços) em uma VM ou tê-las em uma VM separada. Acredito que isso também nos ajudaria na atualização de serviços.

Perguntas

Algumas perguntas que tenho:

  1. Algum problema que você vê na minha configuração?
  2. Em que situação ansible poderia não ser suficiente, então eu gostaria de ter algo como docker?
  3. Como acompanhar as instâncias separadas? Se eu alterar um manual em ansible, como ter certeza de que ele foi executado em todos os hosts em cada instância?
  4. Existe a possibilidade de automatizar a criação de regras de firewall para cada VM com base em funções e inventário ansioso?
  5. Algum outro conselho?

Eu realmente aprecio todos os comentários com antecedência.

    
por neutrinus 15.02.2014 / 11:14

1 resposta

1

Vou dar uma olhada em algumas de suas perguntas, mas é muito mais útil se você puder refinar suas perguntas.

Any problems you see in my setup?

Não parece bom, mas depende do que você está fazendo e onde os gargalos podem ser.

In what situation Ansible could be not enough, so I wish to have something like docker?

Ansible deve ser bom para fazer toda a sua automação, mesmo se você estiver usando o Docker. Eu não usei muito o Docker, mas o Docker é essencialmente um wrapper em torno do lxc e o Ansible permite que você execute comandos em uma máquina linux completa ou em um contêiner lxc.

How to keep track on separate instances? If I change a playbook in ansible, how to be sure it has been run on every host in each instance?

Toda vez que você mudar seus livros Ansible, você basicamente terá que atualizar seu contêiner Docker se estiver usando o Docker. Então, do Docker, você pode usar push suas alterações. Se você não estiver usando o Docker, precisará executar novamente seus playbooks Ansible em todos os servidores afetados sempre que os alterar. Você pode querer considerar escalonar a execução de seus playbooks. Você pode executar esses livros localmente em cada um dos servidores ou remotamente a partir de uma estação de trabalho cliente. Tenha em mente que se você tiver muitos nós rodando a partir de uma estação de trabalho de um único cliente, pode não ser possível devido a restrições de rede e CPU do seu cliente.

Is there a chance to automate of create firewall rules for each VM based on roles and ansible inventory?

Sim. Se você estiver usando o Ansible, você pode usar modelos para configurar o iptables em cada uma das VMs.

    
por 21.02.2014 / 02:46