Sou desenvolvedor web, mas também estou interessado em algumas tarefas administrativas. Portanto, a nova mudança da administração pura para os dev-ops é útil para mim.
Enfim, tenho alguns problemas para colocar algumas coisas em um relacionamento. Talvez não exista, então eu queria pedir ajuda para esclarecer.
Basicamente, o que eu quero colocar em relação são quatro tipos de software (pelo que entendi). Os produtos exatos não importam, você pode colocar qualquer software semelhante como alternativa:
- Vagrant: Do meu entendimento, é automatizar a criação e o gerenciamento de VMs: configurando-as, iniciando e parando-as. Isso pode ser feito usando uma VM local ou remota, por exemplo, em uma plataforma em nuvem.
- Docker: Uma "VM leve", baseada em alguns conceitos de kernel Linux, que pode ser usada para executar processos isoladamente, por exemplo, em um ambiente compartilhado de hospedagem na web.
- Chef: Uma ferramenta para instalar e configurar um sistema operacional, por exemplo, dentro de uma VM.
- OpenStack: uma ferramenta que permite criar sua própria nuvem privada, portanto comparável a algo como a AWS.
Pergunta nº 1: Minhas explicações estão corretas ou estou errado com alguns (ou todos) desses consumos?
Pergunta 2: Como eu poderia misturar todas essas ferramentas? Isso faria algum sentido?
Na minha imaginação e do meu ponto de vista, você poderia ir e
- use o OpenStack para criar sua própria nuvem,
- use o Vagrant para gerenciar as VMs executadas na nuvem,
- use o Chef para configurar essas VMs
- e, finalmente, use o Docker para executar processos dentro das VMs.
Isso está correto? E se sim, você pode me dar um conselho sobre como começar a usar tudo isso (é bastante ao mesmo tempo e ainda não sei por onde começar)?
Respostas:
Vamos usar as respectivas páginas da web para descobrir o que são todos esses projetos. Vou alterar a ordem em que você listou:
Chef : Chef é uma plataforma de automação que transforma infraestrutura em código.
Este é um software de gerenciamento de configuração . A maioria deles usa o mesmo paradigma: permite definir o estado que você deseja que uma máquina seja, com relação aos arquivos de configuração, software instalado, usuários, grupos e muitos outros tipos de recursos. A maioria deles também fornece funcionalidade para enviar alterações para máquinas específicas, um processo geralmente chamado de orquestração .
Vagrant : Crie e configure ambientes de desenvolvimento leves, reproduzíveis e portáteis.
Ele fornece uma maneira reproduzível de gerar máquinas totalmente virtualizadas usando a tecnologia VirtualBox da Oracle ou VMWare como provedores . O Vagrant pode coordenar-se com um software de gerenciamento de configuração para continuar o processo de instalação onde o instalador do sistema operacional termina. Isso é conhecido como provisionamento .
Docker : um projeto de código aberto para empacotar, enviar e executar qualquer aplicativo como um contêiner leve
A funcionalidade deste software se sobrepõe à do Vagrant, na qual fornece os meios para definir instalações de sistemas operacionais, mas difere bastante na tecnologia usada para esse fim. O Docker usa contêineres Linux , que não são máquinas virtuais em si, mas processos isolados em execução em sistemas de arquivos isolados. O Docker também pode usar um sistema de gerenciamento de configuração para provisionar os contêineres.
OpenStack : software de código aberto para a construção de nuvens públicas e privadas.
Embora seja verdade que o OpenStack pode ser implantado em uma única máquina , essa implantação é apenas para prova de conceito, provavelmente não muito funcional devido a restrições de recursos.
O principal objetivo das instalações do OpenStack são os ambientes com vários nós bare metal, onde os diferentes componentes podem ser usados em hardware dedicado para obter melhores resultados.
Uma das principais funcionalidades do OpenStack é o suporte a muitas tecnologias de virtualização, de totalmente virtualizadas (VirtualBox, VMWare) a paravirtualizadas (KVM / Qemu) e também de contêineres (LXC) e até Linux de modo de usuário (UML) .
Tentei apresentar esses produtos como componentes de uma arquitetura específica. Do meu ponto de vista, faz sentido primeiro definir suas necessidades com relação ao ambiente que você precisa (Chef, Puppet, Ansible, ...) e depois implantá-lo de forma controlada (Vagrant, Docker , ...) e, finalmente, dimensione-o para o tamanho global, se necessário.
Quanto de toda essa funcionalidade que você precisa deve ser definida no escopo do seu projeto.
Observe também que simplifiquei demais todas as explicações técnicas. Por favor, use os links referenciados para obter informações detalhadas.
fonte
Eu acho que a experiência de um desenvolvedor tornará os 'devops' realmente mais complicados. Sua pergunta tem quase 3 anos. Portanto, seria interessante saber como você está encontrando a jornada. Darei uma resposta do ponto de vista de o administrador do sistema sobre os aplicativos que você mencionou acima e espero que isso mostre alguma luz ou dê uma perspectiva não técnica que explique por que uma pessoa (administrador ou desenvolvedor) começaria a considerar exatamente o que você pediu, por exemplo, dos devops perspectiva qual é a relação entre x, y, z essas ferramentas são maiores que a soma de suas partes?
Na verdade, acho que os administradores de sistemas têm vantagem aqui, a maioria dos aplicativos mencionados na sua pergunta resolve os 'problemas' dos administradores e, portanto, fornece um ambiente mais abstrato do datacenter, o que, por sua vez, é mais programável para desenvolvedores e os novos estratégia dos devops (leia estratégia / equipe, devops não é uma pessoa). Então, qual é o relacionamento com os aplicativos mencionados? como isso fornece uma abordagem holística ao serviço de TI?
É isso que é, mas o que faz? - o sistema operacional mais apropriadamente chamado era DOS - operava seu disco abstraindo o BIOS, o OpenStack opera seu datacenter e abstrai sua infraestrutura (IaaS - é o jargão do sistema operacional do datacenter). Agora, o seu centro de dados tem uma API, uma sintaxe de comando e uma interface gráfica, OpenStack pode dirigir hypervisors, switches, roteadores, firewalls, redes de armazenamento, balanceadores de carga, anfitriões docker etc .. OpenStack usa seu hardware fabrica 'plug-in' ou a função especial pode existir apenas no software, pois o software definiu algoou virtualização de funções de rede. Além disso, o OpenStack e todas as outras nuvens podem orquestrar sua própria infraestrutura lendo scripts que você lança no mecanismo de orquestração ou são acionados com base em regras (aumento, redução, etc.). Portanto, o openstack é uma camada gigante de abstração, por exemplo, eu não me importo com o switch que tenho, me dê uma rede com esse comando ou crie uma complicada carga equilibrada, alta disponibilidade, disponibilidade pública, escala automática, nome de domínio registrado, armazenamento anexado coisinha - com este script que encontrei na internet.
O Docker é outra camada de abstração e, como a nuvem é uma tecnologia disruptiva, está mudando o setor porque resolve muitos 'problemas' operacionais, como dependências de software, atualizações, isolamento de dados e pura portabilidade. O Java tornou-se popular por causa da portabilidade do código-fonte que os desenvolvedores não precisavam pensar; uma JVM em execução significava que seu código deveria ser executado na máquina de café desde que suportasse java. O Docker resolve um problema semelhante. Para executar meu aplicativo, você precisa de um host do docker, não, você precisa desta versão do python, deste kernel, dessa distribuição Linux e assim por diante, é claro que o aplicativo ainda possui essas dependências, mas o host subjacente não se importa e o administrador não se importa com o que você faz dentro de um contêiner isolado ( até certo ponto). O Docker está mudando o paradigma de desenvolvimento e operações, tratando todo um sistema operacional e seus serviços como um binário. podemos obtê-los de um repositório , versão deles, modificá-los, executá-los com parâmetros etc.
Sim, e não tão perturbador quanto os dois primeiros, Chef, fantoche, ansible, salt, gerente de operações do system center e uma enorme variedade de outros aplicativos neste espaço fornecem uma maneira para desenvolvedores e administradores modelarem implantações, atualizações e outras ações (config mudanças), não parece haver nenhum órgão de padrões que analise esses esforços como existe para a nuvem . Mas não estamos lidando com algo tão definitivo quanto a infraestrutura, portanto, é mais doloroso aprender isso e não há muita coisa transferível de um para o outro.
Esse é o mais estranho na lista de aplicativos que você mencionou, o Vagrant é uma ferramenta para desenvolvedores e um brinquedo para administradores, você pode rapidamente suportar um ambiente de desenvolvimento com vagrant, por exemplo, eu quero desenvolver um aplicativo para Android, pegar um IDE em vagabundo, acho que será ultrapassado por Docker em breve.
É por isso que acho que os administradores têm vantagem, tivemos que fazer a maior parte disso manualmente e saber o que pode dar errado, manifestos de marionetes, computação em nuvem e orquestração de docker serão mais fáceis para nós, os desenvolvedores se encontrarão levando muitas tangentes. conselhos a qualquer devops em potencial é ser um administrador primeiro.
fonte
Acabei de terminar um projeto de implantação do OpenStack que usa um servidor Chef dentro de uma instância do Vagrant: https://github.com/bluechiptek/bluechipstack/blob/master/README.md
O principal problema dessa maneira é obter a instância do Vagrant do mesmo IP sempre que você deseja gerenciar os nós. Se você fizer o endereçamento estático, ele funcionará bem. Fazer isso por meio de uma VPN não é o ideal.
fonte
No final, estou usando apenas uma combinação de Vagrant e Docker.
Eu uso o vagrant para provisionar as máquinas (há provedores de nuvem adicionais, mas estou usando o VirtualBox incorporado. Como estou usando essa abordagem, a rede e o armazenamento externos são praticamente manuais, mas se você usar algo como o plugin vagrant-aws, poderá diga à AWS para fornecer as peças necessárias para você.
O script de provisionamento que utilizo aponta para um local seguro que contém o certificado da CA e as chaves usadas para assinar os CSRs junto com os
docker swarm join
tokens. Além disso, instalo o docker-engine e o configuro para ingressar no enxame (inicialize se não houver).Uma vez resolvido, eu simplesmente faço uma
docker stack deploy
da minha máquina local ou construo a caixa para implantar a pilha com tudo o que preciso.No meu caso eu só caiu cozinheiro chefe em favor de apenas usando scripts simples pós-instalação que fazer
yum
ouapt-get
em como meus scripts de provisionamento.Eu também uso o plugin vagrant-triggers para adicionar scripts adicionais antes de destruir (no meu caso, para deixar o enxame).
A parte boa da centralização com o Vagrant é que você pode replicar o ambiente em outro sistema ou computador único para desenvolvimento, basta adicionar ou alterar a
provider
seção. Lembre-se de que não passei pela configuração do OpenStack em um único computador para gerenciar o VirtualBox.fonte