Acelere o Ansible com Mitogen

Acelere o Ansible com o Mitogen!


versão russa


O Ansible é um dos sistemas de gerenciamento de configuração mais populares atualmente. Depois que foi adquirida pela Red Hat em 2015, a Ansible alcançou milhares de colaboradores e se tornou talvez uma das ferramentas de implantação e orquestração mais usadas. Seus casos de uso são bastante impressionantes.


O Ansible funciona por conexões SSH com hosts remotos. Ele abre a sessão SSH, efetua login no shell, copia o código python via rede e cria um arquivo temporário em hosts remotos com esse código. Na próxima etapa, ele executa o arquivo atual com o intérprete python. Todo esse fluxo de trabalho é bastante pesado e existem várias maneiras de torná-lo mais rápido e mais leve.


Uma dessas maneiras é usar pipelines SSH que reutilizam uma sessão SSH para copiar código python de várias tarefas e impedir a abertura de várias sessões, o que economiza muito tempo. (Não esqueça de desativar as configurações necessárias para o sudo no lado remoto em /etc/sudoers )


A nova maneira de acelerar o Ansible é uma ótima biblioteca de python chamada Mitogen . Se alguém como eu não estava familiarizado com isso - essa biblioteca permite a execução rápida do código python em um host remoto e o Ansible é apenas um de seus casos. O Mitogen usa pipes UNIX em máquinas remotas ao passar o código python "em conserva" compactado com zlib. Isso permite executá-lo rapidamente e sem muito tráfego. Se você estiver interessado, pode ler detalhes sobre como ele funciona na página "Como funciona" . Mas vamos nos concentrar hoje na parte relacionada à Ansible.


O mitogênio em circunstâncias específicas pode acelerar o seu Ansible em algumas vezes e diminuir significativamente a sua largura de banda. Vamos verificar os casos de uso mais populares e descobrir se é útil para nós.


Os casos de uso mais populares para eu executar o Ansible são: criação de arquivos de configuração em um host remoto, instalação de pacotes, download e upload de arquivos de e para um host remoto. Talvez você queira verificar outros casos de uso, deixe comentários neste artigo.


Vamos começar a rolar!


A configuração do Mitogen for Ansible é bastante simples:
Instale o módulo Mitogen:


 pip install mitogen 

Em seguida, configure variáveis ​​de ambiente ou defina opções de configuração no arquivo ansible.cfg, as duas opções são boas:
Suponhamos que /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy seja o seu caminho para a biblioteca Mitogen instalada.


 export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy export ANSIBLE_STRATEGY=mitogen_linear 

ou


 [defaults] strategy = mitogen_linear strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy 



Prepare o Ansible no virtualenv, com e sem o Mitogen ativado:


 virtualenv mitogen_ansible ./mitogen_ansible/bin/pip install ansible==2.7.10 mitogen virtualenv pure_ansible ./pure_ansible/bin/pip install ansible==2.7.10 

Por favor, preste atenção que o Mitogen 0.2.7 não funciona com o Ansible 2.8 (para maio de 2019)


Crie aliases:


 alias pure-ansible-playbook='$(pwd)/pure_ansible/bin/ansible-playbook' alias mitogen-ansible-playbook='ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy:$(pwd)/mitogen_ansible/lib/python3.7/site-packages/ansible_mitogen/plugins/strategy ANSIBLE_STRATEGY=mitogen_linear $(pwd)/mitogen_ansible/bin/ansible-playbook' 

Agora vamos tentar o manual que cria o arquivo no controle remoto:


 --- - hosts: all gather_facts: false tasks: - name: Create files with copy content module copy: content: | test file {{ item }} dest: ~/file_{{item}} with_sequence: start=1 end={{ n }} 

E execute-o com Mitogen e sem ao criar 10 arquivos:


 time mitogen-ansible-playbook file_creation.yml -i hosts -en=10 &>/dev/null real 0m2.603s user 0m1.152s sys 0m0.096s time pure-ansible-playbook file_creation.yml -i hosts -en=10 &>/dev/null real 0m5.908s user 0m1.745s sys 0m0.643s 

No momento, vemos melhorias em x2 vezes. Vamos verificar 20, 30, ..., 100 arquivos:


 time pure-ansible-playbook file_creation.yml -i hosts -en=100 &>/dev/null real 0m51.775s user 0m8.039s sys 0m6.305s time mitogen-ansible-playbook file_creation.yml -i hosts -en=100 &>/dev/null real 0m4.331s user 0m1.903s sys 0m0.197s 

Eventualmente, melhoramos o tempo de execução em mais de 10 vezes!


Agora vamos tentar diferentes cenários e ver como isso melhora:


  • Cenário de upload de arquivos do host local para o remoto (com módulo de copy ):
    Upload de arquivos


  • Cenário de criação de arquivos no host remoto com o módulo de copy :
    Criando arquivos


  • Cenário com a busca de arquivos do host remoto para o local:
    Buscando arquivos



Vamos tentar o último cenário em alguns (3) hosts remotos, por exemplo, fazendo upload de arquivos:
Upload de arquivos para vários hosts


Como podemos ver, o Mitogen economiza tempo e largura de banda nesses cenários. Mas se o gargalo não é Ansible, mas, por exemplo, E / S de disco ou rede, ou outro local, é difícil esperar que o Mitogen ajude, é claro.


Vamos executar, por exemplo, a instalação de pacotes com a instalação dos módulos yum / dnf e python com o pip.
Os pacotes foram pré-armazenados em cache para evitar dependências de falhas na rede:


 --- - hosts: all gather_facts: false tasks: - name: Install packages become: true package: name: - samba - httpd - nano - ruby state: present - name: Install pip modules become: true pip: name: - pytest-split-tests - bottle - pep8 - flask state: present 

Com Mitogen leva 12 segundos, bem como com Ansible puro.


Na página Mitogen for Ansible, você pode ver referências e medições adicionais. Como a página declara:


O Mitogen não pode melhorar um módulo após sua execução, apenas pode garantir que o módulo seja executado o mais rápido possível

É por isso que é importante descobrir onde estão os seus gargalos e se eles estão relacionados às operações do Ansible, o Mitogen o ajudará a resolvê-lo e a acelerar significativamente seus playbooks.

Source: https://habr.com/ru/post/pt453446/


All Articles