# Tutorial de Ansible ## Tabela de Conteúdos 1. [Curso Completo de Ansible | Tutorial de Ansible Para Iniciantes | Aprenda Ansible Passo a Passo | Simplilearn](#1) 2. [O Que é Ansible? | Como Funciona Ansible? | Ansible Playbook Tutorial Para Iniciantes | DevOps|Simplilearn](#2) 3. [Curso Completo de Ansible 2024 | Tutorial de Ansible Para Iniciantes | Ansible Complete Tutorial | Simplilearn](#3) 4. [Chef vs Puppet vs Ansible vs Saltstack | Ferramentas de Gerenciamento de Configuração | Ferramentas DevOps | Simplilearn](#4) 5. [Instalação de Ansible no Linux | Instalação e Configuração de Ansible no CentOS 7 | Simplilearn](#5) 6. [Curso Completo de Ferramentas DevOps | Ansible, Jenkins, Nagios, Chef, Puppet, Selenium tutorial | Simplilearn](#6) 7. [Chef, Puppet E Ansible: Curso Completo | Ferramentas de Gerenciamento de Configuração DevOps Explicadas | Simplilearn](#7) 8. [Tutorial de Ansible Para Iniciantes | O Que é Ansible? | Ferramentas DevOps | Curso DevOps | Simplilearn](#8) 9. [Perguntas Ámbituosas de Entrevista sobre Chef, Ansible & Puppet | Ferramentas de Gerenciamento de Configuração para DevOps | Simplilearn](#9) ## Transcrições de Vídeos ### Curso Completo de Ansible | Tutorial de Ansible Para Iniciantes | Aprenda Ansible Passo a Passo | Simplilearn - [Curso Completo de Ansible URL](https://www.youtube.com/watch?v=EcnqJbxBcM0) > O Ansible fornece uma maneira simples e fácil de automatizar sua aplicação e infraestrutura. (. . . ) Pode ver a minha Gerenciadora VirtualBox VM Oracle. Vou utilizar dois sistemas: o sistema do nó (. . . ) e o sistema do servidor. Vamos começar no nosso sistema do servidor. Descaramos nossa ferramenta Ansible e nossa ferramenta Ansible está instalada. Precisamos abrir um ficheiro de `ansible hosts` e especificar os detalhes da máquina do cliente ou nó. Este é o nosso `ansible host` ficheiro. Adicionamos o nome do grupo e a IP do cliente, depois especificamos o utilizador para a máquina do cliente, introduzimos a palavra-passe, salvamos o ficheiro. (Continue com as transcrições de outros vídeos de forma semelhante. ) (Manteia o resto da formatação Markdown para outras secções. ) 1. [Curso Completo de Ansible URL](https://www.youtube.com/watch?v=EcnqJbxBcM0) 2. [O Que é Ansible? | Como Funciona Ansible? | Ansible Playbook Tutorial Para Iniciantes | DevOps|Simplilearn](https://www.youtube.com/watch?v=wgQ3rHFTM4E) 3. [Curso Completo de Ansible 2024 | Tutorial de Ansible Para Iniciantes | Ansible Complete Tutorial | Simplilearn](https://www.youtube.com/watch?v=BS0GLQaSGPo) 4. [Chef vs Puppet vs Ansible vs Saltstack | Ferramentas de Gerenciamento de Configuração | Ferramentas DevOps | Simplilearn](https://www.youtube.com/watch?v=_TVNCTK808I) 5. [Ansible Installation On Linux | Ansible Installation And Configuration On CentOS 7 | Simplilearn](https://www.youtube.com/watch?v=YxzL2qwkWbc) 6. [DevOps Tools Full Course | Ansible, Jenkins, Nagios, Chef, Puppet, Selenium tutorial | Simplilearn](https://www.youtube.com/watch?v=FyNvwI02Nhg) 7. [Chef, Puppet And Ansible Full Course | Configuration Management DevOps Tools Explained | Simplilearn](https://www.youtube.com/watch?v=O1s16cYzC10) 8. [Tutorial de Ansible Para Iniciantes | O Que é Ansible? | Ferramentas DevOps | Curso DevOps | Simplilearn](https://www.youtube.com/watch?v=Zrz9xeJwfx4) 9. [Perguntas Ámbituosas de Entrevista sobre Chef, Ansible & Puppet | Ferramentas de Gerenciamento de Configuração para DevOps | Simplilearn](https://www.youtube.com/watch?v=2ALSdldyMr8) # Ansible: Gestão de Operações Eficiente Ansible é uma ferramenta poderosa que pode melhorar significativamente a eficiência da sua equipe de operações. Similar às outras soluções de sistema como Chef e Puppet, Ansible utiliza código para automatizar a configuração e gestão de servidores. Isso permite uma implantação consistente e repetível de servidores em várias áreas. ## O que é Ansible? Ansible é uma ferramenta que se concentra em três áreas-chave num ambiente de operações: 1. **Automatização**: Escreva instruções para automatizar as tarefas manuais tipicamente necessárias no setup de IT. 2. **Configuração**: Garantir uma configuração consistente entre servidores. Por exemplo, configurar centenas de servidores Apache de forma idêntica. 3. **Implantação**: Automatizar a implantação ao escalar o ambiente de servidores. O objetivo é acelerar as operações e tornar a equipe mais eficiente. ### Configuração Puxada vs Push Ansible opera sob um modelo de configuração puxada. Enquanto outros produtos populares como Chef e Puppet utilizam uma arquitetura mestre-escravo, Ansible envia o serviço e a estrutura do servidor para hardware remoto. Isso significa que economiza no sobrecarregamento adicional de ter um cliente instalado em servidores remotos constantemente comunicando com o ambiente mestre. ### Arquitetura do Ambiente Ansible 1. **Máquina Local**: O centro da roda onde escreve e gerencia todas as instruções. 2. **Nós**: Servidores remotos que executam as configurações escritas na máquina local. ### Playbooks O núcleo de Ansible é o playbook, um conjunto de instruções que configuram o seu hardware. Estas instruções são escritas em YAML (YAML Ain't Markup Language), uma linguagem de configuração de ambientes de servidores padrão. Aqui está uma estrutura típica de um playbook: ```yaml --- # Script YAML de exemplo - hosts: web_server tasks: - name: Instalar Apache # Comando para instalar Apache - name: Iniciar Apache # Comando para iniciar Apache - name: Instalar MySQL # Comando para instalar MySQL ``` Neste exemplo, temos um playbook alvo num host chamado `web_server`, com tarefas para instalar Apache, iniciar Apache e instalar MySQL. ### Gestão de Inventário A gestão de inventário em Ansible é onde mantemos a estrutura do nosso ambiente de rede. Definimos nós, e sob cada nó, listamos as máquinas que eles representarão. Isso simplifica o processo de escrever scripts e alvo em servidores específicos. --- Nota: Este texto foi formatado usando Markdown, mantendo a formatação original enquanto corrigia gramática, pontuação e alguns pequenos erros. Manteve-se o idioma técnico, comandos e URLs íntegros. Referências e citações não foram solicitadas, portanto não incluí-as nesta resposta. # Gerenciamento de Infraestrutura da Empresa com Ansible Este documento discute o papel do administrador de sistemas, Sam, no gerenciamento da infraestrutura de uma organização grande e a utilização de Ansible para automatizar e simplificar o processo. ## Função de Sam Sam é responsável pela infraestrutura da empresa, que comprende todos os sistemas. Isso inclui servidores web, servidores de banco de dados, vários repositórios e mais. Como a organização possui uma infraestrutura grande com centenas ou milhares de sistemas, a tarefa de manter versões de software atualizadas se torna desafiadora e consumidora de tempo. ## Trabalho manual e Ansible O trabalho manual neste contexto pode levar a erros e oferece pouca possibilidade de inovação. Para resolver esse problema, entra em cena o Ansible. ## O que é o Ansible? O Ansible é um motor de tecnologia da informação que automatiza as tarefas seguintes: 1. **Orquestração**: Junção de várias aplicações e garantia de sequência em que elas são executadas. 2. **Gerenciamento de Configuração**: Manejo de todos os sistemas para que permanecam em um estado desejado consistente. Outros ferramentas que realizam gerenciamento de configuração incluem Puppet e Chef. 3. **Implantação**: Distribuição de aplicações em seus servidores de ambientes diferentes. O Ansible automatiza este processo, garantindo a distribuição das aplicações ou código à determinação de uma hora ou intervalos regulares. ## Arquitetura do Ansible O Ansible tem dois componentes principais: 1. **Máquina Local**: Instala o Ansible neste dispositivo, onde o administrador de sistemas gera as configurações. 2. **Máquina Nó/Cliente**: São sistemas que requerem configuração e são controlados pela máquina local. Nenhum software de apoio ou plugin é instalado nestes sistemas clientes. No dispositivo local, você também tem um módulo, uma coleção de ficheiros de configuração e, no caso do Ansible, estes arquivos de configuração são chamados de playbooks. O playbook é escrito em YAML. Você também tem a Inventory, um arquivo onde você tem todas as suas anotações que exigem configuração comentadas e grupo-adas para um gerenciamento mais fácil. A comunicação entre a máquina local e o cliente é feita por SSH, fornecendo uma comunicação protegida em um ambiente não protegido. ## Como o Ansible Funciona O Ansible opera como uma ferramenta agenteless, o que significa que você instala apenas no seu dispositivo local. Não há nenhum software de apoio ou plugin nos seus clientes. A máquina local envia os playbooks para os nós e é, portanto, chamado ferramento de configuração por mídia puxada. ## Vantagens do Ansible 1. **Agenteless**: Sem suporte de software ou plugin instalado no nó ou no sistema do cliente, dando mais espaço para outros recursos. 2. **Eficiente**: Maior velocidade de execução com não necessidade de um software adicional nos sistemas clientes. 3. **Flexível**: Ajusta-se facilmente às alterações na infraestrutura. 4. **Simples**: Playbooks escritos em YAML, uma língua próxima do inglês, fazendo com que seja fácil de entender e aprender. 5. **Relatórios automáticos**: Fornece relatórios sobre as tarefas que executaram com sucesso, que falharam e quais sistemas não estiveram disponíveis. ## demo prático Neste tutorial, vamos executar um playbook numa máquina cliente para fins de demonstração. Primeiro, vamos instalar o Ansible em nossa máquina local, escrever a Inventory e o playbook, e em seguida, vamos implantar este playbook na máquina cliente. Vamos verificar se as configurações que fez-mos no playbook são corretas. Para este demo, vamos usar dois máquinas virtuais, ambas com o sistema operacional CentOS 7. Uma servirá como a máquina local e a outra como a máquina cliente. Na máquina local, vamos instalar o Ansible, escrever a Inventory e o playbook, e em seguida vamos implantar este playbook na máquina cliente através de SSH. O playbook neste caso instala HTTPD, inicia o serviço e cria uma página web. O comando para executar o playbook é `ansible-playbook`, seguido pelo nome do playbook. A sintaxe do arquivo YAML é verificada usando o comando `ansible-playbook syntax-check`. O playbook consiste de três tarefas: 1. Instalando o pacote HTTPD, o servidor Apache, e instalando a versão mais recente dele. 2. Iniciando o serviço HTTPD. 3. Criando conteúdo para a página web. O playbook é escrito em YAML e segue uma estrutura de indentação específica para garantir que as tarefas sejam corretamente agrupadas. Todos os Traços em mesma posição representam irmãos, com o primeiro traço indicando o nível mais alto (nome do playbook), e os traços subsequentes, um pouco desmovimentados a direita, representam tasks sob uma tarefa anterior. # Ansible Tutorial para Iniciantes Idioma: en --- ## O Ansible: Ferramenta Essencial para Gestão de Operações Eficientes em DevOps Olá, e seja bem-vindo(a) a este tutorial de Ansible pelo Matthew do Simply Learn. Este tutorial abordará utilizando o Ansible – uma das ferramentas-chave em seu ambiente DevOps. Vamos falar sobre por que você quer utilizar o Ansible, sua arquitetura, e como ele difere de outras ferramentas semelhantes. Também vamos explorar playbooks, gerenciamento de inventário, e as funcionalidades do Ansible. Vamos del vine-ar nisso! ## Porque o Ansible? O Ansible é uma ferramenta poderosa que ajuda a criar um time de operações eficientes. Ela é usada para automatizar, configurar e implantar para acelerar e tornar mais eficiente seu time de operações. Quando se bump management of vários servidores em um ambiente complexo, torna-se difícil configurar cada servidor igualmente devido a erros humanos. O Ansible vem para ajudar, pois te permite escrever código para a instalação e configuração de seus servidores de forma consistente em várias áreas. ## O que é o Ansible? E de que valor você serve? O Ansible é um produto que te permite controlar três áreas-chave dentro de seu ambiente de operações: automação, configuração, e implantação. - Automação: Escribe instruções que automatizam a configuração IT que você executaria manualmente. - Configuração: Os servidores mantêm configurações consistentes. - Implantação: Automatize a implantação de servidores como a sua ambiente se expandifica. ## Arquitetura O Ansible utiliza um modelo de configuração push, onde a máquina local (onde você escreve suas instruções) envia as configurações para servidores remotos. Isso contrasta com outras soluções populares como o Chef e o Puppet, que têm uma arquitetura master-slave com um servidor-mestre se comunicando com um cliente em um ambiente remoto esclavo. ## Playbooks Playbooks são o núcleo do Ansible. Eles definem a arquitetura do seu hardware, e cada playbook é escrito em um idioma chamado YAML (YAML Ain't Markup Language). Neste tutorial de Ansible, você criará, escreverá, e gerenciará os playbooks localmente. Cada playbook consiste de jogadas consistentes, onde você alvo específicas de servidores, e dentro de aqueles ambientes do servidor, você define as tarefas que você deseja implantar. ## Gerenciamento de Inventário A parte de inventário do Ansible é onde você mantem a estrutura de sua rede. Isto te permite criar e manter os nós em seu ambiente. Você pode alvo específicos de nós referindo-se aos nomes deste nós em suas scripts. ## Como o Ansible trabalha Em um ambiente real-world, você terá o software do Ansible instalado em uma máquina local, e ele conectar-se a vários nós em sua rede. A máquina local tem o seu playbook (o conjunto de instruções para configurar os nós em remoto) e uma estrutura de seu inventory (que ajuda a identificar e conectar-se aos nós). É usado uma conexão SSH segura para conectar-se aos servidores. Com o Ansible, você pode obter dados básicos de cada servidor para ajudar a gerenciar seu ambiente mais eficiente. URL: https://www.youtube.com/watch?v=wgQ3rHFTM4E # Curso Completo Ansible 2024 | Tutorial Ansible para Iniciantes | Curso Completo Ansible | Simplilearn ## Introdução O Ansible é uma ferramenta de automação de poderosa utilidade para gerir e configurar sistemas computacionais. Ela é essencial porque ajuda a simplificar tarefas, melhorar a escalabilidade e suportar *infraestrutura como código*, economizando tempo e recursos para trabalhos relacionados com Ansible, tais como: - Administrador Ansible - Engenheiro de DevOps - Administrador de Sistemas - Engenheiro de Cloud - Engenheiro de Rede Os salários variam, mas podem ir de €60, 000 a €150, 000 e mais por ano, dependendo do papel e localização. Se você estiver a procura de se aprender Ansible, considere se inscrever num dos curso de devops da Simplilearn em colaboração com universidades de marca reconhecida ao redor do globo. ## Ansible vs. Outros Produtos Comparações Ansible com outros produtos populares usados para prover um serviço consistente e semelhante, como Chef e Puppet. Encontraremos a arquitetura de Ansible e veremos como a máquina local é crítica para o envio das instruções definidas na sua playbook, gerenciadas por seus módulos, e como utiliza-se o inventário para gerenciar o hardware real disponível na sua rede. ## Configurar um Ambiente de Ansible Vamos agora ver como se configura um ambiente físico de Ansible na sua rede e os ferramentas adicionais desenvolvidos pela Red Hat para Ansible, incluindo a nova Interfaceuj GUI do Ansible Tower para simplificar a construção das instruções e playbooks necessários para criar ambientes de Ansible consistentes. ## Ansible em Ação: Uma Use Case A última vez, vamos examinar um caso de uso real da Hootsuite, uma empresa de gestão de mídia social, e ver como o Ansible lhe ajudou a aumentar a eficiência no seu time de DevOps. --- *URL: <https://www.youtube.com/watch?v=BS0GLQaSGPo* O Ansible é uma ferramenta de automação que oferece várias vantagens, como: - Eficiência: simplificando tarefas e melhorando a escalabilidade - Infraestrutura como código: economizando tempo e recursos - Configuração consistente - Implementação automática de software em novos ou existentes servidores Os papéis-chave correlatos a Ansible incluem: - Administrador Ansible - Engenheiro de DevOps - Administrador de Sistemas - Engenheiro de Cloud - Engenheiro de Rede Os salários variam, mas podem ir de €60, 000 a €150, 000 e mais por ano, dependendo do papel e localização. Se você estiver a procura de se aprender Ansible, considere um dos curso de devops da Simplilearn em colaboração com universidades de marca reconhecida ao redor do globo. ## Ansible vs. Outros Produtos No entanto, em comparação às outras ferramentas de automação como Chef e Puppet, a arquitetura de Ansible é um sistema de empurramento de base, o que significa que ele envia instruções para servidores remotos sem a necessidade de uma aplicação cliente no servidor remoto (em contrasto com os sistemas de empurramento damescotinha em que o cliente comunica de volta para um servidor principal). ## Arquitetura de Ansible O Ansible utiliza playbooks, módulos e um inventário para configurar e gerenciar servidores. Playbooks são uma série de instruções em YAML que são executadas nos alvos. Os módulos são funções reutilizáveis ou tarefas SQL-iques que são parte de playbook principal. O inventário é uma lista de hospedeiros e grupos de hospedeiros, os quais podem ser salvos em ficheiros YAML ou INI. ## Configurar um Ambiente de Ansible Para configurar um ambiente de Ansible, você precisará de uma máquina de controle de Ansible (uma máquina rodando o software de Ansible), o software de Ansible instalado nela, a biblioteca Python de Ansible, e chaves SSH configuradas entre sua máquina de controle e os seus alvos. ## Ferramentas Adicionais do Ansible A Red Hat oferece Ansible Tower, uma plataforma web de colaboração que controla as operações de Ansible, permitindo-lhe gerir trabalhos de automação de forma centralizada. Ele oferece vários benefícios, incluindo programação de tarefas, verificação visual de tarefas, gerenciamento de inventário, perguntas sobre variáveis específicas do ambiente e uma interface web simples para facilitar o dia-a-dia para não desenvolvedores. Agora, você poderá considerar se inscrever num dos curso de devops da Simplilearn se estiver a aproveitar aprender mais sobre o Ansible e seus usos em cenários reais! # Configurando um Ambiente Ansible ## Visão Geral A primeira etapa para configurar um ambiente Ansible é ter uma máquina local. Esta máquina servirá como a máquina de controle onde você escreverá e gerenciará todas as suas instruções, e ela irá enviar as configurações para os servidores remotos. A máquina local estará conectada a diferentes nós, os quais enviarmão as diferentes configurações que você configurará. ## Arquitetura ### Playbooks O núcleo do Ansible é o Playbook. Neste local, você cria as instruções que definem a arquitetura de sua hardware. Um Playbook consiste apenas em uma lista de instruções que configuram os diferentes nós do seu ambiente. Cada conjunto de instruções é escrito em uma linguagem chamada YAML, que stands for "YAML Ain't Markup Language. " #### Playbook de Exemplo ```yaml --- - hosts: servidor web tasks: - name: Instalar Patchy # Insira os comandos para a instalação de Patchy aqui - name: Iniciar Patchy # Insira os comandos para iniciar Patchy aqui - hosts: servidor de banco de dados tasks: - name: Instalar MySQL # Insira os comandos para a instalação de MySQL aqui - name: Executar ambiente MySQL # Insira os comandos para executar o ambiente MySQL aqui ``` Neste Playbook de exemplo, possuímos dois jogos de passages distintos: `servidor web` e `servidor de banco de dados`. Dentro de cada jogo de passages, creamos as nossas mãos-alvo e as tarefas que bem-quiser executar. Por exemplo, possuímos uma tarefa de `instalar patchy`, uma tarefa de `iniciar patchy`, e uma tarefa de `instalar MySQL`. ### Gerenciamento de Inventory A parte do Inventory do Ansible é onde mantermos a estrutura do nosso ambiente de rede. Criamos diferentes nós neste local, como `servidor web` e `servidor de banco de dados`. Sob cada nó, listamos os nomes que apontam para máquinas específicas dentro do ambiente. Isso facilita a escrita de scripts, pois somos apenas obrigados a referenciar `servidor web` ou `servidor de banco de dados`, e as diferentes máquinas terão as instruções do playbook executadas em elas. ## Exemplo Real-World Em um ambiente real-world, você teria o software do Ansible instalado em um computador local, o qual conecta-se a diferentes nós dentro da sua rede. No computador local, você terá seu playbook, que é a lista de instruções para configurar os nós remotos. Para identificar como irá conectar-se aos nós, terá um inventory. Conexões SSH seguras são usadas para se conectar a cada servidor, e hechoos brás são puxados em cada servidor para compreender como enviar o playbook e configurar remote. ## Bônus: Torre de Ansible A Torre de Ansible é um produto adicional da Red Hat que melhorará a experiência Ansible. Ele fornece um interface gráfica de usuário-amigo, facilitando a criação e o gerenciamento de ambientes para não desenvolvedores que constantemente trabalham com a janela do prompt de comando. Com a Torre de Ansible, é possível utilizar ações de arrastar e soltar e de clique do mouse para criar seus playbooks apropriados, inventories e pushes para seus nós. ## Estudo de Caso: Hootsuite A Hootsuite, um sistema de gerenciamento de redes sociais popular, usou o Ansible para superar o desafio de reconstruir constantemente o seu ambiente de servidor. Ela não tinha documentação estándar e às vezes dependia da memória para manter a consistência. O Ansible permitiu que eles escrevessem playbooks com instruções específicas que definem a arquitetura e a estrutura de nós de hardware e ambientes, permitindo-lhes reconstruir e criar novos servidores em segundos. Isso resultou em um ambiente mais consistente e deixou o time de operações livre para fornecer valor adicional à empresa. ## Tutorial Bem-vindo a este tutorial completo Ansible. Neste vídeo, passaremos por alguns conceitos importantes relacionados à ferramenta de DevOps Ansible. Pasaremos através de como você pode instalar Ansible e como você pode usar a ferramenta para automatizar seus processos. Siga em frente! # Playbook de Ansible para instalação e configuração do servidor Apache Esse playbook de Ansible será executado nas máquinas cliente especificadas no grupo `anable servers`. Neste exemplo, apenas uma máquina CentOS encontra-se neste grupo, mas mantemos o nome do grupo para clareza. ## Requisitos - A maioria das tarefas requer o nome de usuário `root` para aceder à máquina cliente. - A palavra-chave `become` especifica que você precisa se tornar o usuário `root` para executar esse Playbook, que é uma forma de escalada de privilégios. ## Tarefas ### Tarefa 1: Instalar servidor Apache (httpd) ``` - nome: Instalar httpd yum: name: httpd estado: mais recente ``` ### Tarefa 2: Iniciar o serviço Apache ``` - nome: Iniciar serviço Apache service: name: httpd estado: iniciado ``` ### Tarefa 3: Criar uma página web simples ``` - nome: Conteúdo da página web copy: conteúdo: "Parabéns\n" destino: "/var/www/html/index. html" ``` ## Verificação Antes de executar o playbook, certifique-se de verificar a sua sintaxe com o seguinte comando: ``` ansible-playbook -i inventory meu_playbook. yml --check-syntax ``` Se a sintaxe estiver correta, deverá apresentar apenas o seu nome do playbook. Agora, execute o playbook com: ``` ansible-playbook -i inventory meu_playbook. yml ``` Então, abra o seu navegador e vá para `http://<IP_CLIENTE>` para verificar que a página web está sendo servida corretamente. ## Recursos adicionais Para obter informações adicionais sobre Ansible, consulte os seguintes recursos: * [Documentação de Ansible](https://docs.ansible.com) * [Exemplos de Playbook oficial de Ansible](https://galaxy.ansible.com/confluence/pages/viewpage.action?pageId=14009595) * [Ansible Tower](https://www.ansible.com/tower) Agora, já temos dois contribuidores, Angelie, e Matthew, que você levará através da sua trabalho com Ansible. Neste tutorial, iremos abordar: 1. Por que utilizar Ansible? 2. Entendendo o valor e diferenças de Ansible em relação a outras ferramentas. 3. Arquitetura de Ansible. 4. Como criar um Playbook. 5. Gestão de inventário de ambientes do servidor. 6. A funcionamento interno de Ansible. 7. Opcional - Ansible Tower para melhorar o desempenho. 8. Caso de utilização: HootSuite, empresa de gestão de redes sociais, e sua implementação de Ansible. # Ansíble: Automatização da Infraestrutura de TI Neste tutorial, exploraremos o Ansíble, uma ferramenta de gerenciamento de configuração popular e em voga utilizada no abordagem DevOps. Aqui está uma visão geral dos conhecimentos que aprenderemos: 1. Por que utilizar Ansíble 2. Entendendo a arquitetura do Ansíble 3. Benefícios do uso de Ansíble 4. Playbook e Demonstração de Inventário (instalando o Apache e hospedando uma página web simples) ## Por que usar Ansíble? Consideremos um cenário em que Sam é um administrador de sistemas responsável pela infraestrutura de uma organização. Ao longo do tempo, a gestão desta se torna mais desafiadora de fazer manualmente. O Ansíble marca a差oute ao socorro, permitindo a Sam escrever playbooks simples que são implementados em todas as máquinas da infraestrutura, garantindo uma configuração consistente, eliminando tarefas monótonas, e reduzindo erros causados pelo trabalho manual. ## A Arquitetura do Ansíble O Ansíble é composto por dois componentes principais: a máquina local (em que instala o Ansíble) e clientes (nós que necessitam de configuração). Módulos (coleções de ficheiros de configuração, normalmente playbooks) e o ficheiro de inventário (contendo nós e os seus detalhes de configuração necessários) são escritos na máquina local. A comunicação entre a máquina local e os clientes é facilitada pelo SSH (Shell de Segurança). Em contraste de outras ferramentas, o Ansíble é uma ferramenta sem agente, ou seja, não é necessário instalar qualquer software ou plugin nos sistemas cliente. A máquina local tem controle completo dos clientes. ## Playbook e Inventory **Playbook**: Escrito em YAML (YAML Ain't a Markup Language), playbooks servem de instruções para configurar sistemas. **Inventory**: Um ficheiro que lista todos os nós que necessitam de configuração, agrupados com base nas suas configurações. --- ## Benefícios de Ansíble 1. **Sem Agente**: Não é necessário instalação de software adicional nos sistemas cliente. 2. **Eficiente**: Tarefas são executadas em paralelo, reduzindo significativamente o tempo de configuração. 3. **Flexível**: Suporte para plataformas diversas e tipos de infraestrutura (da maquina física à provedor de cloud). 4. **Simples**: Fácil de aprender e utilizar devido à sua sintaxe human-readable YAML. 5. **Relatórios automatizados**: Relatórios detalhados são gerados, tornando o monitoramento e a solução de problemas mais fáceis. --- ## Demo: Instalando o Apache e Criando uma Página Web Simples Para o demo, passaremos pela processo de instalação do Apache e criação de uma página web simples com um playbook e ficheiro de inventário. ### Instalação e Configuração 1. Instale o Ansíble na sua máquina local. 2. Crie um playbook (`playbook. yml`) e um ficheiro de inventário (`inventory. ini`). ### Playbook (playbook. yml) ```yml --- - hosts: all tasks: - name: Install Apache apt: name: apache2 state: present ``` ### Inventory (inventory. ini) ```ini [web_servers] webserver1 web_server_ip webserver2 web_server_2_ip [web_servers: vars] ansible_user=myuser ansible_ssh_private_key_file=~/. ssh/id_rsa ``` ### Executando o Playbook Para executar o playbook, execute: ```bash $ ansible-playbook -i inventory. ini playbook. yml ``` Não esqueça de substituir `web_server_ip` e `web_server_2_ip` pelas suas próprias endereços IP dos seus servidores web. # Ansible: Ferramenta de Gerenciamento de Infraestrutura Simplificada O Ansible é uma ferramenta mais eficiente devido ao aumento do espaço nas nossas máquinas cliente e notas para outros recursos. Pode-se configurar rapidamente o Ansible e ele é flexível, o que o torna ideal para uma infraestrutura que é propensa a alterações frequentes. O Ansible ajusta-se às alterações sem necessitar de tempo adicional. A simplicidade do Ansible é destacada pelos playbooks, que são escritos numa linguagem parecida com YAML, a qual está o mais perto do inglês como é possível. O **IR (Idempotência)** significa que se você tiver um Playbook que precisa ser executado em n determinado número de sistemas, terá o mesmo efeito em todos estes sistemas sem nenhum efeito colateral. Também temos relatórios automatizados, que fornecem informações crucials quando se está a lidar com uma infraestrutura grande. No caso do Ansible, o seu playbook possui várias tarefas, e todas estas tarefas são nomeadas. Quando você executar ou executar o playbook, ele fornece um relatório sobre quais tarefas executaram-se corretamente, quais falharam, quais clientes foram não válidos e assim por diante. ## Hands-On Antes de avançarmos para o trabalho prático, permita-me brevemente explicar o que iremos fazer: 1. Eu farei a hospedagem de duas máquinas virtuais, ambas rodando o Sistema Operacional Cent OS 7. Uma será minha máquina local e a outra será a minha máquina do cliente. 2. Na minha máquina local, instalarei o Ansible. 3. Depois escreveremos a inventário e o playbook e deployaremos este playbook na máquina do cliente. 4. Verificaremos se as configurações que mencionamos no nosso playbook foram feitas corretamente. ### Demo #### Máquina Mestre 1. Instalar o Ansible: Na máquina mestre, o primeiro passo a realizar é a instalação do Ansible. O comando para isso é `yum install ansible`. Isso pode levar algum tempo. 2. Ficheiro de host: Em seguida, vá para o nosso ficheiro de host, que é a nossa inventário. Aqui indicaremos todos os nós. No nosso caso, temos apenas um nó. O caminho para o ficheiro de host variará. 3. Fazer o Playbook: Necessitamos de escrever o Playbook. A extensão para o nosso Playbook é yml. Aqui, podemos ver que já escrevi o meu playbook, mas vou explicar como isso é feito. #### Máquina do Cliente 1. Verificar o endereço IP: Antes de chegar aqui, é aconselhado que verifique o endereço IP na sua máquina do cliente. O comando simples para esta tarefa é `ifconfig`. 2. Ficheiro de host: Quando escreve a distância IP, coloque um espaço e aqui precisamos especificar o nome de utilizador e a palavra-passe para o nosso cliente. ## Estrutura do Playbook Um ficheiro YAML sempre começa com três traços, indicando o início do seu ficheiro YAML. O primeiro passo é dar um nome ao todo o Playbook. O `host` é onde este se executará. O `remote user` é o utilizador que irá utilizar no cliente. `become` é verdadeiro para indicar que precisa de importância de configurar as privilégios em raiz, que é uma camuflagem de privilégios. Um playbook é composto por tarefas. Aqui, temos três tarefas: 1. Para instalar httpd: Estamos instalando o pacote httpd, que é o servidor Apache, e estamos instalando a versão mais recente deste pacote. 2. Iniciar httpd: Para o serviço, o nome é httpd pois este é o serviço que precisamos começar a correr, e o estado é iniciado. 3. Criar conteúdo: Esta é a parte onde estamos a criar a nossa página web. O arquivo que será criado no cliente é `www/html/index. html`. Depois de escrever o ficheiro YAML, guarde-o. Em seguida, verifique se o sintaxe de nosso ficheiro YAML está absolutamente correto. O comando para verificar a sintaxe do ficheiro YAML é `ansible-playbook`. Digite o nome do seu playbook na sintaxe do comando. Se não houver erros de sintaxe, o único output que você receberá é o nome do seu playbook. O nossso Playbook está agora pronto a ser executado. O comando para executar o Playbook é `ansible-playbook`. Depois de executar o Playbook, verifique na máquina do cliente se todas as alterações que desejamos foram feitas. Como estamos a instalar o pacote httpd e a hospedar uma página web, o melhor método para isso é abrir o navegador e digitá-lo num endereço `localhost` (assumindo que o navegador web seja localhost). Se o servidor Apache estiver instalado e a página web estiver hospedada, poderá ver a página. ## Porque Usar o Ansible? O Ansible é uma ferramenta de gerenciamento de configuração que pode ajudar a tornar um administrador de sistemas a parecer como um superestrela. Todas as *configurações* que você precisa fazer podem ser bem facilmente realizadas com os playbooks do Ansible, muito mais do que usando comandos individuais. Se você tem de instalar um número grande de pedidos de pacote e mudar muitas configurações, então o Ansible é uma ferramenta ótima para isso. É possível usar o Ansible para realizar muitas tarefas através do uso de playbooks, e através de sua automação, parece que você está fazendo muitas operações ao mesmo tempo. Qualquer mudança que você make em um servidor ou múltiplos servidores poderá ser replicada facilmente com o seu playbook, o que torna as configurações mais eficientes e práticas. No clients-only da bolsa de bateria, um estudante usa um Playbook Ansible. Esta é uma imagem de um cliente em que não há nenhuma interface de utilizadores e o único propósito é executar este Playbook Ansible que instala e configura uma múltipla camada de infraestrutura deployada de forma modular em estados válidos e idempotentes por meio do uso de necessários recursos de apache, nginx, burrow, bind9, carmen, ldap, rabbitmq, e django pelo servidor de aplicação. Inicialmente ele estava a acabar de escrever o seu Playbook, mas ao ver que o playbook estava a funcionar corretamente, Dortmund o ajudou a melhorar o seu programa e ajudar-lhe a compreender a linha de comandos do Ansible. # Documentação Técnica: Ansible vs SaltStack ## Visão Geral Ansible e SaltStack são duas ferramentas de gerenciamento de configuração populares empregues para automatização de tarefas IT como provisionamento de servidores, gerenciamento de configuração e implantação de aplicações. Ambas as ferramentas têm suas características únicas, vantagens e desvantagens. Este documento apresenta uma visão geral de Ansible e SaltStack, focando nos seus arquiteturas, instalação, linguagens, escalabilidade, ferramentas de administração, interoperabilidade e disponibilidade em nuvem. ### Ansible #### Arquitetura Ansible operates in a client-only solution, where the instructions are pushed from a central server to the network without the need for a two-way communication back to the main server. Os nós clientes não necessitam de uma instalação de agente. #### Instalação Ansible é geralmente considerado o mais fácil de se instalar, o que o torna uma ótima escolha para iniciantes. Seu processo de instalação é simples e existem excelentes recursos online disponíveis na comunidade para auxiliar os usuários. #### Linguagens Ansible utiliza YAML, uma linguagem de marcado, para escrever seus playbooks. Esta linguagem é relativamente fácil de aprender, particularmente para quem já está familiarizado com XML. #### Escalabilidade Ansible foi desenhado para escalabilidade e consegue gerenciar organizações grandes eficazmente. #### Ferramentas de Administração As ferramentas de administração de Ansible são simples de usar, fazendo com que as tarefas de operadores e equipes de infraestrutura sejam mais manejáveis. #### Interoperabilidade A interoperabilidade com Ansible é alta, permitindo que ele funcione de forma seja a de vários ambientes de nuvem. #### Disponibilidade em Nuvem Ansible tem uma disponibilidade em nuvem limitada, em relação a outras ferramentas nesta lista, pois não está disponível nas principais plataformas de nuvem como o Amazon Web Services (AWS) e o Microsoft Azure. ### SaltStack #### Arquitetura SaltStack segue um modelo de arquitetura master-slave, onde um ambiente mestre envia instruções a grãos (componentes de rede) da infraestrutura. #### Instalação O processo de instalação de SaltStack é um pouco mais complexo que outras ferramentas nesta lista, mas torna-se mais fácil com as últimas versões. #### Linguagens SaltStack utiliza Python para suas instruções, mas também suporta YAML e CSL, o que torna a usabilidade mais conveniente. #### Escalabilidade SaltStack é projetado para ambientes que buscam escalar rapidamente e ser altamente resistentes. #### Ferramentas de Administração As ferramentas de Administração de SaltStack são relativamente fáceis de usar uma vez que estão configuradas, com um mecanismo de relatórios de trabalho fácil de usar que facilita a vida do operador. #### Interoperabilidade A interoperabilidade de SaltStack é alta, similar às outras ferramentas nesta lista. #### Disponibilidade em Nuvem Semelhante à Ansible, SaltStack também tem uma disponibilidade em nuvem limitada, e ainda não está disponível em ambientes de nuvem populares como AWS e Azure. ### Comparação Em suma, Ansible e SaltStack ambas têm suas vantagens e desvantagens, dependendo das necessidades do usuário e do ambiente que ele está gerenciando. Ansible é mais fácil de instalar e possui ferramentas de administração simples, enquanto que SaltStack oferece melhor reconhecimento de problemas e é projetado para ambientes altamente resistentes e escaláveis. Ambas têm limitações em suas disponibilidades em nuvem. Ultimamente, a escolha entre Ansible e SaltStack (ou qualquer outra ferramenta de gerenciamento de configuração) dependerá da natureza dos projetos, das capacidades do time e das preferências pessoais. ### Referências 1. Documentação Ansible: <https://docs.ansible.com/> 2. Documentação SaltStack: <https://docs.saltstack.com/> 3. Perguntas de Entrevista sobre DevOps: YouTube: <https://www.youtube.com/watch?v=3Gh61f4lx30> Titulo: Comparação de Ferramentas de Gerenciamento de Configuração - Chef, Puppet, Ansible e SaltStack (Ferramentas do DevOps) ```markdown # Comparação de Ferramentas de Gerenciamento de Configuração - Chef, Puppet, Ansible e SaltStack (Ferramentas do DevOps) Neste artigo, compararemos e contrastaremos quatro de três das ferramentas de gerenciamento de configuração mais populares no cenário de trabalho de DevOps: Chef, Puppet, Ansible e SaltStack. ## Chef O Chef é uma ferramenta aberta de código fonte com o objetivo de gerir ambientes de larga escala. Ele abrange infraestruturas heterogêneas e oferece uma solução madura. O código é escrito em Ruby, e ele comunica entre nós para se identificar quais necessitam de atualizações. ### Vantagens - Coleção de recetas enorme para configuração rápida do ambiente. - Integração excelente com Git para controle de versão forte. ### Desvantagens - Requer um aprendizado considerável para possível transição de iniciante para especializado. - O servidor não tem muito controle; ele depende da comunicação ao longo de sua rede. ## Puppet O Puppet é semelhante ao Chef, pois gerencia grandes organizações heterogêneas. Ele também é escrito em Ruby e usa uma DSL para a escrita de manifestos. ### Vantagens - Comunidade forte de apoio e informação. - Mecanismo de reportando forte com o objeto de compreender a infraestrutura. ### Desvantagens - Requer habilidade avançada em Ruby para tarefas avançadas. - O servidor não é controlador; ele depende da comunicação ao longo de sua rede. ## Ansible O Ansible é exclusivo do Chef e Puppet, pois não envia instruções para servidores sem um ambiente cliente-servidor ou mestre/escravo. As instruções são escritas em YAML, tornando-o fácil de aprender. ### Vantagens - Sem precisar de um agente em nós remotos e servidores. - YAML é fácil de se aprender. ### Desvantagens - O desempenho não é tão rápido quanto outras ferramentas. - Embora YAML seja fácil de aprender, é menos poderoso do que Ruby para tarefas mais complexas. ## SaltStack O SaltStack é uma ferramenta de linha de comando que gerencia ambientes para escala rápida e resistência. As instruções são baseadas em Python, mas você pode escrevê-las em YAML ou DSL. ### Vantagens - Fácil de usar uma só vez configurado. - Mecanismo de reportando forte para operadores. ### Desvantagens - A configuração é mais desafiadora em comparação com outras ferramentas. - Falta de uma interface gráfica para a criação e geração de ambientes. ## Conclusão Dependendo de suas necessidades, cada uma destas ferramentas de gerenciamento de configuração apresenta suas forças e fracas. O Chef e o Puppet são muito semelhantes, com uma grande ênfase em gerenciamento para grandes, heterogêneas organizações. O Ansible é mais direto no seu abordagem, ao mesmo tempo que o SaltStack destaca-se em escala e resistência. Certifique-se, mas, de avaliando as suas necessidades antes de escolher uma ferramenta para otimizar suas operações. ``` # Análise Comparativa de Quatro Ferramentas de Gerenciamento de Configuração Este documento fornece uma análise comparativa entre quatro ferramentas de gerenciamento de configuração: Ansible, Chef, Puppet e SaltStack. ## Arquitetura A maioria dos ambientes destas ferramentas segue uma arquitetura server-client, salvo Ansible, que é uma solução client-somente. Nesse caso, você envia as instruções de um servidor e elas são distribuídas pela rede. Não há comunicação de dois caminhos entre o principal cliente para o que realmente está acontecendo na sua rede. ``` - Ambiente server-client (Chef, Puppet, SaltStack) - Solução client-somente (Ansible) ``` ## Facilidade de Configuração Ansible chama atenção pela facilidade de configuração. É o instrumento mais fácil de se configurar. Se você é novo nestes tipos de ferramentas em seu ambiente, talvez deseje iniciar com Ansible apenas para ver como fácil é criar configurações automatizadas antes de olhar para outras ferramentas. Chef, Puppet e SaltStack não são particularmente difíceis de configurar, também, com técnicas claras sobre o que fazer para configurá-las na comunidade online. ``` - Ferramenta mais fácil de configurar (Ansible) - Não particularmente difícil para configurar (Chef, Puppet, SaltStack) ``` ## Linguagens de Configuração - **Chef e Ansible** são procedurais, especificando como realmente executar a tarefa nas instruções. - **Puppet e SaltStack** são declarativos, especificando apenas o que deve ser feito nas instruções. ## Escalabilidade Todas as ferramentas são projetadas para escalabilidade. São esperadas para escalar para organizações massivas. ## Ferramentas de Gerenciamento - **Ansible e SaltStack** dispõem de gerenciamento de fácil uso, que você vai gostar de usar. São fantásticas de usar. - **Puppet e Chef** exigem aprender a linguagem DSL do Puppet ou a linguagem DSL do Ruby para ser um verdadeiro mestre nesse ambiente. ## Interoperabilidade A interoperabilidade destes produtos é muito alta em todos os casos. ## Disponibilidade em Nuvem Atualmente, Ansible e SaltStack têm disponibilidade limitada em nuvem, uma vez que não estão disponíveis em ambientes cloud populares. Puppet e Chef, por outro lado, estão disponíveis em ambos em Amazon e Azure. ## Comunicação - **Chef** utiliza sua própria ferramenta de faca (knife) para comunicação. - **Puppet** utiliza SL (Secure Socket Layer) para envio SSL. - **Ansible e SaltStack** utilizam hash de sockets seguros e SSH como sua ferramenta de comunicação. ## Segurança Todas as ferramentas são extremamente seguras na sua comunicação. ## Conclusão Cada ferramenta tem suas forças e suas fracas. A escolha depende de suas capacidades e do tipo de ambiente que está a gerir. Todas as ferramentas são open-source, então você pode experimentá-las. Recomendamos assistir a vídeos e deep dives em cada um destes produtos para um entendimento mais profundo e orientações de implementação. ## Vídeo de Tutorial: Instalação de Ansible em Linux [Instalação de Ansible em Linux | Instalação e Configuração de Ansible em CentOS 7](https://www.youtube.com/watch?v=YxzL2qwkWbc) Idioma: Inglês Este tutorial mostrará como instalar o Ansible em um sistema Linux. ```markdown --- # Curso Completo de Ferramentas DevOps | Ansible, Jenkins, Nagios, Chef, Puppet, Selenium (tutorial) | Simplilearn Idioma: en ## Bem-vindo ao Canal YouTube SimpliLearn Nesta sessão, aprenderemos sobre o Curso Completo de Ferramentas DevOps, guiado por Marvin e Chidan. Antes de começar, gostaria de dizer-vos que atualizamos várias tecnologias diariamente, por isso, se você é um entusiasta da tecnologia em busca das últimas tendências, considere inscrever-se no nosso canal no YouTube e não esqueça de apertar o ícone de sino para não perder qualquer atualização do SimpliLearn. Agora, começaremos com a sessão tendo uma compreensão básica do DevOps. Em seguida, abordaremos mais profundamente e entenderemos os fundamentos do DevOps, a relevância dela no cenário atual e várias fases do DevOps. Depois de ter compreendido o DevOps, abordaremos os diferentes ferramentas DevOps em detalhe: 1. Git - seguido por GitHub, onde vamos aprender vários comandos Git 2. Jenkins - Jenkins Pipeline e como instalarmos Jenkins 3. Docker - onde vamos descobrir o que é Docker e o que é um container Docker, e no processo, veremos o processo de instalação do Docker 4. Kubernetes - avançando, vamos aprender sobre os fundamentos de Kubernetes e a diferença entre Kubernetes e Docker 5. Kubernetes em AWS 6. Puppet - onde vamos saber o que é Puppet, por que utilizamos ele e o processo de instalação 7. Ansible - o processo de instalação e os benefícios de utilizar Ansible 8. Selenium - onde vamos aprender o que é Selenium, sua suite ferramentas e o processo de instalação Enquanto aprendemos todas estas ferramentas, vamos entender as coisas com demo hands-on, o que faz a compreensão mais eficaz e acessível. Em última análise, vamos ter uma pequena lição de café sobre o DevOps e várias ferramentas DevOps. Vamos olhar em alguns das perguntas de entrevista de DevOps mais promiscuas que vão ajudá-lo a excelir em suas próximas entrevistas de DevOps. ## Abordagem DevOps A abordagem DevOps é uma colaboração entre o time de desenvolvimento e o time de operações. Enquanto o time de desenvolvimento desenvolve, projeta e constrói o sistema desde o zero, o time de operações testa e implementa o produto desenvolvido. A abordagem DevOps busca reduzir as diferenças entre o time de desenvolvimento e o time de operações, para entregar o software mais rapidamente e suavemente. Embora possam haver desafios de comunicação, a cultura DevOps vai manter um fluxo fluido entre as equipes e tornar o processo de desenvolvimento de software bem sucedido. ## Ciclo de vida DevOps - Fases e Ferramentas 1. **Fase de Planear -** O time de desenvolvimento coloca uma planta, tendo em vista os objetivos do aplicativo que devem ser entregues ao cliente. Quando a planta é criada, começamos com o código. Diferentes versões do código são armazenadas num repositório de código-fonte com ajuda de ferramentas como git e são combinadas quando necessário (Controle de Versão). 2. **Fase de Construção -** Depois de o código ser construído com êxito, ele é testado para quaisquer bugs ou erros. A ferramenta de automação de teste mais popular é selenium. 3. **Fase de implementing -** Agora o time de operações implementa o código no ambiente de trabalho. As ferramentas mais populares utilizadas para automatizar estes passos são ansible, Docker e kubernetes. 4. **Fase de Monitorização -** O produto é continuamente monitorado, e nagios é uma das ferramentas mais populares utilizadas para automatizar este passo. O feedback recebido após este passo é enviado de volta à fase de planeamento, e isso é o que forma o núcleo do ciclo de vida DevOps - a fase de integração. 5. **Continuous Integration -** Jenkins é a ferramenta que manda o código para a compilação e testes. Se o código passar o teste, é mandado para implantação e este é referido como continuous integration. ## Exemplos de Empresas que utilizam DevOps - Amazon - Netflix - Walmart - Facebook - Adobe ## Quiz: Repare que ferramenta DevOps é utilizada na fase seguinte 1. Opção A - Selenium Opção B - Jenkins Opção C - Git Nenhuma das opções acima Hoje em dia mais e mais empresas se orientam pela automação com o objetivo de reduzir o tempo de entrega e as diferenças entre os seus times de desenvolvimento e de operações para The One Gateway for this - devops, o mesmo se aplica para você se você quer fazer o mesmo e se excelir em devops, revise o programa postgraduate de SimpliLearn. O programa pode ajudá-lo a dominar várias habilidades em demanda de devops e ferramentas como Continuous Integration and Delivery, devops cloud, kubernetes, Docker, e muito mais. ``` Economia da Solução de Problemas DevOps ======================================== O time de DevOps irá focar na Inovação e criatividade ao permitir que os profissionais gerenciem efetivamente a quantidade e velocidade de dados. Visão Geral do DevOps ------------------- ### Models de Entrega Começaremos por fazer uma revisão de models de entrega comumente usado para entregar soluções para sua empresa. Os modelos mais populares incluem: - Modelo de Catarata de Água (Waterfall) - Modelo Águilas (Agile) - Modelo DevOps Este artigo visa destacar como o DevOps se diferencia dos outros dois modelos e faz uso das melhores práticas dos outros modelos. Examinaremos todos os estágios usados em um ciclo habitual de entrega devops e as ferramentas usadas dentro de cada estágio a qual as melhorias eficiencyenciais são aprimoradas dentro de DevOps. #### Modelo de Catarata de Água (Waterfall) O modelo tradicional de catarata de água é um modelo de entrega que teve uso para décadas para entregar soluções, não apenas para IT soluções e soluções digitais, mas gigante história partiu da Segunda Guerra Mundial. Este modelo é usado para capturar requisitos e, em seguida, lançar cada entrega-chave por meio de uma série de portas-laços que é usado para aproveitar e construir a solução. Entraremos em cada uma das portas-laços seguintes: ##### Análise de Requisitos Nesta etapa, você discutirá com o cliente para entender especificamente quais são seus requisitos e o tipo de software que eles desejam nosso time construir. Depois de sua análise dos requisitos, você construirá uma plano para entendermos o trabalho necessário para ser bem sucedido em entregar o bem-sucedido a solução. ##### Planejamento do Projeto Depois de ter um desenho do projeto, nesta etapa, você começará a desenvolver a solução. Isso significa que os programadores passarão a codificar a solução em que construirá as aplicações construídas para construir os web sites, que podem levar, entre outras coisas, meses para ser concluído. ##### Testes de 100% Após terminar o desenvolvimento da solução, entregue-a para um grupo de testadores que fazerá a testagem integral da sua aplicação para os sistemas e bancos de dados que integram o aplicativo. Você terá testado-o ao meio do código que vocêpediu, fazerá teste manual, teste de UI e, em seguida, entregue a solução para "modo de manutenção", onde você garante a funcionalidade ativa e enfrenta riscos de segurança. ##### Problemas do Modelo de Catarata de Água Porém, você também tem alguns desafios em oferecer solução à catarata de água, pois a entrega cascateando e paradas completas e separadas etapas torna difícil integar novos requisitos do cliente em um projeto, uma vez que o projeto já tive semanas ou meses de execução. Se um cliente voltar com uma lista de alterações e os projeto já tiver 6 meses em execução, geralmente temos que reestruturar todo o projeto, o que é um processo caro e demorado. ##### Desafios de Comunicação com o Cliente Muitas das vezes, se você trabalhar porlongos períodos sem sua equipe há um problema de comunicação. Afinal, você entrega uma solução ao cliente o tempo que demorou muito tempo para trabalhar no projeto, o cliente pode revisar o aplicativo e ele não gostar do que lhe mostramos ou encontramos que ele não incluiu características que eles queriam. Quando isso acontece, normalmente temos que voltar para a pré-revisão da catarata de água novamente. Fechar o loop de volta ao cliente e voltar a faiscê-lo significa que adicionamos mais tempo no projeto. ### Modelo de Lição Águilas (Agile) O modelo lição agilas permite que os programadores criem protótipos mais rápido e fornece para o cliente em breve os requisitos, que, em seguida, entregue-lhe para feedback. Isto nos permite construí-la atterraponhabili de forma que o cliente possa obter Feedback rápido e efetivo. Normalmente o relato ciclo é de duas semanas. Em uma lição Agilas, a dedicamos a seguir os métodos: - Entendendo o que você deseja o desenvolvedor fazer para você - Fazer o melhor solução possível dentro desses requisitos - Aplique as melhores ferramentas de desenvolvimento - Tire a decisão de priorização dos requisitos Existem várias formas e conteúdos diferentes e todas as coisas dependem do seu projeto específico. Agora, inicie seus treinamentos e aprenda mais sobre as diferentes lições AGILE. DevOps Tools - Uma lista de ferramentas abertas ===== ### Jenkins Jenkins é a fase de integração que utilizamos para nossas ferramentas. ### Git O Git é um software utilizado para controles de versão. ### Ansible Ansible é uma ferramenta de automação utilizada para gerenciar vários servidores como um. ### Chef O Chef é um software comercial de automação de configuração utilizado para recuperação rápida de sistemas de alto escalonamento. ### Continuous Delivery É a fase de entrega contínua que inclui: - Implementação do código - Build - Teste de unidade - Teste funcional - Implementação (com deploy e entrega) Quando aproveitarmos a entrega contínua teremos a seguinte vantagem: - Redução de tempo de entrega - Redução de tempo de selling - Qualidade do produto - Minoramento de desenvolvimento de sincronia - Redução de erros humanos erros de lesão, commit ### Linux Uma distribuição Linux é usada para o ambiente de servidor e para algumas partes do pipeline de desenvolvimento. ### Docker Docker é uma para virtualizar aplicativos, ambientes de visualização e contêineres, então podemos separar um aplicativo do sistema operacional e o ambiente para o qual ele vem, fácil pré-ter impresso, o que permite que várias aplicações sejam empilhadas em um servidor. ### Kubernetes Kubernetes é uma plataforma para a criação, automação e supervisão de contêineres. ### Elasticsearch É uma plataforma para avaliação-busca, análise e busca de padrões nas informações. ### Grafana É uma plataforma de monitoramento visual para dados, previsões e metrica no tempo-real. ### Prometheus É uma plataforma de monitoramento de código aberto e distribuído para avaliação-busca vertical e na horizontal das falhas. ### InfluxDB É um sistema de base de dados e monitoramento orientado-a-váries-execuções intensivo em escrita optimizado para o time seral e o monitoramento. ### Grafcana e Prometheus Estes dois sistemas juntos formam uma pilha de supervisiono da área, Grafcana é o painel de monitoramento, enquanto Prometheus é o sistema de avaliação-busca para o back-end. ### Helm É uma ferramenta de automação de implantação para Kubernetes, que configura todos os required containers como software para aplicações Acessível. ### Kibana Kibana lhe ajuda em quedar aos chamados, nas revisões de log e monitoramento. É usado com Elasticsearch. ### Visual Studio Code É um editor de códigos-fonte para Windows, Linux e Mac Eldernode. É disponível em três modelos: gratuito, educativo e empresarial. ### Postman É uma ferramenta para a cooperação APIs RESTful, gRPC, e de outras plataformas, essa para fazer chamados HTTP de colocação, teste e desenho, além de compartilhar e rodar coleções. ### Acumos É um framework Ruby para rodamento de código, implementando as operações de build e deploy das aplicações. ### Github É um sistema de controle de versões com as seguintes ferramentas e recursos: - Repositórios públicos e privados - Issues (Alavancas Kanban) - Pull requests - Repositórios clonados - Change logs - Notificações - Code review ### Bitbucket É um sistema de controle de versões com as seguintes ferramentas e recursos: - Repositórios públicos e privados - Versioning (Git ou Mercurial) - Issues - Pull requests - Wiki ### GitLab É um sistema de controle de versões com as seguintes ferramentas e recursos: - Repositórios públicos e privados - Milestones - Continuous Delivery - Issue tracking - Wiki - Team scheduling - CI/CD pipeline management - Dashboard ### Notion É um sistema para anotações, tarefas, itens de post, db e wiki. ### Postman É um editor de código-fonte para CLIs de linguagem Go, Python ou Node. js. # Trabalhando em um Projeto Git Este guia vai guiá-lo pelos passos básicos para trabalhar em um projeto Git, com ênfase em GitHub como um serviço de hospedagem e colaboração de projetos. ## Introdução Começar um projeto em GitHub é uma excelente forma de ver se alguém já criou um protótipo ou um projeto de código aberto que possa ser utilizado. Se você estiver trabalhando com Azure, encontrará milhares de projetos em andamento. Interessantemente, o GitHub foi recentemente comprado pela Microsoft, e a Microsoft está completamente abraçando as tecnologias de código aberto. Então, queremos delvetar-nos na arquitetura de Git propriamente dita. ### Arquitetura de Git #### Área de Trabalho Sua área de trabalho é a pasta onde você está atualmente trabalhando em seu projeto Git. Vamos usar um exemplo de projeto de restaurante para demonstrar os passos. Você começa com a sua área de trabalho onde você armazena seus arquivos. #### Área de Preparação Quando você faz alterações em arquivos na sua área de trabalho, adiciona-os à área de preparação, que é onde se enfoca para comitarm suas alterações de volta à linha principal de seu projeto Git. #### Repositório Local Após comitar suas alterações, as empurra para um repositório local. Essas alterações serão sincronizadas com o serviço. #### Repositório Remoto Um exemplo de repositório remoto seria o GitHub. Antes de escrever um novo código, você deverá tirar uma cópia das últimas alterações do repositório remoto para garantir que sua cópia é sempre a última versão do software que o resto da equipe está trabalhando. #### Ramos e Fusionando Enquanto você está trabalhando em novas funcionalidades em seu projeto, poderá criar ramos. Pode-se mergarm seus ramos no código principal para adicionar novas funcionalidades sem quebrar o código principal. Isso garante que o código permaneça de alta qualidade e que possa adicionar novas funcionalidades de forma seletiva. #### Clonando e Forkando Forking é um termo antigo no desenvolvimento que se estende muito antes de termos sistemas de controle de versão distribuídos. Gelar um projeto é tomar uma cópia dele e criar uma cópia, assim formando um projeto separado. Clonar é o mesmo processo no Git. Quando você baixa o código, você baixa uma cópia exacta desse código com todas as mesmas seguranças e permissões em relação ao código principal. #### Colaboradores Os colaboradores são membros da equipe que trabalham em um projeto juntos. Você pode adicionar colaboradores ao seu projeto para melhorar o código. Para fazer isso, precisará adicionar-lo como colaborador no GitHub e definir as permissões necessárias para ele. ### Comandos Git #### `git init` Inicializa um repositório de Git local em seu computador. #### `git add` Adiciona um ou mais arquivos à área de preparação. #### `git commit -m "mensagem de compromisso"` Compacts alterações para o *head* (atualiza o projeto Git). #### `git status` Verifica o status de seu repositório atual e lista arquivos que foram alterados. #### `git diff` Exibe as alterações que você fez no arquivo para que possa ver as diferenças entre os dois arquivos. #### `git push origin Branch name` O comando irá enviar o ramo para o repositório remoto, permitindo que outras pessoas o usem. #### `git config --global user. name` Informa a identidade de Git, configurando o nome do autor. #### `git config --global user. email` Informa o e-mail de identidade de Git, identificando o autor com base no e-mail ID. #### `git clone` Cria um repositório Git local a partir de uma fonte remota. #### `git remote add origin servidor` Conecta o repositório local ao servidor remoto e adiciona o servidor para propósitos de empurrada. #### `git branch branch name` Cria um novo ramo para você para criar uma nova funcionalidade. #### `git checkout branch name` Permite que você passe de um ramo para outro. #### `git merge branch name` Fusiona um ramo no ramo ativo. #### `git rebase` Junta uma sequência de comandos para formar um novo comando base para manter uma história de projeto linear. #### `git pull remote` Puxa as alterações feitas no seu repositório remoto para o seu repositório local. Título: Introdução à Utilização do Git com o GitHub ============================================== Conteúdo -------- Este documento fornece uma demonstração prática da utilização do Git e do GitHub no seu ambiente local. Explicaremos como criar um repositório local, inicializar o repositório Git, adicionar, comitar e sincronizar arquivos, além de criar ramificações e realizar fusões. Demonstração de Aplicação do Git localmente ---------------------------------- Antes de começar, certifique-se de ter instalado corretamente o Git bash e o Git não-Blocked Edition (GE) em seu sistema. O Git bash é uma interface de linha de comando para o Git, enquanto o GE permite a execução do Git de forma nativa no Windows. 1. Crie um repositório local: ```bash cd ~/desenvolvimento mkdir olá-mundo cd olá-mundo git init ``` 2. Inicialize seu cleaning system: ```bash # configurar o nome de usuário e endereço de email git config user. name "Seu Nome" git config user. email "seu. email@example. com" ``` 3. Crie e adicione um novo arquivo: ```bash # criar um novo arquivo chamado readme. txt echo "Olá, Mundo! " >> readme. txt git status git add readme. txt ``` 4. Commit seus arquivos: ```bash git commit -m "Primeiro Commit" ``` 5. Verifique as alterações entre as versões do arquivo: ```bash git diff readme. txt ``` 6. Crie uma conta do GitHub e conecte-a ao seu local: ```bash git remote add origin https://github.com/seu-usuário/repositório.git ``` 7. Sincronize seu repositório local com o GitHub: ```bash git push -u origin master ``` 8. Fork um projeto do GitHub e cloná-lo localmente: - Acesse o projeto no GitHub e forke-o para sua conta. - Copie o URL de clonagem do projeto forkeado. - Crie um novo diretório para o projeto e use o comando git clone para cloná-lo. Conclusão --------- Aprenda e pratique a utilização do Git e do GitHub para controle de versão de seu código e colabore cooperativamente com outros desenvolvedores. # Demo de Comandos Git com Chidanand da Equipe Simply Learn Voltei para trocar de branch para o master e certifique-se de que tudo está sincronizado corretamente. Em algum ponto poderíamos ter que rebassar todos os trabalhadores. Isso pode ser uma coisa dificil fazer, mas permitirá que podemos gerir alterações no futuro. Então, voltei para a nossa rama de teste, que acredito que estamos realmente ali. ## Adicionar mais ficheiros 1. iremos criar dois ficheiros mais. Vamos ir para a nossa pasta aqui e copiarem esses. colleagues. Isso criou. 2. iremos renomear essas para tests4 e tests5. E assim, agora temos arquivos adicionais. 3. iremos adicioná-los para a nossa rama que estamos a trabalhar. Então, vamos e diga `git add tests4 tests5`, e iremos comitá-los como `git commit -m "adicionando dois novos arquivos"`. Foi adicionado os dois novos arquivos, assim, agora temos todos os nossos arquivos. ## Listar Ficheiros 1. podemos listá-los e temos todos os ficheiros que estão na rama. 2. após ter mudado para a rama master, queremos rebassar a master. Podemos dizer `git rebase master`. Isso deve então dar-nos o comando a todo o tempo que está completamente atualizado. 3. podemos dizer `git checkout master` para mudar para a rama master. Isto permitirá-nos continuar a rebassar a rama de teste e, então, listar todos os ficheiros que estão todos no mesmo local. 4. podemos dizer `git rebase test` e depois `git branch`. Agora, podemos listar, e temos todos os nossos ficheiros listados corretamente. ## Introdução Bem-vindo aos comandos Git! Meu nome é Chidanand e são eu da Equipe Simply Learn. Vou cubrir vários comandos essenciais Git e irá passar pela demonstração para a maior parte deles. Começo por instalar o Git bash ou o cliente Git e configurar-lo para o seu uso inicial. Depois de configurar o cliente Git, vou acionar várias repositórios localmente e trabalhar em essas repositórios usando comandos Git. Quando estiver feliz com as minhas alterações locais, vou comitar várias delas e depois mandá-las para um servidor Git da sua escolha. Para esta demonstração, pretendo utilizar github. com, que é um serviço em Cloud hospedado e fornece registo gratuito para todos. Em última análise, vou abordar vários tópicos relacionados com o branching e merge de Git, pois estes dois são, na minha opinião, os recursos de destaque do kit de ferramentas de controle de versão distribuído Git. Git é um dos ferramentas de controle de versão distribuído mais populares deste momento, e como todos os outros controladores de versão distribuídos, permite que possamos executar várias tarefas de controle de versão sem uma conexão de rede. Antes de saltar para a minha demonstração, irei gastar algum tempo explicando-lhe o modelo de cliente-servidor do Git. O que dá para que um par de utilizadores colaborem e começam a trabalhar com Git? A coisa absolutamente mínima que um utilizador precisaria para começar a trabalhar com Git é algo chamado Git bash ou o cliente Git. Isso vem como instalador para todos os sistemas operativos populares como Windows, todas as variações de Windows, Linux, Mac OS, e outros sistemas operativos. Cuando instalar Git bash, você recebe uma útil de linha de comando por meio da qual você pode acionar comandos Git, e garantir que todos os comandos Git irão funcionar perfeitamente. Assim, você pode criar uma pequena Repository e trabalhar nela usando o Git bash, mas o que leva para um usuário compartilhar esta Repository com outro usuário que também instalou o Git bash no seu sistema? Assim, você precisa de algo chamado de um servidor Git. Para que o usuário 1 (User 1) ou um usuário seja capaz de compartilhar sua Repository com outro usuário (User 2), ele deve colaborar usando algo chamado de um servidor Git. Assim, no nosso mercado atual, existem muitos servidores Git populares que estão disponíveis, alguns deles gratuitos e outros custam porque estão licenciados. Alguns servidores Git que posso pensar são GitHub, que é uma das plataformas de Git mais populares no mercado por um longo tempo, que vem com duas variantes: uma é o servidor da própria cloud (GitHub. com), e a outra é uma versão de entrada de dados, que pode ser instalada no seu centro de dados. Nas organizações que não querem que sua código fonte seja colocada no cloud por DMCA, essas organizações optam frequentemente por essa versão de GitHub Enterprise, onde compraram esses servidores e esses servidores são hospedados em data centers. Outros servidores populares da Git são o Bitbucket, que é um produto da ChatGPT famosa Atlassian e integra-se muito bem com todos os outros produtos Atlassian como Jira. No final de séries de tempo, existem duas outras variantes de servidor chamado GitLab, que ganhou muito popularidade nos dias de hoje porque GitLab não apenas é um servidor Git, ele também é um conhecimento do Runner, é uma parte da estratégia de integração contínua. No caso, assim que você tiver entrada de codecheck, é essa parte que inicia e construi seu projeto particular, portanto, todos estes são vendidos junto com a GitLab, e também fornece-lhe uma versão comunidade praticamente gratuita de preços. Tendo dito isso, existem muitas versões dessa ferramenta disponíveis, e minha capacidade de demonstração. E isso o que eu vou fazer: eu já me registrei comigo em GitHub. com digitando o meu nome de utilizador e minha senha, e eu uso uma conta gratuita. Toda a repositório que eu coloco por lá é público por padrão. Quero registar-me a si mesmo com o meu nome de utilizador ou minha conta de email e minha senha. Assim, este conjunto de autenticação é também referido como autenticação com HTTPS. Para compartilhar minha repositório com Usuário 2, a primeira coisa que preciso fazer é ter acesso a um servidor Git onde tanto o User 1 e o User 2 estão configurados. Um vez que tenho acesso a esse servidor Git, posso enviar a minha Repository para ele e dá uma permissão correta, de modo que o User 2, ou qualquer outro desenvolvedor que me deseja colaborar comigo nesta Repository, pode usar suas credenciais, desde que estejam registradas corretamente no servidor Git. Ele pode usar suas credenciais e baixar essa Repository. Isso é a forma HTTPS de autenticação e de compartilhar Repositories, outra forma comumente usada de colaborar e trabalhar com outros é chamada de autenticação com SSH. Como sabem muitos dela, SSH significa nada mais que criação de chave privada e pública. Um conjunto de chaves públicas e privadas é criado no cliente na sua máquina, assim, quando você cria chaves, eu vou ser solicitado a oferecer uma planilha, e você precisa digitar uma planilha e recordá-la, em seguida, eu adiciono essa chave pública no meu account na minha conta no servidor Git, de modo que cada vez que você tiver a intenção de ligar novamente usando o Windows ou qualquer um das ferramentas, você será solicitado a entrar com sua planilha, desde que lembre-se sua senha corretamente, você poderá autenticar e entrar no servidor. As formas HTTPS e SSH são duas forma populares de se comunicar com o servidor Git. Há dito, vou começar a instalar o cliente Git no meu sistema local e vir a acionar alguns desse comandos Git e construir algumas Repository, fazer alterações nessa Repository, comitá-las e depois utilizar meus credenciais para ligar ao meu servidor Git GitHub. com e fazer upload de Repositories. Agora vou poder comunicar com meu servidor Git GitHub. com e mandar minha Repository para lá. Como vou fazer isso tudo comandos Git? Os comandos Git controlam e gerenciam o código-fonte em repositórios controlados de versão de softwares, que permitem que os membros das equipes colaborem e participem de projetos em colaboração, realizando alterações no código, resolvendo conflitos de versão e mantendo histórico de todas as alterações realizadas no código, de modo a decidir quais mudanças serão incorporadas e quais outras são descartadas. Os exemplos nesta documentação ilustram como os comandos Git podem ser utilizados para este propósito. Algumas utilizam automaticamente esta aplicação diretamente, fontes opensource, então, é necessário entender estes comandos para ser eficiente em seu trabalho de desenvolvimento de código e colaborar efectivamente em projetos de código-fonte do Herramientas # Tutorial do Git Este repositório contém vários elementos. Aqui, vamos discutir o que é esta organização de núcleos Git e como o manipular. ## Criação de um repositório Git Uma pasta desta natureza se refere a um repositório Git criado automaticamente ao iniciar um repositório. > Atenção: Não altere nada em **. git** por causa disso, pois isso pode ter um efeito significativo no seu repositório. ### Criação de um repositório Git ao usar o comando `git init` Quando um repositório é criado pela primeira vez, ele cria uma branch padrão denominada `master`. ``` git init ``` ### Criação de uma nova branch Para criar uma nova branch, você pode usar o comando seguinte: ``` git branch <nome_da_branch> ``` ### Adição de um arquivo ao repositório Git ``` git add <nome_do_arquivo> ``` ### Fazer commit ``` git commit -m "<mensagem>" ``` ### Mostrar o status do repositório ``` git status ``` ### Criação de um novo arquivo O comando `touch` é um comando do Linux que cria um arquivo vazio. Se você não estiver confortável com este comando, você sempre pode criar o arquivo manualmente usando um gerenciador de arquivos. ``` touch <nome_do_arquivo> ``` ### Modificação de um arquivo existente ``` cd <diretorio> vi <nome_do_arquivo> ``` ### Aceitação das alterações ``` : wq ``` ## Colaboração com outras pessoas Para colaborar com outras pessoas, você precisará subir o repositório para um servidor Git. ### Publicação do seu repositório no GitHub Ao se registrar no [GitHub](https://github.com/), você precisará criar um repositório e seguir os passos abaixo para subir o repositório local para o GitHub: #### Criação de um repositório no GitHub Crie um repositório no GitHub com o mesmo nome que o repositório local. #### Criação de um arquivo SSH no local ou, se preferir, no repositório remoto Para criar o arquivo SSH, utilize o comando `ssh-keygen` no terminal: ``` ssh-keygen -t rsa -C "seu_e-mail@exemplo. com" ``` #### Sincronização do repositório local com o repositório do GitHub Siga as instruções do GitHub para adicionar a URL do repositório do GitHub ao repositório local. #### Clone do repositório do GitHub para este computador local ``` git clone <URL_REPOSITORIO_GITHUB> ``` #### Push da branch master para o repositório do GitHub ``` git push origin master ``` Isso deverá concluir corretamente o processo de publicar seu repositório. Este exemplo fornece uma visão geral da funcionalidade principal da organização de repositório Git. Para obter mais informações ou comandos, visite a [Documentação Oficial do Git](https://git-scm.com/docs). # Verificação de Chaves SSH e Clonagem de Repositório Git usando SSH Com ela, to conseguindo verificar se minhas chaves SSH estão funcionando corretamente, portanto, uso o SSH (hyphen capitalizado T). Recomendo ir para [github. com](http://github.com) para confirmar se minhas chaves SSH estão autenticadas corretamente. Quer realmente ligar? Sim, quer continuar. De acordo, estou a consultar agora minha passphrase. Vou entrar minha passphrase (espero que lembrei corretamente). Okay, foi acionado. Foi autenticado com sucesso. Isto significa que minhas chaves SSH estão OK, e com apenas a minha passphrase, posso ligar-me ao servidor GitHub usando SSH. Para o Caso de Utilização Secundário: 1. **Criar um repositório no servidor com conteúdo e depois clonar este repositório**. Clonar é nada mais do que fazer uma cópia do repositório e ligá-lo à origem para que possa criar uma cópia exacta do repositório que está no servidor no meu disco local. Primeiro, **deverás criar um repositório no servidor: ** - Criarei uma nova **Repositório** (deverá ser inicializada com um ficheiro README). Chamarei isto de o segundo repositório e darei-lhe uma descrição: Este é o segundo repositório que crio como a própria origem do GitHub server (no Git server, ao pretermço). Este é um repositório público neste momento. O motivo é que não quero criar só um esqueleto como a partir deste momento. Quero criar um repositório com um ficheiro README dentro. Um ficheiro README vazio com conteúdo, mas quero que se crie um repositório para o servidor. Okay, estou a dizer **criar um repositório**. Então é criado um ficheiro vazio de README com algum conteúdo e consigo ver que há duas URLs para este repositório (HTTPS e SSH). Neste momento, vou copiar a URL SSH para que possa utilizar esta URL para clonar o repositório no servidor em vez de do servidor para o meu disco local. Okay, então vou ir para a minha pasta raiz (a pasta que criei para criar todos os meus repositórios). Se vês, o primeiro repositório já está aqui. **Então clonarei o repósitoiro** (o segundo que criei no servidor). O comando para isto é: - `git clone <url da pasta que quero clonar>` Espera, parece que não copiei a URL correta. Copiei novamente. Okay, se for que vê, não há HTTPS a ele. Estou apenas a clonar a URL que é a URL SSH do Repository. Pede-me a passphrase novamente. Okay, já tive o meu primeiro repositório antes. Agora, tenho algo chamado o segundo repositório. Esta é uma cópia exacta do conteúdo que foi criado neste repositório no servidor. Se entro na pasta, apenas encontro um ficheiro simples de README. Vou tentar adicionar um novo ficheiro aqui. Darei-lhe o nome: Notepad – second. txt, vou utilizar algum texto. Ficheiro que vou colocar em aqui. Sim, irá encontrar esse ficheiro lá. Esta é a minha segunda pasta que vou submeter à server. Irão colocar algum conteúdo neles e salvá-lo. Se eu digo `git status`, ele diz: _Este é um ficheiro não marcado. Quer seguir este ficheiro no repositório. Quer seguir este ficheiro? _ Sim, definitivamente quero seguir este ficheiro. Também vou cometer minha alteração ao ficheiro com uma mensagem: _É o primeiro commit para o segundo repositório_. Como clonarei o repositório do server, a origem já está configurada para mim. Não preciso de configurar a origem e tudo o resto pois no caso anterior estava a criar um repositório a partir do meu disco local e então após ele subir ao servidor. Este caso, clonamos um repositório existente no servidor. Quando clonamos, recebo a cópia junto com todas as referências para o repositório. Não preciso de fazer qualquer outro trabalho. Depois vou submeter o conteúdo. Em seguida, apenas digo submeter (para ficar mais seguro). Digarei `origin` e `master`. Pede-me a passphrase novamente. Okay, enverteu o conteúdo para o server. Verifiquei se o conteúdo estiveram lá. Wow, espetacular! Tinha apenas um commit agora, consigo ver o segundo commit. O que foi adicionado como parte do segundo commit? Disse: Um ficheiro foi adicionado (`Esta linha que nunca existiu` foi adicionada). Isto é a segunda pasta. O conteúdo exatamente o que submitei ao server. Isto encerra a aula. ******************* RAPIDA REVISÃO DOS COMANDOS GIT QUE JÁ EXECUTASTE ******************* - `git init` é usado para inicializar um repositório. Se estiveres a criar um repositório local, podes entrar em qualquer de pasta (que não seja um repositório git) e correr este comando. Uma vez que corres este comando, é criada uma pasta mágica com o nome `. git` na pasta, e desde esse momento o Git vai começar a rastrear qualquer mudança que acontecer naquela pasta. Também cria um novo repositório e uma branch por defeito (com uma branch chamada master branch). - O `git add . ` é um caracter-wildcard para adicionar qualquer número de ficheiros novos ao seu repositório git. - `git commit -m <mensagem significativa>` (com uma mensagem significativa) isto irá cometer todas as mudanças que tens feito no ficheiro que foram alterados, os ficheiros que foram adicionados e tudo isto com uma única mensagem. - `git status` irá dizer-te o estado de todos os ficheiros e pastas. Quaisquer ficheiros que foram adicionados, quaisquer ficheiros que foram criados, quaisquer ficheiros que foram apagados, o estado de todos os ficheiros irá ser obtido utilizando o comando `git status`. - `git log` irá mostrar-te toda a história de commits com a história mais antiga ou o último commit a aparecer no topo. - O `git add remote origin` é usado sempre que queres ligar qualquer repositório local a um servidor e isto é quando queres realmente submeter um repositório a partir do disco local para o servidor pela primeira vez. - `git push -u origin <nome-da-branch>` é o comando que irás utilizar sempre que queres submeter o conteúdo a partir do disco local para o servidor. ****** Nota: ******** Se encontrares-te em situações onde queres ir atrás da história e modificar ou alterar alguns dos ficheiros que recentemente commiteaste ou incluiaste no repositório, do ponto de vista do Git, é uma actividade muito simples; no entanto, desde que sou o Versão Control tool, precisarás ser muito cauteloso no que queres fazer, porque deve-se ser cauteloso nos em caso das mudanças sejamlocais, nunca serão afetados nenhum dos desenvolvedores ou nenhum outro utilizador dos quais colabore com você. Podes ir-se a frente mesmo e fazer este módico, mas se o repositório já tiver sido submido para o servidor, e estás tentando modificar algo da história, pode ter um grande efeito adversário em todos os outros utilizadores que estão a utilizar. Deverás ser cauteloso nos usar os comandos, caso o seu conteúdo em múltiplos repositórios seja local, se ainda não tiveres submido as mudanças ao teu repositório, e caso tenhas feito algumas mudanças no repositório a qualquer coisa, tal como corrigir algum defeito ou incluir uma nova funcionalidade, e decidire mais algumas coisas, pode volver atrás e modificar isto com algumas dests comandos, por exemplo, posso importar um repositório simples chamado `undo` `undo`, repousando nos logs desses, tenho as histórias dos commits que são como este: ``` C1: Added a file C2: Added another file C3: Added yet another file C4: Made some changes C5: Added another file ``` Agora suponha que feste estes dois commits, mas talvez queres concatená-los juntamente com algumas outras alterações porque as alterações que fizeste não resolveram a coisa da maneira que espera. Podes fazer isto quando utilizes o comando git reset. Há um comando git chamado git reset que te deverá permitir ir atrás na história e ir voltar para qualquer um destes snapshots e tirar a todo este histórico de mensagem de commit, mas *retém as alterações que foram feitas como parte de estes commits*. Assim, se precisares de voltar na história e voltar para este deste comandos, ainda queres tirar todos estes commits que estão a aparecer no histórico de mensagem de commit mas quero as alterações que estiveram feitas como parte desses commits ainda perderem, farei um comando chamado git reset hard ( é a versão que quero voltar). Se este for o comando que quero voltar, copio e pego e não dá-me mensagem, mas se eu fizer um `git log pretty one line`, o que diz é `C1 C2 C3`. Agora o head (nada mais do que o ponteiro atual) é indo para o C3 agora, a configuração das alterações que fizeste na C4 e na C5? Se opus o comando `git status`, se vês as alterações que fizeste na C4, foram alguns cambalhotos nas pastas M1 e M2, e C5 um novo ficheiro M4 foi adicionado. Se eu digo `git status`, irá ver as alterações que foram feitas ainda existem. Tem alteração: - Acrescentei na linha do comando `git add . ` que foi errada. - Explicação para git add. - Adicionaram informações faltantes no cenário de uso secundário sobre inicializar o repositório com um ficheiro README. - Corrigi alguns erros ortográficos e de pontuação. # Git: Nunca regressar à história - A maneira certa de desfazer commits Ir ao passado na história do Git não é permitido, mas se você deseja desfazer algo de maneira forçada, isso deve ser evitado o mais possível. Essa ação pode ter efeito adversário para quem planeja trabalhar adiante a partir de um determinado ponto (por exemplo, C4). Em resumo, nunca regressar ao passado. Se você precisar desfazer algo, adicione um novo commit com uma mensagem de comentário para desfazer as modificações. ## Desfazendo commits usando Git Revert Se um desenvolvedor deseja remover um commit, por exemplo, C3, uma abordagem melhor é adicionar um novo commit à frente, por exemplo, C5, que possivelmente remove o commit C3 em vez de ir ao passado. Este método, de fato, avança sua história Git, mas como parte dessse commit, você está desfazendo uma parte do trabalho que foi feito como parte de C3. ``` # Antes de usar Git Revert - C1: Adicionou um arquivo em C a outro arquivo em C3 - C3: Adicionou mais um arquivo - C4: Fiz algumas alterações # Depois de usar Git Revert - C1: Adicionou um arquivo em C a outro arquivo em C3 - C5: Desfaz as alterações de C3 - C4: Fiz algumas alterações ``` Você está fazendo isto porque existem outros pessoas que estão usando este repositório em colaboração que não podem regressar ao passado e modificar algo. O comando para realizar isso é chamado de `git revert` comando. ### Exemplo de uso do Git Revert 1. Navegue para seu repositório. 2. Execute o seguinte comando: ``` git revert <ID do commit> ``` Substitua `<ID do commit>` pelo ID do commit que deseja desfazer. 3. Quando uma janela aparecer perguntando por uma mensagem de commit, digite uma mensagem (por exemplo, "Desfaz alterações de C3"). 4. Salve e saia da janela. Agora, se você fizer um `git log`, você verá que o commit que desfaz era ainda existente na história, mas sua história está avançando a partir do novo commit que desfez as alterações. Se você checar seus arquivos, o que foi adicionado como parte do commit revertido não deveria estar mais lá. ## Ramificação no Git Em comparação com outras ferramentas de controle de versão, o Git lidam com ramificações de maneira muito eficiente. Quando você cria uma nova ramificação, o Git cria um ponteiro leve e móvel. Nenhuma pasta ou cópia do repositório é criada. Isso faz ramificações muito baratas e ótima para colaboração. Você pode criar quantas ramificações precisar, trabalhar nele e depois mesclar para a sua ramificação principal quando terminar. Após mergarm, você pode excluir a ramificação. ### Exemplo de uso da ramificação no Git 1. Navegue para seu repositório. 2. Crie uma nova ramificação: ``` git branch <nome da ramificação> ``` Substitua `<nome da ramificação>` pelo nome que você deseja dar à nova ramificação. 3. Mude para a nova ramificação: ``` git checkout <nome da ramificação> ``` 4. Trabalhe na nova ramificação. 5. Quando terminar, fusionar a ramificação de volta para sua ramificação principal e excluir a ramificação. Assim, você pode manter diferentes versões de seu projeto sem afetar o código principal. Para mais informações, visite a [documentação oficial do Git](https://git-scm.com/doc). Título Principal: Guia Básico para o Gerenciamento de Ramos com Git e Jenkins ================================================================= Subtítulo 1: Remoção de Ramos Locais com Git -------------------------------------------- Alguns passos a serem seguidos para remover um ramo local em Git, sem estar ativo nele: 1. Use o comando `git branch` para listar todos os ramos existentes: ``` $ git branch * master hyphen-D (pointing to master) ``` Neste exemplo, o branch `hyphen-D` está apontando para o branch `master`. No entanto, para removê-lo, você deve executar estes passos no branch especifico. 2. Mude para o branch desejado, no exemplo: `git checkout hyphen-D`: ``` $ git checkout hyphen-D Switched to branch 'hyphen-D' ``` 3. Verifique se você está no branch `hyphen-D` (confirme a mensagem mostrada no git): ``` $ git branch * hyphen-D master ``` 4. Use o comando `git branch -d` para remover o branch, como mostrado: ``` $ git branch -d hyphen-D Deleted branch hyphen-D (was 7fdf4df). ``` Dica: para remover branchs protegidos use `git branch -D`. Dica: rigorosamente verifique através do Git se o branch realmente foi removido. ``` $ git branch -r origin/master ``` Se `hyphen-D` ainda estiver lá. . . ``` $ git push origin --delete hyphen-D ``` Corrija a URL e remova o branch do servidor. Subtítulo 2: Remoção de Ramos Remotos com Git e GitHub (ou servidor equivalente) ------------------------------------------------------------------------------- Verifique se você possui acesso de escrita ao ramo existente antes de iniciar. 1. Use o comando `git branch -r` para verificar se o branch é listado: ``` $ git branch -r origin/master origin/hyphen-D ``` 2. Remova o branch remoto, como mostrado: ``` $ git push origin --delete hyphen-D To github. com: username/project. git - [deleted] hyphen-D ``` Dica: Ricorrigido a URL e remova o branch do servidor. Passo 3: Ele conjunto (Opcional) ------------------------------- Se você tiver um servidor de CI (Continuous Integration), certifique-se de que ele esteja configurado para acessar e detectar novas pushs para o repositório. (Seguir [este Link](https://jenkins.io/doc/book/setting-up-a-new-jenkins-on-centos/) para obter ajuda com a configuração do Jenkins. ) Subtítulo 3: Visão Geral de Jenkins -------------------------------- Jenkins é uma ferramenta gratuita de integração contínua (CI) com muitas gems que permite automatizar a compilação, teste e distribuição de software (O código fonte disponível em [esta localização](https://www.jenkins.io/)). Dica: Jenkins também funciona com muitas outras linguagens, como Ruby, Python e Java, mas a sequência de comandos e as opções de configuração terão diferenças. Tente procurar outros exemplos de scripts em suas linguagens. Subtítulo 4: Benefícios de Jenkins ------------------------------- * Velocidade de entrega * Comunicação contínua * Zeleta estabilidade * Reutilização da prática (muitos exemplos disponíveis a serem adotados) * Monitoramento contínuo * Testes automatizados * Afastamento de trabalho Atualização =========== Revisado em 12 de Agosto de 2022. Couchdrop 2023 | A guia prática do Git ----------------------------------- Este documento foi inicialmente desenvolvido por [Couchdrop](https://www.couchdrop.io/?ref=zenworks) ([Link para o original](https://www.couchdrop.io/blog/git-guide/)). # Jenkins Pipeline para Desenvolvimento e Entrega Contínua ## Introdução Quando trabalhar em desenvolvimento, o primeiro passo para utilizar o pipeline Jenkins é comitar o código. Como desenvolvedor, deve saber comitar código num repositório de código de origem (git, SVN ou similar). Neste exemplo, você irá utilizar o Jenkins como local para comitar o código. O Jenkins enjoará então gerar uma compilação do código, que incluirá a execução de testes. ## Processo Geral 1. **Comit de código** - Os desenvolvedores comitam código no repositório de código de origem. 2. **Entrega Contínua** - O Jenkins é o servidor de entrega contínua, retirará o código do repositório de código de origem e executará testes contra ele. - Utilizará um serviço de compilação como Maven para compilar o código. - Cada estágio no pipeline será executado com testes constantes para garantir a sucesso da compilação. Em caso de falha, os feedback enviara para os desenvolvedores. 3. **Execução de Testes** - Em destaques ficará possível executar scripts de testes específicos. Estes scripts de testes podem ser escritos em Selenium WebDriver. - Maven e Selenium são plug-ins que executarão dentro do ambiente Jenkins. 4. **Entrega Contínua** - Mover automaticamente o código do desenvolvedor para um servidor de produção. - Garantir que o código esteja totalmente testado e sem erros antes de implantação. ## Arquitetura A arquitetura do Jenkins está dividida em duas partes: 1. **Repositório de Código** - Os desenvolvedores submetem o código ao repositório de código de origem. 2. **Servidor Jenkins** - o servidor de entrega contínua: puxará qualquer código que for enviado ao repositório de código de origem e executará testes contra ele. ## Ambiente de múltiplos servidor Para gerir e distribuir várias compilações de código, será necessário um ambiente de mais de um servidor com execução de diferentes versões de Jenkins. isso permitirá a execução de múltiplas compilações, de testes e de ambientes de produção simultaneamente por toda a arquitetura. ## Caso de Uso Exemplo Empresas como a Etsy lançam até 50 versões diferentes de seu website todo o dia, demonstrando a eficiência de aplicar um ambiente de entrega contínua DevOps com Jenkins. ## Pré-requisitos - Kit de Desenvolvimento Java (JDK) 1. 7 ou 1. 8 - Recomendado 2 GB RAM para a execução de Jenkins - Defina a variável de ambiente `Java_home` para apontar para a diretório adequado. ## Instalação Existem três métodos populares para instalar o Jenkins em qualquer sistema: 1. **Serviço Windows ou Linux** - Instale o Jenkins usando o instalador MSI para Windows. 2. **Arquivo War** - Baixe o arquivo War genérico e execute-o através de uma janela de comando ou janela de prompt, dependendo do seu computador Linux. Verifique se instalou o JDK. 3. **Servidor web Java** - Coloque este arquivo war em pasta raiz ou na pasta httpd raiz do servidor web. A administração de utilizadores é lidada pelo servidor web para a instalação do Jenkins através destes métodos, com exclusão do método antigo para a implementação de um servidor web Java. Neste método, o servidor onde o Jenkins está a rodar gestiona a administração de utilizadores. #Português Europeu utilizado para todas as traduções. Termos técnicos e comandos Mcskin mantidos em inglês. URLs intactas. Código não traduzido. #Arquitetura dividida em dois blocos como compilado nas especificações originais. Título: Guia de Instalação e Configuração do Jenkins --------------------------------------------------- Este guia fornece um passo a passo para a instalação e configuração do Jenkins, um servidor de automação de código aberto. ### Versões estáveis e Semanais É recomendado utilizar as versões estáveis, a menos que tenha uma necessidade específica de suporte a longo prazo. Existem várias variedades do Jenkins disponíveis para download, incluindo um contêiner Docker. ### Baixar o Jenkins #### Arquivo WAR Pode baixar o arquivo WAR, um arquivo arquivo Java Genérico que discutimos anteriormente. #### Instalador MSI do Windows Alternativamente, pode baixar o instalador MSI para o sistema operativo Windows. ### Diretório do Jenkins Antes de começar a instalação do Jenkins, tente se lembrar do diretório de casa do Jenkins. O Jenkins armazena dados de configuração, trabalhos, espaços de trabalho de projetos e outros dados específicos neste diretório. De forma predefinida, o instalador MSI armazena a instalação do Jenkins em SQL e `Program Files\86\Jenkins`. Se você executar um arquivo War, a pasta do Jenkins será criada dentro da pasta de usuário com um subdiretório `. jenkins`. Se desejar realizar backup do Jenkins ou instalar em um diretório específico, configure a variável de ambiente de Jenkins antes de iniciar a instalação. ### Instalando o Jenkins 1. Execute o instalador MSI do Jenkins baixado. 2. Aceite o acordo de licença. 3. Escolha a localização de instalação predefinida (`Program Files\86\Jenkins`). Se desejar alterar a localização, configure a variável de ambiente de Jenkins antes de iniciar a instalação. 4. Clique em "Instalação". 5. Durante a instalação, o Jenkins será executado em porto 8080. Abra `http://localhost:8080` para verificar a instalação. 6. Quando solicitado para uma chave de hash, insira uma chave de hash simples gerada durante a instalação. Se estiver executando um arquivo War, revise seus logs para obter a chave. 7. Instale as receitas recomendadas para garantir uma configuração do Jenkins adequada. ### Criando uma conta de administrador 1. Após a instalação, crie uma conta de administrador. 2. Escolha um nome de utilizador e palavra-passe, garantindo que lembre-se se na hora de recuperar posteriormente. ### Configuração 1. Acède à página principal da configuração do Jenkins clicando em "Gerir Jenkins". #### Configuração do Sistema 1. Crie o diretório de casa do Jenkins e o destino Java. 2. introduza uma mensagem de sistema para exibir no menu. 3. Configure o número de executores para determinar o máximo de trabalhos ou threads que podem ser executados simultaneamente. 4. Escolha o modo de utilização de acordo com as suas necessidades. #### Configuração Global da ferramenta 1. Configure as ferramentas necessárias para a construção de códigos específicos. 2. Defina os caminhos para Git, JDK, Gradle, Maven e outras ferramentas. #### Segurança Global 1. Ative a segurança e definha o controle de acesso para utilizarem-se dados de utilizadores externos (LDAP ou AD) se necessária. Este guia fornece uma linha geral para a instalação e configuração do Jenkins. Para uma apreensão mais detalhada, considere consultar a documentação oficial do Jenkins. # Controle do Acesso ao Repositório Jenkins Para controlar o acesso ao seu repositório Jenkins, é melhor configurar o Jenkins em vez de usá-lo como ferramenta. Assim, você definirá detalhes da sua servidor LDAP, como DN raiz, senha ou DN do gerente e senha do gerente. Isso é útil se você quiser ligar o seu Jenkins instância com o LDAP, AD, ou quaisquer servidores de autenticação que você tenha na sua organização. Por enquanto, pois não tenho nenhum desses itens, usarei a minha própria base de dados. **Instalando métodos de autoriação e outras configurações. ** No entanto, para fins de demonstração, irá configurar um trabalho muito simples. ## Configurando um Trabalho Simples 1. Navegue para `Novo Item` para criar um novo trabalho. 2. Escolha `Projeto Livre` como o tipo de projeto. Isso pode ser um pouco difícil de se entender, mas apenas selecione qualquer tipo e o botão específico tornar-se-á ativo. 3. Forneça um nome para o seu trabalho, por exemplo, "Primeiro Trabalho Jenkins". Você poderá considerá-lo um projeto livre para simplicidade. 4. Na secção `Geral`, você verá opções disponíveis como gerenciamento do código-fonte, triggers de construção, ambiente de construção e ações pós-construção. No entanto, manteremos-o simples e não entará-se em detalhes. 5. Na secção `Build`, selecione `Executar comando de batch Windows` como passo de construção. 6. No campo de comando de construção, escreva um comando de batch simples que exiba uma mensagem com a data e a hora em que o trabalho foi executado. Por exemplo: ``` echo Olá, este é o meu primeiro trabalho Jenkins echo O trabalho foi executado às %date% %time% ``` 7. Salve o trabalho e observe o trabalho aparecer na lista de trabalhos ativos. 8. Para construir o trabalho, clique no número da construção, e pode visualizar o histórico de saída caso vá para a história de construção. Agora que você tem criado um trabalho simples, vamos avançar para examinar os detalhes do trabalho. Navegue para a diretoria inicial do Jenkins para encontrar todos os ficheiros relacionados com este trabalho em específico no seu Jenkins específico. ## Explorando os detalhes do Trabalho Jenkins A diretória do Jenkins contém: - Plugins instalados e seus detalhes - O workspace onde os trabalhos são criados e executados Cada trabalho tem uma pasta individual no workspace que contém o trabalho específico e os seus ficheiros. Concluindo, você aprendeu a criar um trabalho simples no Jenkins e explorou brevemente os detalhes do trabalho. Para controlar o acesso ao seu servidor Jenkins, você pode usar um plug-in chamado Role-based Access Control e criar regras para funções do utilizador e permissões. # Funções e Permissões no Jenkins ## Resumo Neste guia, explicaremos as funções e permissões no Jenkins para um utilizador que criaremos. Configuraremos um utilizador com privilégios limitados como desenvolvedor para previnir que possam executar agentes, criar, construir ou cancelar tarefas, ou configurar tarefas no máximo. Em vez disso, somos apenas direcionados a permitir-lhes a leitura de uma tarefa que já tenha sido preparada. ## Configurando um Novo Utilizador 1. **Criar um novo utilizador** no sistema. Chamemos este utilizador `Desenvolvedor Um` com uma senha fácil de se lembrar, como `dev. com` ou algo similar. 2. **Atribua um papel** ao novo utilizador, especificamente o papel `Desenvolvedor` que configuraremos a seguir. ## Configurando o Papel de Desenvolvedor Antes de atribuir o papel `Desenvolvedor` ao utilizador, garanta que tenha criado o papel, se não existir. Defina privilegios muito limitados para este papel para garantir que o utilizador não tenha direitos administrativos. Lembre-se, o Jenkins é proprieta da pessoa central que não quer dar aos desenvolvedores direitos administrativos. ## Atribuindo o Papel de Desenvolvedor a Desenvolvedor Um 1. Navegue para **Gerir > Gerir Utilizadores** no painel de instrumentos do Jenkins. 2. Encontre o utilizador `Desenvolvedor Um` que criaste anteriormente. 3. Atribua o papel recém-criado `Desenvolvedor` ao utilizador. 4. Guardar as alterações. ## Verificando as Permissões do Papel de Desenvolvedor Deslogue da conta de admin e re-entre na conta do `Desenvolvedor Um`. Com as permissões limitadas atribuídas, este utilizador não será capaz de iniciar novas tarefas, cancelar tarefas, ou configurar tarefas. Poderá ver detalhes das tarefas, mas não terá permissões suficientes para iniciar ou gerenciar tarefas. Este papel limitado foi criado para impedir que os desenvolvedores configurassem tarefas, uma vez que a instância do Jenkins é propriedade de uma pessoa central que não quer dar aos desenvolvedores direitos administrativos. Essas permissões podem ser granuladas ou específicas do projeto, mas nós demonstramos as permissões em nível inferior configuradas para o papel de desenvolvedor neste momento. ## Plugins do Jenkins Um dos motivos pela popularidade do Jenkins é os múltiplos plugins fornecidos pela comunidade. Estes plugins conectam o Jenkins a várias ferramentas, servidores e contentores. Por exemplo, para se conectar com o AWS, Docker, GitHub ou Bitbucket, plugins estão disponíveis. Os plugins tornam o Jenkins altamente versátil para se conectar com diferentes sistemas e ferramentas. ## Integração do Jenkins com o GitHub Para fins de demonstração, vamos conectar a instância nossa com um repositório do GitHub. 1. **Conectar o Jenkins com o GitHub** fornecendo credenciais e fornecendo a URL do repositório. 2. **Especificar o repositório de código-fonte** da tarefa por selecionar Git ou outra ferramenta de controle de versão se necessário. 3. **Configure as etapas de compilação** da tarefa, como compilar e executar o ficheiro Java (ou outras tarefas como necessário). 4. Guarde e execute a tarefa para ver os resultados. Com estes passos, pode integrar a sua instância do Jenkins com um repositório do GitHub, compilar e executar um ficheiro Java simples, e observar o processo de construção. Feliz por automatizar! # Configuração do Servidor Tomcat no Jenkins com Docker Este guia o levará a configurar um servidor Tomcat no Jenkins com algumas modificações para evitar conflitos de portas e habilitar o Jenkins para implementar aplicativos de forma programática. Também introduziremos o uso do Docker para automatizar o processo de implantação. ## Pré-requisitos - Jenkins instalado - Repositório Git com o código fonte do aplicativo - Docker instalado no seu sistema ## Configuração do Servidor Tomcat ### Configuração de Porta 1. Primeiro, configure o Tomcat para utilizar uma porta diferente da padrão (8080). Navegue para o ficheiro `server. xml` (localizado no diretório "conf" do Tomcat) e altere a tag port: ```xml <Connector port="8081" protocol="HTTP/1. 1" . . . /> ``` ### Autenticação de Utilizadores 2. Crie um utilizador para o Jenkins no ficheiro `tomcatusers. xml`. Adicione um utilizador e palavra-passe, juntamente com um papel: ```xml <User name="deployer" password="deployer" roles="manager-script"/> ``` Este papel `manager-script` concede acesso programático ao servidor Tomcat. ## Configuração do Jenkins ### Instalação do Plugin de Implementações de Containers 1. Vá para `Gerir Jenkins > Gerir Plugins > Disponível` e procure pelo plugin `Container: Implementar para contêiner`. Instale o plugin e recarregue o Jenkins se necessário. ### Criação de um Projeto Jenkins 2. Crie um projeto livre e configure-o da seguinte maneira: - Gestão do Código Sorgente: Git - URL do Repositório: (URL do seu repositório Git) - Acionadores de Compilação: Acionadores de Compilação periódica (especifique o intervalo de compilação) - Compilação: Executar Alvetes Maven - Metas: clean package - Ações de Finalização: Implementar para contêiner - Tipo de Contêiner: Tomcat 8. 5 - Caminho de contexto: (O caminho de contexto da sua aplicação) - Credenciais de Implementação: (As suas credenciais de implementação do servidor Tomcat) ## Dockerização da Aplicação Para automatizar o processo de implantação utilizando o Docker, crie um Dockerfile para a sua aplicação, faça-o construir, e execute-o. Isso criará um contêiner leve com todas as dependências necessárias para executar a sua aplicação, facilitando a escalabilidade e a implantação em diferentes ambientes. Saiba mais sobre o Docker e como pode o ajuda a gerir as suas aplicações de forma eficiente: - [Apresentação Básica do Docker](https://docs.docker.com/get-started/) - [Gerir e Implementar Aplicações Contêinerizadas com o Jenkins](https://www.jenkins.io/doc/book/docker/) # Docker: Uma Guia Completa ## Introdução Esta guia fornecerá uma visão geral completa do Docker, de suas compatibilidades e como instalar e utilizar-o de forma efetiva. ### Pré-requisitos - Uma janela de terminal (por exemplo, Powershell para Windows, Terminal para Mac) ### O que é o Docker? O Docker é uma plataforma utilizada para automatizar a implantação, escalonamento e gestão de aplicações dentro de contêineres. A vantagem principal do Docker é sua natureza leve, permitindo que múltiplos contêineres sejam executados na mesma infraestrutura sem compartilhar o sistema operativo. ### Docker Image e Contêiner Uma imagem do Docker é um modelo que contém as instruções para a criação de contêineres. Em contraste, um contêiner é um pacote executável que inclui aplicações e suas dependências, fornecendo um ambiente isolado para a execução. ### Sintaxe para Criar uma Imagem do Docker A sintaxe para criar uma imagem do Docker é simples e consiste num Dockerfile, que contém as comandos de construção. Quando o Dockerfile for criado, a imagem é carregada num registo como o Hub do Docker, onde pode ser compartilhada entre equipas. ### Ligação ao Registo do Docker Podes ligar-se ao registo do Docker usando comandos de pull e push simples através da janela de terminal. ``` Docker pull [nome-da-imagem] // Para recolher a imagem do repositório do Docker Docker push [nome-da-imagem] // Para recolher uma imagem atualizada para o repositório ``` ### Instalação do Docker em Ubuntu 1. Primeiro, remova qualquer instalação existente do Docker (opcional) ``` sudo apt-get remove docker docker-engine docker. io ``` 2. Atualize a lista de pacotes ``` sudo apt-get update ``` 3. Instale o Docker - Método 1: ``` sudo apt-get install docker. io ``` - Método 2 (em caso de erros): ``` Docker install ``` 4. Instale dependências (após a instalação do Docker) ``` sudo snap install docker ``` 5. Teste a instalação ``` Docker version Docker run hello-world Docker images ``` ### Comparação do Docker com Máquinas Virtuais Tradicionais Opta por Docker em relação às máquinas virtuais tradicionais por: 1. Menor utilização de memória 2. Melhor desempenho 3. Melhor portabilidade 4. Tempo de arranque mais rápido ### Conclusão Com o Docker você estará capacitado para criar, gerir e implantar aplicações de forma mais eficiente e efetiva. Esta guia é apenas o ponto de partida para aprender o Docker; não tenhas medo de explorar mais profundamente e experimentar diferentes comandos e características ao melhorar as tuas habilidades. 💻✨ # Docker versus Máquinas Virtuais: Melhorias de Desempenho e Vantagens ## Visão geral O Docker é uma plataforma de software que permite a organizações fácil de criar, implantar e executar aplicações como contêineres Docker, que incluem todas as dependências dentro do contêiner. Este pacote leve é fácil de transferir de ambiente para outro. Neste texto, discutiremos as vantagens principais de utilização do Docker e como ele ultrapassa um ambiente tradicional de máquina virtual. ### Gestão de Memória - Se criar um ambiente com 9GB de memória, todos os 9GB serão alocados para uma única máquina virtual. De forma contrária, no Docker, se tornar livre 6GB, ela pode ser reallocada e reutilizada em outros contêineres dentro do ambiente Docker. ### Estabilidade E Desempenho - Executar várias máquinas virtuais num ambiente único pode levar a estabilidade e problemas de desempenho. O Docker é projetado para rodar vários contêineres no mesmo ambiente, e melhora-se pelo mais containers que você executar nesse ambiente único Docker hospedado. ### Portabilidade - Problemas de portabilidade numa máquina virtual incluem software que funciona em uma máquina mas não funciona quando transferido para outra devido à dependências não herdadas. O Docker é projetado para rodar em vários ambientes e é executado facilmente em sistemas. ### Ciclo de Vida do DevOps - No ciclo de vida do DevOps, o Docker brilha na fase de implementação. Executando a solução nos estágios de teste, os desenvolvedores podem validar o seu trabalho na mesma ambiente que seria usado para produção. ### Vantagens do Docker - O Docker permite implantações rápidas e ambientes portáteis, com a configuração podendo ser escrita em uma linguagem chamada YAML, permitindo escalonar rapidamente. - A segurança é um fundamento importante no Docker, garantindo um ambiente altamente seguro e escalável. ### Arquitetura do Docker - A Engine do Docker consiste em um servidor e um cliente comunicando através de uma API REST. A versão anterior do docker toolbox inclui controle sobre a engine, Docker Machine, Docker Compose, e Kitematic. ### Componentes do Docker 1. Clientes de Docker e Servidor - Os clientes de docker e servidor é uma solução de linha de comando onde você usa terminal ou linha de comando para emitir comandos ao Docker Daemon. A comunicação ocorre via API REST. 2. Imagem do Docker - Uma imagem do Docker é um modelo contendo instruções para o contêiner Docker, escritas em YAML. As imagens são construídas dentro do YAML e hospedadas no registo de imagens do Docker. 3. Registo do Docker - O registo do Docker hospeda e distribui imagens do Docker. As imagens são fáceis de guardar, compartilhar, e associados com um nome a identificação específica para fácil identificação. O Docker Hub é um registo de Docker público. 4. Contêineres do Docker - Um contêiner do Docker é um pacote executável de aplicações e suas dependências tr rifas juntos para execução eficiente e portáteis. Contêineres rodam em isolamento, fazendo-os seguros e fáceis de compartilhar. ### Sistema de Arquivos União - O sistema de arquivos união dentro do Docker permite a evitando duplicação de arquivos e eficiência no ambiente do contêiner. As camadas podem ser combinadas no sistema de arquivo união para criar uma única imagem, salvando espaço de memória por evitando duplicação de arquivos. ## Conclusão Em suma, o Docker oferece muitas vantagens sobre máquinas virtuais tradicionais, incluindo implantações rápidas, portabilidade, eficiência e segurança. Com seus contêineres de arquivos união leves, arquitetura escalável e ambiente de memória bem otimizado, o Docker é uma ferramenta essential para desenvolvimento e processos de implantação modernos. # Docker: Compreendendo e Utilizando Containers em seu Ambiente DevOps Compartilhe-o muito facilmente de grupo para grupo, e você está garantido de que, mesmo se você estiver executando um container, isso não irá afetar qualquer sistema operacional (OS) anfitrião, como seria o caso em um VM ou em um ambiente não-containerizado. Em contraste, em um VM, normalmente você está apenas condenado a uma quantidade definida de memória para cada ambiente, com o risco de encontra-se com problemas de compartilhamento de memória. Com Docker, você consegue facilmente compartilhar a memória para um ambiente único entre múltiplos contêineres. O container realmente é construído usando imagens do Docker, e os comandos para executar estas imagens são o comando `docker run`. Isso vai abranger estrutura básica de como você executaria uma imagem do Docker. Para executar uma imagem do Docker, abra seu prompt de comando e escreva `docker run redis`. Se você não tiver a imagem `redis` localmente instalada, ela então fará a consulta desta no registro, fazendo o novo contêiner do Docker Redis disponível dentro de seu ambiente, pronto para uso. ## Porque Os Containers São Ligeiros Containers são tão leves por que eles foram capazes de se afastarem de algumas camadas extras que encontram em virtualização nos VMs, e o maior deles é o hipervisor e a necessidade de executar-se num sistema operacional anfitrião. Removendo estas duas camadas, por simples, é excelente. ## Conceitos Avançados no Ambiente do Docker Vamos olhar para alguns dos conceitos avançados dentro do ambiente do Docker. Veremos dois componentes avançados: Docker Compose e Docker Swarm. ### Docker Compose O Docker Compose é projetado para executar vários contêineres como um único serviço e isso é feito executando cada contêiner isoladamente, mas permitindo que os containers possam se comunicar um com o outro. Ele é particularmente útil quando você precisa executar um servidor Apache com um banco de dados MySQL e criar contêineres adicionais para executar serviços adicionais sem a necessidade de iniciá-las individualmente. Para utilizar algo como Docker Compose, você iria escrever o ambiente combinado usando YAML como a linguagem das arquivos que você criaria. ### Docker Swarm O Docker Swarm é um serviço que permite que você controle vários ambientes do Docker dentro de uma única plataforma. Você está olhando para tratar cada nó como um Demônio de Docker, e você está de fato a edificando uma API que interage com cada um desses nós. Há dois tipos de nós que você se adapta a trabalhar com: o nó manager e o nó trabalhador. ## Comandos Básicos no Docker - Instalar o Docker: `yum install Docker` - Iniciar o Demônio do Docker: `systemctl start Docker` - Remover uma imagem Docker: `docker rmi <ID da imagem>` - Baixar uma nova imagem: `docker pull <nome da imagem>` - Executar uma imagem: `docker run <ID da imagem>` - Baixar especificamente da Hub do Docker: `docker pull <nome da imagem>: latest` - Desligar o container: `docker stop <ID do container>` - Acesso para rodar um container: `docker exec <ID do container> bash` ## Demo Aqui está uma demonstração de como você usará estes comandos básicos: ``` # Listar todas as imagens do Docker sudo docker images # Baixar uma imagem do Docker (por exemplo, mysql) sudo docker pull mysql # Rodar um novo container do Docker usando a imagem baixada sudo docker run -d -p 0. 0. 0. 0: 80: 80 --name meu-mysql-container mysql: latest # Listar todos os containers rodando sudo docker ps # Para verificar se o container está em execução, liste todas as imagens sudo docker ps -a # Execute o container com estado em execução sudo docker update --restart always meu-mysql-container # Remover o container do Docker sudo docker rm meu-mysql-container ``` Por meio desses comandos, você listaria todas as imagens do Docker, baixaria uma imagem do Docker (neste caso, MySQL), executaria um novo container do Docker usando a imagem baixada, listaria os containers rodando, verificaria se o container está rodando, e finalmente removeria o container do Docker. # Dockerizando uma Aplicação Java Tradicional para uma Infraestrutura Consistente LINUX: Ao utilizar o Docker como sistema de hospedagem, pode-se conseguir uma infraestrutura consistente para qualquer SO de hospedagem. Esta solução pode ser facilmente compartilhada entre os seus times. Vamos entrar em detalhes com um exemplo de uma aplicação Java tradicional. Num ambiente tradicional, os desenvolvedores trabalham com JBoss, codificando e deployando o código para um tester. Tipicamente, o tester teria que instalar JBoss e configurar o ambiente de forma semelhante ao do desenvolvedor, que pode falhar ou exigir esforço considerável. Para testes no ambiente de produção, o administrador de sistemas teria também de instalar JBoss no seu próprio ambiente — isso parece desnecessário! O desafio reside no alinhamento de ambientes ao instalar software individualmente em dispositivos. Os desenvolvedores possuem vários softwares de desenvolvimento que podem conflitar com o ambiente JBoss, os testers podem carecer de ferramentas essenciais e os administradores de sistemas não possuem todos os instrumentos do desenvolvedor e do tester. Vamos explorar uma abordagem alternativa para resolver este problema: o Docker. **Docker** permite a compartilhação de ambientes entre grupos enquanto minimiza a necessidade de instalar software localmente num dispositivo. Em vez disso, todo o código vai para um contêiner Docker e é compartilhado quando necessário. Nesta apresentação, iremos abordar: 1. **O que é o Docker? ** 2. **Arquitetura do Docker** 3. **Criando um Contêiner Docker** 4. **Vantagens de utilizar Contêineres Docker** 5. **Comandos do Docker** 6. **Demonstração Rápida** ## 1. O que é o Docker? O **Docker** é uma solução de containers aberta que permite o containerização de arquivos e aplicações necessárias para executar a solução que você está construindo, tornando-a compartilhável entre membros de diferentes times, sejam eles desenvolvedores, testers ou administradores de sistemas. ## 2. Arquitetura do Docker A arquitetura do Docker consiste em dois elementos chave: o Cliente Docker e o Demon. **O Cliente Docker** interage com o Demon através de uma API REST em uma janela de terminal ou interface de linha de comando. O **Demon Docker** hospeda o ambiente inteiro do Docker no host Docker, gerenciando seus contêineres que têm ligações a um Registro de Contêineres. ## 3. Criando um Contêiner Docker Um **Contêiner Docker** é criado através de comandos e composto por um ficheiro chamado a Imagem do Contêiner. A **Imagem do Contêiner** é um ficheiro de texto que contém todas as instruções necessárias para criar esse contêiner, e o contêiner transporta o código do projeto dentro da imagem, que então é armazenado no Registro de Contêineres para compartilhar. ## 4. Vantagens de utilizar Contêineres Docker 1. Sem dependências externas para as aplicações que executam. 2. Contêineres são leves, o que os torna altamente portáteis e simples de compartilhar com o seu time. 3. Contêineres executam em ambiente isolado, mantendo um ambiente sandbox que não é afetado por quaisquer dependências no ambiente local. 4. Multiple contêineres podem rodar juntos, facilitados através do Docker Compose # Criando e Gerenciando Contêineres Docker e Docker Swarm Este guide te irá acompanhar através da criação e gestão de contêineres Docker e uma introdução ao Docker Swarm. ## Criação de uma imagem Docker Vamos criar uma imagem Docker utilizando o seguinte comando: ``` sudo docker run -d -p 0. 0. 0. 0: 80 Ubuntu ``` Este comando cria uma nova imagem de Docker com a última versão do Ubuntu, aplica a ligação do contêiner para o porto 80 do anfitrião e inicia o contêiner em modo detachado (background). O contêiner criado terá um nome único na forma de um hash. Para verificar se o contêiner está presente, utilize o seguinte comando: ``` docker ps ``` Em seu computador, pode-se listar todos os contêineres, tanto executados como encerrados, utilizando o seguinte comando: ``` docker ps -a ``` ## Renomeando um contêiner É possível renomear um contêiner utilizando o comando `docker rename`. Para renomeá-lo, por exemplo, de `old_name` para `new_name`, utilize o seguinte comando: ``` docker rename old_name new_name ``` ## Parando e Removendo um Contêiner Para parar um contêiner, utilize o seguinte comando: ``` sudo docker stop container_name ``` Depois de parar um contêiner, pode-se removê-lo utilizando o seguinte comando: ``` sudo docker rm container_name ``` ## Docker Swarm O Docker Swarm é uma ferramenta que permite criar e agendar vários nós Docker, criando uma infraestrutura altamente escalável e descentralizada. Os nós do Docker Swarm podem ser pensados como nós Docker conectados que correm dentro do Swarm em um ambiente altamente disponível e auto-correctivo. Um Swarm Docker consiste nos seguintes elementos: -Contêiner Docker: uma aplicação Docker em execução -Demon Rápio Docker: o processo de gestão que executa o contêiner -Imagens de Docker: os ficheiros do contêiner e as instruções para executar a aplicação -Cliente Docker: a ferramenta para comunicar com o Demon Rápio Docker -Registo de imagens: um repositório para armazenar imagens Docker para facilitar a compartilhação e reutilização ### Gerentes e Nós de Trabalho no Swarm O Gerente, semelhante a outros sistemas, permite-lhe controlar e gerir as tarefas a serem executadas pelos nós de trabalho. Os nós de trabalho são as unidades que executam as tarefas. A arquitetura do Swarm inclui dois tipos principiais de nós: - Nó Gerente: controla e gerencia as tarefas que estão sendo executadas pelos nós de trabalho - Nó de Trabalho: o cliente que executa as tarefas enviadas pelo gerente ### Características chaves do Docker Swarm -Decentralizado inteiramente: permite que as equipas sejam fáceis de acessar e gerir o ambiente. -Comunicação segura altamente: permitindo uma comunicação segura entre os gerentes e nós cliente dentro do swarm. - Cargas Balanceadas automática: permite-lhe escalar o ambiente baseado nas exigências da sua nova serssor. - Voltar tarefas: permite reverter o ambiente para um estado anterior seguro caso ocorra uma falha. - Ambiente Scriptable: é possível criar e gerir o seu Swarm Docker de acordo com as tua necessidades, tornando fácil criar e gerir o teu Swarm Docker. ### Configurando um Swarm Docker Para configurar um Swarm Docker, deve ter pelo menos um nó implantado, consistindo num nó gerente e um nó de trabalho. O Swarm Gerente irá controlar e gerir as tarefas a serem executadas pelos nós de trabalho enquanto os nós de trabalho irão executar as instruções sendidas pelo gerente. Para mais informações, por favor, consulte a [documentação oficial do Swarm Docker](https://docs.docker.com/engine/swarm/). # Docker Swarm: Entendendo Serviços, Tarefas e Nós Este texto fornecerá uma visão geral do Docker Swarm, focando em serviços, tarefas e nós. ## Introdução Após criar um formulário em um Swarm do Docker, qualquer serviço dentro do mesmo cluster pode ser acessado por qualquer nó. Para utilizar uma imagem de contêiner específica ao criar um novo serviço, isso pode fazer-se através de um ambiente Docker Hub centralizado ou através de um ambiente Docker Hub privado. ### Comandos e Serviços No Docker Swarm, pode configurar comandos e serviços para serem ambos Globais ou Reproduzidos. Um Serviço Global executará consistentemente em cada nó dentro do Swarm, enquanto um Serviço Reproduzido apenas fará com que a funcionalidade e as tarefas sejam enviadas para nós de trabalho específicos dentro de um swarm. ### Serviços e Tarefas No mundo do Docker, um Serviço é uma descrição de tarefa para o estado, enquanto que a tarefa real é o trabalho que precisa ser feito. Isto é o diferenciador entre um serviço e uma tarefa. ### Alocação de Tarefas Ao atribuir uma tarefa a um nó, a mesma tarefa não pode ser atribuída a outro nó. ### Gestores e Trabalhadores Pode haver múltiplos gestores dentro de um ambiente do Docker swarm. No entanto, é necessário eleger um gestor para ser o gestor principal, e os outros gestores para serem gestores secundários. Os gestores secundários, semelhantes aos nós de trabalho, têm a capacidade de um gestor, mas dependem do gestor principal para fornecer instruções e serviços e tarefas no ambiente de swarm global. ## Orquestração via Tarefas e Serviços O Docker Swarm fornece uma interface de linha de comandos que permite a criação e a ligação via APIs. Estas APIs permitem a conexão com o ambiente de armazenamento, permitindo a realização de orquestração via tarefas e serviços. ## Alocação e execução de tarefas Aloquear tarefas permite alocar trabalho a tarefas através de sua endereço IP, o que permite executá-las nas nós de trabalho apropriados. TIAs de trabalho então precisam conectar-se ao gestor para poder verificar quando as tarefas chegam, garantindo uma comunicação consistente em ambos os sentidos ao longo todo o swarm. Finalmente, as tarefas atribuídas do nó de gestor são executadas no nó de trabalho, garantindo a execução bem-sucedida da solução que deseja construir. ## Demo Agora, vamos passar a demonstração de como executar o Swarm do Docker neste exemplo, precisará ter tanto um ambiente virtual rodando o seu gestor e os seus nós em modo de trabalho. Aqui, temos o nosso trabalho e o gestor configurados, e vamos guiá-lo através dos passos para começar a inicializar o Swarm do Docker, conectar os nós de trabalho, criar um novo serviço e executar tarefas. ## Docker Compose Nesta sessão, discutiremos quanto à Docker Compose, seguindo uma explicação sobre Como o Docker Compose melhora o desempenho do Docker. Também debateremos os benefícios de utilizar Docker Compose e as diferenças entre o Docker Compose e o Docker Swarm. Ao final da apresentação, forneceremos alguns comandos básicos para ajudar-nos a começar a trabalhar com Docker e Docker Compose, seguido por uma demo curta que nos permite criar o nosso ambiente Docker Compose. Acompanhe nossa apresentação detalhada e demo sobre o Docker Compose! ### Docker Compose versus Docker Swarm: Understanding the Differences for Developers Docker Compose e Docker Swarm são ambas ferramentas úteis para gerenciamento e orquestração de contêineres, pelo que podem parecer semelhantes a uma primeira vista. No entanto, existem diferenças importantes, especialmente para os desenvolvedores, que ficarão evidentes na escala ao trabalhar nas soluções. A seguir, uma comparação detalhada de como cada uma dessas ferramentas funciona. #### Docker Compose * **Múltiplos contêineres num hospedeiro único**: Docker Compose permite criar vários contêineres num hospedeiro único, como a sua própria máquina de desenvolvimento. * **Controle através de scripts YAML**: Docker Compose é scripted com YAML, o que lhe permite controlar fácilmente os seus scripts. * **Simplificidade**: O uso de scripts YAML diminui a complexidade do trabalhar com containerização e torna mais fácil manter a configuração e gerir *services*. #### Docker Swarm * **Múltiplos contêineres num hospedeiro múltiplo**: Docker Swarm, além de criar vários contêineres, também permite administração de vários hospedeiros, o que lhe permite a utilização em ambientes de produção. Este é um aspecto importante a considerar quando a escala do seu aplicativo aumentar. * **Autoescala**: Docker Swarm possui funcionalidades de autoescala e orquestração que podem ser úteis para ambientes de produção. #### Instalação de Docker Compose Para instalar Docker Compose, utilize os passos a seguir: 1. Instale o Docker, se ainda não o possui. 2. Busque as instruções de instalação de Docker Compose no site da Docker ou a sensação de procurar "Docker Compose" no Google. 3. Expanda a secção "Docker Compose" no painel esquerdo e siga as instruções de instalação para o Mac, Windows ou Linux. #### Utilização de Docker Compose Após a instalação do Docker Compose, segue-se estes passos para começar a utilizar: 1. Verifique se o Docker está instalado: ```bash $ docker ``` 2. Crie um novo repositório onde irá instalar o seu arquivo YAML: ``` $ mkdir docker-compose-example $ cd docker-compose-example ``` 3. Crie um novo arquivo YAML e edite-o. 4. Por exemplo, utilize o seguinte código de implementação básica: ```yaml version: '3' services: web: image: nginx db: image: redis ``` 5. Verifique o configuração do YAML: ```bash $ docker-compose config ``` 6. Arrancar os serviços: ```bash $ docker-compose up ``` 7. Para parar os serviços, utilize: ```bash $ docker-compose down ``` #### Conclusão Docker Compose e Docker Swarm são ambas ferramentas úteis para o duplo gerenciamento e orquestração de contêineres. Sabe agora como ambas trabalham e como utilizar Docker Compose. Guarde-se na próxima publicação para descobrir mais sobre Kubernetes e por que é tão útil disponibilizar *services* num ambiente DevOps. # Ambiente: Problemas com Alocação de Recursos e Questões de Erros Este ambiente pode apresentar problemas com a alocação de recursos e você pode encontrar questões de erros em que as aplicações correm inefetivamente e não balanceam de forma efetiva a carga de trabalho no ambiente. O desafio com esta infraestrutura é que pode se tornar extremamente caro, pois só é possível instalar uma peça de software em uma peça de hardware. Isso resulta em uma utilização massiva de hardware desnecessária. As Máquinas Virtuais (MV) tornaram-se populares devido à sua capacidade de oferecer melhor utilização de recursos e escalabilidade a um custo muito mais baixo. No entanto, também têm suas desvantagens, como custos de gestão de hardware e software elevados, riscos de segurança, violações de dados, problemas de disponibilidade, e configuração e administração custosas e desconfortáveis. É aí que o Kubernetes entra em cena. ## Introdução ao Kubernetes O Kubernetes é uma ferramenta que permite o desdobramento contêinerizado de soluções. É o nível de madurez seguinte no desdobramento, evoluindo do desdobramento de código diretamente para hardware físico em um data center para desdobramento de soluções para máquinas virtuais e, finalmente, para os uso de contêineres e Kubernetes. Vamos mexer nessa diferença entre uma máquina virtual e o Kubernetes. ### Comparando Máquinas Virtuais e o Kubernetes Asseguremos enviar algumas diferenças clave para fornecer uma compreensão mais precisa de o que diferencia os dois: 1. Segurança Intrínseca: O Kubernetes é intrinsicamente seguro, enquanto as MV não. Vamos falar mais detalhadamente sobre a história do Kubernetes e sobre suas características de segurança no futuro. 2. Portabilidade: MVs são portáveis, mas não com facilidade, enquanto com o Kubernetes, é extremamente portátil, permitindo que você crie e gerencie a sua infraestrutura exatamente como desejar e escala-a de acordo com as demandas do cliente. 3. Aislamento: Quando construir ambientes encapsulados, o Kubernetes utiliza um grau muito maior de aislamento em comparação a MVs. 4. Consumo de Tempo: O Kubernetes [é menos consumidor de tempo](https://pt.wikipedia.org/wiki/Consumo_de_tempo) do que MVs ao gerenciar recursos e infraestrutura. ### História do Kubernetes O Kubernetes é uma plataforma de código aberto para o gerenciamento e desdobramento de grupos de contêineres. Um contêiner, como Docker, é uma solução de contêiner comum utilizada para o desenvolvimento de código. O Kubernetes pode utilizar outras ferramentas de contêineres, mas o Docker é o mais popular. Originalmente um sucessor de um projeto da Google (Google Blog), o Kubernetes foi reescrito desde o chão e lançado como um projeto de código aberto em 2014. Hoje, é gerenciado pela Cloud Native Computing Foundation, e é suportado por várias empresas, tornando-se a ferramenta de controle de larga escala de grandes grupos de contêineres. ## Vantagens Clave do Kubernetes 1. **Portabilidade**: O Kubernetes é código 100% aberto de código fonte, facilitando a contribuição de desenvolvedores a este projeto através de GitHub. 2. **Escala**: A escalabilidade do Kubernetes é impressionante, fazendo-o perfeito para manter soluções em um ambiente altamente escalável e altamente disponível. 3. **Balançamento de Carga**: O Kubernetes permite um balançamento de carga eficiente em toda a sua rede, garantindo estabilidade na rede. 4. **Orquestração de Armazenamento**: Você pode gerenciar o armazenamento local no hardware que mantém o cluster do Kubernetes ou extraia armazenamento de public cloud como Azure e AWS e torná-lo disponível para o seu sistema todo. 5. **Ambiente Auto-Recuperativo**: O Kubernetes é projetado para um ambiente cloud first e é auto-recuperativo, automaticamente detectando e lidando com falhas. 6. **Lançamentos e Reversoes Automáticos**: O Kubernetes permite que você gerencie o estado do ambiente, rodando automaticamente lançamentos e revertendo, conforme necessário. 7. **Embalagem Automática**: Você pode especificar o poder computacional utilizado de CPU e RAM para cada contêiner. ### Arquitetura do Kubernetes (Visão Geral de Nível Alto) A arquitetura do Kubernetes é arquitetura de cluster, dividida em duas áreas-chave: 1. **Master**: Controla e faz o gerenciamento de todos as atividades do seu Kubernetes(infrastructure). 2. **Nós**: Executam em linux e são controlados pelo master. No ambiente master, você encontrará: - **API Server**: Todas as ferramentas gerenciadas tanto dentro do ambiente de master quanto dentro de um nó estão disponíveis através deste servidor. - **Agendador**: Gerencia a agenda de atividades dentro do cluster. - **Gerenciador de Controle**: Gerencia as instruções e os controles para todas as máquinas no cluster controlado pelo administrador. Em um nó do Kubernetes, você encontrará: - ** Контейнерlette**: Gerencia e manteve o contêiner no nó. - ** Proxy do Kubernetes**: Executam as serviços realmente dentro do nó. # Desploiamento e Gerenciamento de Contêineres: Um Guia Passo-a-Passo Vamos começar com o desploiamento e gerenciamento de contêineres. O primeiro passo é instalar as dependências utilizando os seguintes comandos: 1. `sudo apt-get update` - Este comando obtém todas as atualizações. Após inserir sua senha, levará alguns segundos. 2. Instale o `app transport` HTTPS utilizando `sudo apt-get install apt-transport-https`. Este comando é usado para criar repositórios via HTTPS. Depois que a instalação estiver concluída, avance para o próximo passo. Em seguida, instale a dependência do Docker utilizando o comando `sudo apt-get install docker. io`. Escolha `y` durante a instalação, e isso levará alguns minutos. Depois da instalação, inicie e habilite o Docker com os seguintes comandos: - `sudo systemctl start Docker` - `sudo systemctl enable docker` Agora, o docker está habilitado. Vamos avançar para o próximo passo, que é instalar os componentes necessários para `kubernetes`. Antes disso, instale o comando `curl` para enviar dados usando sintaxe de URL: - `sudo apt-get install curl` Agora, baixe uma chave de adição para a instalação de `kubernetes` de um URL: - `curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo apt-key add` Em seguida, adicione um repositório em um determinado local: 1. Altere a permissão do ficheiro utilizando `sudo chmod a+r /etc/apt/sources. list. d/kubernetes. list`. 2. Guarde o seguinte conteúdo em esse local: ``` deb https://apt.kubernetes.io/ kubernetes-xenial main ``` Guarde o ficheiro com o nome `kubernetes. list`. Agora, verifique se há qualquer atualização com o seguinte comando: - `sudo apt-get update` Em seguida, instale os componentes de `kubernetes`: - `sudo apt-get install -y kubelet kubeadm kubectl` Inicializar um nó mestre envolve desabilitar o trocador de memória em outros dispositivos: - `sudo swapoff -a` Agora, inicie o nó mestre: - `sudo kubeadm init` Depois da inicialização, receberá um comando para aplicar a configuração do kubelet: - `mkdir -p $HOME/. kube` - `sudo cp -i /etc/kubernetes/admin. conf $HOME/. kube/config` - `sudo chown $(id -u): $(id -g) $HOME/. kube/config` Agora, o cluster de kubernetes está inicializado e pode ser unido por outros nós. Para desempenhar pods, utilize o seguinte comando: - `kubectl apply -f <seu-ficheiro-pod>. yaml` Criar um desploiamento para uma determinada aplicação é feito criando um ficheiro YAML de implementações (`<seu-ficheiro-pod>. yaml`) e aplicando-o com o `kubectl` comando. Por fim, este tutorial abordará a comunicação comum entre `kubernetes` e Docker, e compararemos os dois ferramentas com base nos cenários de empresas reais como a Bose e a PayPal. Para receber notificações sobre novo conteúdo, digite o botão de Inscrever-se. Para questões, publicá-las nos comentários abaixo. Volte em breve para mais tutorials sobre kubernetes! # Entendendo Kubernetes: Uma Solução Centrada em Nuvem para Gerenciamento de Infraestrutura e Gerenciamento de Contêineres O Kubernetes é um sistema de orquestração de contêineres de código aberto e de grande poder, originalmente desenvolvido pela Google para gerenciar e manter a infraestrutura de dados de seus serviços em nuvem. Este artigo fornece uma visão geral do que é o Kubernetes, de suas vantagens, características e as diferenças entre o Kubernetes e o Docker Swarm. ## História do Kubernetes O Kubernetes, ou K8s, foi originalmente desenvolvido pela Google para lidar com o grande volume de aplicações em contêineres que eles gerenciavam em seus centros de dados. A Google valorizou a eficiência e escalabilidade oferecidas pelo precursor do Kubernetes e decidiu converter o seu código em um programa aberto, lançando-o como Kubernetes em 2014. Agora, como uma ferramenta de código aberto, o Kubernetes é gratuito para quem o utilizar e sua adoção ampla em fornecedores de nuvem de destaque permite aos organismos que facilitem a implantação e escala de aplicações em contêineres dentro de um ambiente em nuvem. ## Vantagens do Usar o Kubernetes ### Eliminando Processos Manuais Uma das principais vantagens do Kubernetes é que automatiza processos manuais, permitindo que as equipas escalem o seu automatismo por todo o seu redor. Seja que você está gerenciando uma pequena quantidade de nós ou dezenas de milhares, o Kubernetes permite-lhe gerir facilmente suas soluções em contêineres com eficácia. ### Gerenciamento de Contêineres O Kubernetes gerencia os contêineres reais, incluindo a segurança, armazenamento e rede em cada contêiner. Isso garante que o ambiente do Kubernetes é seguro e eficiente, oferecendo uma solução centrada em nuvem, construída com um foco na segurança. ### Monitoramento e Automação O Kubernetes constante monitoriza o estado de saúde dos nós que executam os seus contêineres. Além disso, você tem a opção de fazer um rolagem automático em caso de falha, o que lhe dá confiança em suas implantações. O Kubernetes também irá gerir processos adicionais de hospedagem e lançamento para ainda melhorar a sua gestão de contêineres. ### Acesso e Gestão de Armazenamento O Kubernetes permite-lhe montar e acessar o armazenamento necessário para executar as suas aplicações. Seja que você tem dispositivos de armazenamento locais ou de armazenamento em nuvem, o Kubernetes oferece flexibilidade para gerir o seu armazenamento conforme necessário. ## Diferenças entre o Kubernetes e o Docker Swarm Embora o Kubernetes e o Docker Swarm tenham fins semelhantes, eles apelam a diferentes usuários devido aos seus características únicas e estruturas: 1. Popularidade e Comunidade: O Kubernetes, desenvolvido e mantido pela Google, tem uma comunidade maior e mais ativa que dirige a sua evolução futura. Por outro lado, o Docker Swarm é desenvolvido e gerenciado pela Docker, com uma comunidade menor, mas igualmente apaixonada. O Kubernetes oferece mais customizações e extensões devido à sua maior comunidade. 2. Facilidade de Instalação: O Docker Swarm é mais rápido e fácil de instalar se você estiver familiarizado com o ambiente Docker. Por outro lado, fornecedores de nuvem importantes como o Microsoft Azure, Google Cloud e AWS geralmente config # Documentação de Kubernetes ## Introdução O Kubernetes é uma plataforma poderosa para gerenciamento de contêineres. Este tutorial vai te guiar pelo processo de instalação e uso básico do Kubernetes. ### Empresas que utilizam o Kubernetes Muitas empresas estão utilizando o Kubernetes, especialmente aqueles que trabalham na nuvem. Alguns exemplos notáveis incluem: - Spotify - SAP - eBay - Google (com toda a sua rede de soluções) - Microsoft (com Office e seus ferramentas) ### Caso de Uso do Kubernetes: O New York Times [O New York Times](https://www.nytimes.com/) fornece um excelente exemplo de como o Kubernetes pode ser utilizado para resolver problemas reais. Quando o New York Times começou a trabalhar com soluções hospedadas na nuvem, inicialmente tratou-as da mesma forma que uma data center. No entanto, eles perceberam que uma abordagem "nuvem-primeira" forneceria maior eficiência. Utilizando a Plataforma Cloud Google com o Kubernetes como um serviço, foram capazes de: 1. Entregar soluções a uma velocidade muito mais rápida (a velocidade é crucial no mundo do conteúdo digital) 2. Reduzir os tempos de implantação de minutos para segundos 3. Desplegar atualizações de forma independente e a requerimento 4. Adotar uma abordagem mais unificada para implantação do pessoal de engenharia, tornando a solução mais portátil ### Termos Importantes Antes de entrar no demo, vamos revisar alguns termos importantes: - **Cluster**: Um conjunto de máquinas (físicas ou virtuais) dentro do qual as aplicações são gerenciadas e executadas. - **Nó**: As máquinas que executam aplicações em contêineres e outras cargas de trabalho. - **Pod**: Dentro de um nó, um grupo de contêineres que são implantados juntos no mesmo host. - **Replication Controller**: Define o ciclo de vida de um pod em vez de criá-los diretamente. - **Seletor**: Uma expressão de correspondência de etiqueta para filtrar recursos específicos. As etiquetas são pares chave-valor atribuídos a objetos, como pods. - **Namespace**: Fornece uma qualificação adicional ao nome de um recurso. - **Serviço**: Uma abstração de pods superiores, fornecendo uma endereço IP único e um nome DNS por que os pods possam ser acessados. ### Demonstração do Kubernetes Agora que você tem uma visão básica do Kubernetes, vamos proceder com a demonstração: 1. Instale as dependências necessárias: ``` sudo apt-get update sudo apt-get install apt-transport https sudo apt-get install Docker. io ``` 2. Habilite e inicie o Docker: ``` sudo systemctl start Docker sudo systemctl enable Docker ``` 3. Instale os componentes do Kubernetes: ``` sudo apt-get install curl kubectl kubeadm kubens ``` 4. Inicialize o nó-mestre: ``` sudo kubeadm init ``` 5. Desploye o Pod em uma rede: ``` sudo kubectl apply -f https://raw.githubusercontent.com/kubernetes/examples/master/simple-app/deploy/ ``` . . . (O tutorial pula alguns passos devido a limitações de formatação. Por favor, consulte o texto original para os comandos completos. ) 6. Verifique todos os pods na rede: ``` # Kubernetes: Uma Guia Compreensiva Kubernetes é uma ferramenta projetada para ajudar a gerenciar e contener grandes grupos de contêineres. Originalmente desenvolvido pela Google, foi open-sourced pela Google e agora está disponível em quase todas as plataformas de Cloud, como AWS, Google Cloud, Microsoft Azure, e mais. Nesta guia, iremos explorar os componentes hardware e software do Kubernetes, fornecer uma visão geral da sua arquitetura e compartilhar um caso de estudo de sua utilização bem-sucedida no passado. ## O que é Kubernetes? Kubernetes é uma ferramenta que ajuda a gerenciar e contener grandes grupos de contêineres. Ele permite que você, como um desenvolvedor ou DevOps, gerencie grandes grupos de contêineres dentro do cloud. A flexibilidade do Kubernetes faz com que sejam possíveis aplicativos complexos executarem eficientemente. ## Por que usar Kubernetes? - **Solução aberta**: Originalmente desenvolvido pela Google, o Kubernetes está disponível em quase todas as plataformas de Cloud. - **Módularidade**: O Kubernetes divisão de contêineres em pequenas partes, tornando mais eficiente para administradores gerenciar todo o ambiente. - **Escalabilidade**: O Kubernetes foi projetado para escalonamento automático e possui uma forte capacidade de lidar com grandes clusters. - **Fácil Deploy**: Com apenas uma chamada simples curl, é possível enviar a sua estrutura Kubernetes. ## Visão geral da arquitetura do Kubernetes O Kubernetes possui três áreas principais: 1. A **Estação de Trabalho**: onde você desenvolve seus comandos e os envia para o master. 2. O **Master**: composto por quatro áreas principais: - Gerente de Controlador: Agendar e controlar as atividades da sua rede. - Servidor de API: Comunicar instruções sobre como a sua infraestrutura deve ficar ao seu ambiente completo. - Armazenamento Cluster: Mantém os detalhes e os valores que desenvolveu na sua Estação de Trabalho local. 3. O **Nó**: acolhe o contêiner virtual do Docker real e comunica seu estado de saúde de volta ao master. Cada nó contém várias pods, e cada pod tem um contêiner Docker construído dentro. ## Componentes de hardware do Kubernetes O Kubernetes é um sistema leve comparado a outros sistemas que examinamos anteriormente. Ele usa recursos mínimos e é ideal para o cloud. Para o armazenamento, é recomendado utilizar armazenamento cloud em vez de armazenamento físico para maior flexibilidade. ## Componentes de software O componente de software principal é o contêiner, que roda em Linux. O contêiner e todo o software que roda dentro dele são gerenciados dentro de um pod. O scheduler e o servidor de proxy da Kubernetes então gerenciam a implantação desses pods dentro do seu ambiente Kubernetes, e os pods podem compartilhar recursos para both networking e storage. ## Caso de Estudo: Uso bem-sucedido do Kubernetes Para ser adicionado em uma seção futura. ## Produto competitivo: Swarm do Docker O Swarm do Docker e o Kubernetes são ambos ferramentas para gerenciar múltiplos contêineres, cada um com suas forças e fraquezas. O Swarm do Docker é conhecido por sua instalação rápida e simples, enquanto o Kubernetes é conhecido pelo seu escalonamento automático e escalabilidade. Esperamos que esta guia forneça uma clara compreensão sobre o Kubernetes, sua arquitetura e os seus benefícios. Para informação mais detalhada, veja nossa guia futura sobre o uso bem-sucedido do Kubernetes no passado. 🇵🇹 # Kubernetes: Uma Guia de Compreensão Esta guia fornece uma visão geral detalhada de Kubernetes, seus usos e comparações com Docker Swarm. ## Ferramentas de Orquestração As ferramentas de orquestração são essenciais para o gerenciamento do ciclo de vida da aplicação, do desenvolvimento até a produção. Automatizam a gestão das dependências da aplicação, da gestão de servidores, requisitos de hardware, capacidades de auto-reparação e escalabilidade automática. ## Comparação entre Ferramentas de Orquestração: Docker Swarm vs Kubernetes ### Docker Swarm O Docker Swarm é uma solução de gestão de cluster fornecida por Docker. Ele é ideal para gerir aplicativos que são gerenciados por contêineres Docker, e pode lidar até com 50-60 nós. ### Kubernetes Kubernetes, originalmente aberto por Google, pode atender a qualquer tipo de contêineres, incluindo Docker, e é projetado para gerir operações de grande escala, especialmente quando se trata de mais de mil nós. ## Comparação de Recursos ### Auto Escalamento O Kubernetes tem a capacidade de adicionar novos nós ao seu cluster quando o carregamento é alto e de deletar nós quando o carregamento é baixo. Esta característica não está disponível em Docker Swarm. ### Balançamento de Carga O Docker Swarm fornece balanceamento de carga de nível de aplicação, enquanto o Kubernetes permite que você configure manualmente qualquer tipo de balanceador de carga de nível de aplicativo para balanceamento de carga de aplicativos. ### Instalação e Escalabilidade O Docker Swarm é mais fácil e rápido para instalar e lhe proporciona a flexibilidade de acionar novos nós e gerenciá-los de modo desacoplado. Por outro lado, o Kubernetes exige mais configuração para a criação de um grande cluster, mas é fortemente acoplado, permitindo que os nós sejam aumentados de maneira dinâmica de acordo com os requisitos. ## Uso de Kubernetes por Outras Empresas O Kubernetes é utilizado por muitas empresas, incluindo BlackRock, para gerir sistemas complexos existentes, melhorar o desempenho e deleitar os clientes. ### BlackRockExample A BlackRock implementou o Kubernetes para alcançar acesso mais dinâmico aos seus recursos e gerenciar instalações complexas no ambiente dos computadores dos colaboradores. Essa mudança leou a um gerenciamento mais escalável e expansivo da sua infra-estrutura, integravido no seu sistema totalmente existente, e se tornou uma parte importante do sucesso da BlackRock com uma infraestrutura muito estável. # Arquitetura do Kubernetes e Componentes do Nó Mestre Este documento fornece uma visão geral da arquitetura do Kubernetes, com ênfase nos componentes do nó mestre. ## Visão Geral do Clúster do Kubernetes Esta secção oferece uma descrição de nível de alto-nível de um cluster do Kubernetes: ``` Nó Mestre: - Armazenamento do cluster - Controlador - Agendador - Servidor de API Nós de trabalho (administrados pelo nó mestre): - Ambiente do runtime de contêiner - Cubulino - Proxy do Kubernetes ``` ### Componentes do Nó Mestre #### Armazenamento do cluster O armazenamento do cluster, conhecido como etcd, é um armazenamento de dados avaliado por pares de chave-valor que contém todas as informações sobre o cluster, como detalhes de configuração, status dos nós, etc. #### Controlador O controlador, assim como o nome sugere, é um servidor daemon que roda em um laço continuo para gerenciar o conjunto de réplicas de acordo com a configuração do usuário. Ele controla controladores de réplica, controladores de extremidade, controladores de namespace, etc. #### Agendador O agendador designa tarefas de acordo com tempos deExecução ou critérios específicos e rastreia o carregamento de trabalho no cluster. #### Servidor de API O servidor de API serve como o ponto de entrada para todas as solicitações que entram no cluster. Ele permite o controle de acesso em função de papéis para a secundarização do cluster. ### Componentes de Nó de Trabalho (Escravo) #### Ambiente do runtime de contêiner Os nós de trabalho executam as partes da carga de trabalho como trabalhos, serviços ou contêineres. O ambiente de execução do contêiner, como Docker, rkt ou LCK, deve estar disponível no nó específico para inicializar os contêineres especificados. #### Cubulino Cubulino, também conhecido como Cub Alert, é um subconjunto pequeno que comunica com o servidor de API do Cub e processa as tarefas atribuídas ao nó de trabalho. #### Proxy do Kubernetes O proxy do Kubernetes (ou kube proxy) atua como balanceador de carga e proxy de rede ao gerenciar a conexão entre as extremidades, garantindo que as solicitações a serviços em diferentes pods sejam corretamente roteadas. ## Demo: Configurando um Cluster Kubernetes Simplificado no AWS Se você estiver interessado em configurar um cluster do Kubernetes por si mesmo, poderá seguir este passo a passo usando uma ferramenta chamada `kops`. Este tutorial demonstra a configuração de um cluster de três nós no plataforma do AWS. ```bash 1. Lançar uma instância EC2 do AWS para instalar o kops. 2. Criar uma função IAM e atribuir-a à instância EC2. 3. Instalar o kops no servidor base. 4. Gerar o cluster Kubernetes a partir do kops com um nó mestre e dois nós de trabalho. 5. Instalar a CLI Cube (ferramenta de linha de comando) para conectar-se ao cluster, submitir tarefas e executar cargas de trabalho. 6. Usar uma pair de chaves SSH para se conectar ao nó mestre. ``` Instruções detalhadas para a configuração do cluster serão documentadas e fornecidas em um repositório do GitHub. Obs. : Este tutorial só se aplica aos componentes do nó mestre e dos nós de trabalho, mas desconsidera o painel de controle de nível de nó de contêiner do Docker Swarm de fora da caixa, como não tem sido mencionado no texto fornecido. Título: Configuração de Instância EC2 e Criação de Cluster Kubernetes ============================================================== Introdução ----------- Este guia descreverá a configuração de uma instância EC2 e a criação de um cluster Kubernetes. A seguir, aprenderá a: 1. Configurar uma instância EC2 2. Instalar os pré-requisitos do cluster Kubernetes 3. Criar um cluster Kubernetes Instalação de Pré-requisitos ---------------------------- ### T1 – Criação de uma Instância EC2 Este texto descreve a configuração de uma instância T2 micro como exemplo de facilidade, abrindo todos os ports para Address0. Daqui: ```markdown # Configuração de Instância EC2 ## Parâmetros da Instância - Tipo de Instância: T2 micro - IP público: Address0 ## Detalhes da Configuração - Não faço alterações aqui, parece certo. - Talvez eu altere esta 30 gig para uma que seja melhor para minha necessidade. - Vou adicionar uma tag a minha instância, chamada “meu servidor da polícia de cópias”. ## Portas - Vou abrir várias portas para estecluster. - Alternativamente, eu vou criar um novo grupo de segurança chamado “ao mundo aberto”. - Porém, eu não recomendo isso, vou especificar rapidamente qualas as portas que precisam ser abertas para executar meu cluster. ## Chaves de Acesso - Vou precisar de uma chave de acesso SSH. - Vou precisar converter meu PEM file para um PPK file para usar no meu Windows. ``` ### T2 – Criação de uma Chave SSH Este texto descreve a criação de uma chave SSH com o nome "chaves de aprendizado simples" e a sua conversão em um arquivo PPK para uso no Windows. ```markdown ## Chaves de Acesso - Vou criar uma chave SSH com o nome “chaves de aprendizado simples”, e salvá-la como um arquivo PEM. - Depois, vou converter arquivo PEM para um arquivo PPK para usar no meu Windows. ``` Instalação do Cluster Kubernetes -------------------------------- ### T1 – Atualização da Biblioteca Este texto descreve a atualização da biblioteca no servidor EC2. ```markdown ## Atualizar Biblioteca - Porque este é um servidor recém-provisionado, vou garantir que todas as minhas bibliotecas estejam atualizadas antes de instalar cOPS e cube CTL. - Portanto, vou executar um `sudo yum update`. ``` ### T2 – Instalação do cOPS Este texto descreve a instalação do cOPS no servidor EC2. ```markdown ## Instalação do cOPS - cOPS é uma ferramenta de instalação simples, disponível em este local. - Eu precisará apenas transferir este arquivo para o servidor EC2, garantir que tenha acesso, e instalar a ferramenta. ``` ### T3 – Instalação de cube CTL Este texto descreve a instalação de cube CTL no servidor EC2. ```markdown ## Instalação de cube CTL - Eu precisará também instalar cube CTL, que será uma ferramenta para emitir comandos para meu cluster Kubernetes após a sua instalação. ``` ### T4 – Criação de um Buckete S3 Este texto descreve a criação de um buckete S3 para armazenamento do estado do cluster. ```markdown ## Armazenamento do Estado do Cluster - Eu precisará criar um buckete S3 para o armazenamento do estado do cluster. ``` ### T5 – Criação de uma Zona DNS Este texto descreve a criação de uma zona DNS para o cluster Kubernetes. ```markdown ## Zona DNS - Eu precisará criar uma Zona DNS para minha cluster, para permitir que eu possa nomear o meu cluster Kubernetes. ``` ### T6 – Configuração do Cluster Este texto descreve a configuração do cluster, incluindo a criação de uma cluster name, a configuração do buckete S3, e as chaves de acesso. ```markdown ## Configuração do Cluster - Eu precisará garantir que meu buckete S3 e meu nome do cluster estejam configurados corretamente, antes de começar a criar o cluster. ``` ### Scripts de Ajuda smart Para facilitar a completação do processo, oferecemos-lhe scripts de automatização chamados "smart", disponíveis após a conclusão dos passos anteriores. Pode ser executado em qualquer uma das suas máquinas, apenas passe o nome do cluster Kubernetes como argumento. ``` # Resultados - Agora, vou executar scripts automatizados de instalação **smart** em todas as máquinas envolvidas. - Só passe o nome do cluster Kubernetes como argumento, e execute o seguinte comando: ``` # Guia do Nó Máquina e CopServidor ## Nome Atual da Máquina Se vê este, você está atualmente na máquina chamada `153`, que é o nó mestre. Isso também é conhecido como o caixa-mestre. ## Iniciando o Cluster Iniciei o cluster do meu servidor cop. O cluster funcionou e trouxe três nós: um nó mestre e dois nós trabalhadores. Estou entrando agora no nó mestre para executar algumas partes nele. ## Desligando um Pod Simples Vou desligar um pod simples para verificar se minhas conexões estão funcionando corretamente. Tenho uma aplicação Node. js construída e já criei um contêiner para ela. Este contêiner já está empurrado no Docker Hub e registrado com o nome `meu-app-node`. ### Desligando o Pod Para desligar este pod, vou utilizar o seguinte comando: ``` cube CTL run meu-deploy --image=docker. io/meu-app-node --replicas=2 --expose-port=8080 ``` Este comando cria um deploy e desliga o contêiner, configurando duas réplicas, que o contêiner fica exposto em porta `8080`. ### Verificando o Estado do Pod Depois de executar o comando anterior, posso verificar o estado dos pods com: ``` cube CTL get pods ``` Isto exibe se os pods estão em execução. ## Limpando o Ambiente Para excluir o pod desligado e o serviço, vou utilizar os seguinte comandos: ``` cube CTL delete deployment meu-deploy cube CTL delete service <seu-nome-do-serviço> ``` ## Encerrando o Cluster Para encerrar o cluster, vou utilizar o comando: ``` cube delete cluster meu-cluster ``` Isto garante que o cluster completo seja limpo após a demonstração. ## Introdução ao Puppet Nesta sessão, vamos focar especificamente no Puppet. Vamos abordar: 1. Por que usar Puppet 2. Componentes do Puppet 3. Empresas que adotam o Puppet 4. Escrevendo um manifesto do Puppet ### Por que usar Puppet? O Puppet é uma ferramenta de gerenciamento de configuração que permite aos administradores de sistemas escreverem simples scripts em Ruby que podem ser implantados em servidores para configuração. Esse script garante que todos os sistemas sejam configurados para um estado desejado, sendo possível restaurar os sistemas para seu estado anterior ou definir um novo estado em segundos. ### Componentes do Puppet - Master de Puppet: Um sistema onde o administrador de sistemas senta e escreve computação que também é armazenada aqui. - Manifestos: Arquivos onde a computação é escrita no formato Ruby. - Plantillas: Dados usados em combinação com os manifestos para renderizar um documento final. - Arquivos: Conteúdos estáticos enviados aos sistemas cliente para download. - Módulos: Módulos ligam manifestos, plantillas e arquivos em uma unidade única. - Autoridade de Certificado (CA): Fornece ao servidor mestre a autoridade de assinar certificados SSL enviados pelos clients. - Cliente do Puppet: Sistemas que exigem configuração. O cliente tem um agente responsável por toda a comunicação entre o servidor mestre e o cliente, além do Fact, que é responsável pela coleta e envio do estado atual do cliente para o servidor mestre para comparação com os manifestos. ## Arquitetura do Puppet O Puppet possui uma arquitetura Master-Slave. O Master do Puppet é onde o administrador de sistemas escreve código, e os clients são os sistemas que exigem configuração. O Master do Puppet comunica com os clients, fornecendo configurações necessárias baseadas nos arquivos de manifesto, que são os arquivos de código de configuração. A arquitetura proposta está ilustrada abaixo: ! [Diagrama da Arquitetura do Puppet](https://seu-url-aqui.com/arquitetura-do-puppet.png) ### Manifesto Um manifesto é um arquivo onde o código de configuração é escrito, Tipicamente o uso do formato Ruby. ### Plantailla Uma plantilla é dados utilizados em conjunto com os manifestos para rendê-los um document final. ### Arquivos Arquivos são conteúdos estáticos enviados aos sistemas clientes para download. Não existem execuções ou compilações envolvidas com seus arquivos. ### Módulos Módulos ligam manifestos, plantillas e arquivos em um único objeto para uma estrutura limpa. É apenas uma componente separada, ele fornece uma estrutura limpa. ### CA A CA (Autoridade de Certificado) fornece ao servidor mestre a autoridade de assinar certificados SSL enviados pelos clients. ### Cliente do Puppet Os clientes do Puppet são os sistemas que exigem ser configurados. O cliente tem um agente responsável por todos os cross-border transactions com a hora do servidor principal mestre e o Fact, que é responsável pela coleta e envio do estado atual do cliente para o servidor Master para comparação com os arquivos de manifesto. ## Recursos - [Documentação Oficial do Puppet](https://puppet.com/docs) - [Aprendendo o Puppet (Simplmente Aprender)](https://www.youtube.com/watch?v=qh4FJCXh_14) Assim, tudo o que existe para agora! Espero ter ajudado com este guia. Feliz automação! # Transferência de Dados e Certificados SSL na Arquitetura Mestre-Esclava (Usando o Puppet como Exemplo) Este documento explicará como os dados são transferidos entre o mestre e o cliente na arquitetura Mestre-Esclava, enfatizando o uso de certificados SSL e como o Puppet utiliza este processo para gerenciamento de configuração. ## Cenário Geral Neste exemplo, temos dois sistemas chamados `Sistema A` (atualmente não um cliente) e um hipotético `Mestre`. O `Mestre` assina o certificado do cliente para reconhecê-lo oficialmente como um cliente, e este processo permite que oappex troque de dados e configuração entre os dois sistemas. 1. **Troca de Certificados de Clientes** - O `Sistema A` envia um certificado do cliente associado ao seu nome de host para o `Mestre` - O `Mestre` verifica o certificado, verifica o nome de host e estabelece se deseja formar um link de comunicação 2. **Estabelecimento de Ligação** - Se o `Mestre` concordar em formar um link, assina o certificado e o envia de volta para o `Sistema A` - O `Sistema A` é um cliente oficial assim que o `Mestre` assina seu certificado - O cliente oficial pode agora solicitar dados para o `Mestre` 3. **Solicitação de Dados e Coleta de Fatos** - O `Sistema A` solicita os dados (por exemplo, configuração) para o `Mestre` - O serviço Facter no `Sistema A` coleta informações sobre o estado atual do sistema (por exemplo, sistema operacional, versões de software) - A informação coletada (fatos) é enviada de volta para o `Mestre` 4. **Comparação de Manifestos** - No `Mestre`, os fatos são comparados com o Manifesto - O `Mestre` verifica se mudanças de configuração desejadas já foram realizadas nos sistemas cliente 5. **Geração e execução de Catalogos** - Se houver mais funcionalidades a serem executadas, o Manifesto é compilado em catalogos e estes são enviados para os clientes - Os agentes nos clientes executam os catalogos, realizando as alterações necessárias nos clientes e gerando um relatório - O relatório é enviado de volta para o `Mestre` ## Processo Puppet-Específico No caso de usar o Puppet, o processo é essencialmente o mesmo, com algumas etapas adicionais sobre a coleção e utilização de fatores: . . . (a descrição do processo continua aqui) 6. **Coleção e Comparação de Fatos** - O serviço Facter no cliente do Puppet coleta fatores sobre o estado atual do sistema cliente (por exemplo, sistema operacional, versões de software, etc. ) - Os fatores coletados (referidos como 'fatos') são comparados contra o Manifesto no `Mestre` para verificar o estado do sistema e realizar as alterações necessárias na configuração 7. **Geração, execução e relatarização de Catalogos** - Se houver mais alterações de configuração a serem realizadas, o Manifesto é compilado em catalogos - Esses catalogos são enviados para o cliente, onde o Agente Puppet instalado executa-os e realiza as alterações necessárias na configuração do cliente - Um relatório das alterações feitas é enviado de volta para o `Mestre` ## Pré-requisitos Para seguir este tutorial, seguem-se os seguintes instrumentos e configurações necessários: - Dois sistemas (um `Mestre` e um `Cliente`) - Sete (7) distribuições Linux (VirtualBox é utilizado como exemplo) - Oracle VM VirtualBox instalado na máquina-anfitrião - Puppet Server ou Mestre Puppet (instalado no `Mestre` machine) - Puppet Agentes ou Clientes Puppet (instalados no `Cliente` machine) ## Tutorial A continuación, un tutorial paso a paso para configurar e usar o Puppet para instalar o Apache no `Cliente` machine: . . . (passos do tutorial continuam aqui) --- Neste documento, o processo de transferência de dados e utilização de certificados SSL na arquitetura Mestre-Esclava é explicado, enfatizando a utilização do Puppet para gerenciamento de configuração. Os passos envolvidos incluem a troca de certificados de clientes, estabelecimento de ligação, solicitação de dados e coleta de fatores, comparação de Manifestos, geração e execução de catalogos e reportagem. Também inclui um tutorial prévio sobre a configuração do ambiente Puppet usando a arquitetura Mestre-Esclava. ```markdown # Demonstração de Puppet: Empresas que Usam Puppet e Benefícios ## Empresas que Usam Puppet Hoje O Puppet é uma ferramenta de gerenciamento de configuração popular que é usada por numerosas empresas para gerenciar a infraestrutura. Aqui estão algumas empresas que adotaram o Puppet: 1. Spotify 2. Google 3. AT&T ### Por Que Utilizar o Puppet Como Ferramenta de Gerenciamento de Configuração? - **Estudo de Caso da Staples**: A Staples utilizou o Puppet como ferramenta de gerenciamento de configuração e a integrou ao seu Cloud privado. Os resultados foram impressionantes. A organização de IT foi capaz de salvar um significativo tempo ao implantar e gerenciar a sua infraestrutura usando o Puppet, enquanto assim eles podiam se focar nos outros projetos. É um benefício tangível para uma empresa. ## Escrita de um Manifeste no Puppet ### Introdução *Manifests* são usados para escrever código que configure um nó específico no seu ambiente de servidor. Estes manifests são compilados em catálogos, os quais são então executados no cliente. Cada um dos manifests é escrito em Ruby com uma extensão `. pp`. ### Passos Chave para Escrita de um Manifeste 1. Crie o seu manifeste 2. Compile o seu manifeste 3. Implemente o seu catálogo 4. Execute o seu catálogo 5. configure o cliente para um estado específico e desejado ### Sintaxe do Manifeste O manifeste é escrito usando uma sintaxe familiar se você já trabalhou com Ruby ou configurou sistemas no passado. Aqui está um resumo da nossa obra aqui: 1. Recurso com o tipo de pacote ou serviço com um nome específico 2. Defina recursos como a endereço IP 3. Escreva comandos como 'presente' ou 'start' 4. Um manifesto pode conter múltiplos tipos de recursos 5. O palavra-chave padrão do Puppet aplica o manifesto para todos os clientes (por exemplo, crie um caminho de arquivos) ## A Comunidade de Puppet A comunidade de Puppet é rica e ativa. Aqui estão algumas estatísticas-chave: - Mais de 2. 900 contribuintes de projetos no GitHub que estão de algum modo associadas à Puppet Labs - 4. 893 módulos disponíveis na Forge oficial do Puppet, incluindo módulos da Puppet Labs e contribuintes de código-fonte do GitHub Antes de escrever código para o Puppet, consulte a Forge do Puppet para ver se alguém já escreveu isso. Se não, você pode colaborar com a comunidade no Slack, Overflow ou a lista de correio. ## A Forge do Puppet A Forge do Puppet é um cliente do GitHub para um repositório hospedado pela Puppet Labs. Contém quase 5. 000 módulos de código Puppet. Estes são ambos da Puppet Labs e da comunidade. O melhor deles é que são fáceis de personalizar às suas necessidades e contêm testes integrados. Se você fosse escrever um módulo em si, você teria que escrever tests e seguir os práticas recomendadas, mas isso é todo assumido quando você descarrega e personaliza um módulo existente. ## O Dominio Específico do Linguagem (DSL) do Puppet O DSL do Puppet (Dominio Específico de Linguagem) é a linguagem principal da Puppet. É semelhante ao inglês corrente e não requer um programador para escrever código nele. Ele usa 'é igual a' e 'maior que' marcas para definir coisas, fazendo-o fácil de aprender. Com o DSL do Puppet, você pode: - Specificar os pacotes a serem instalados - Specificar os serviços a serem gerenciados - Fazer coisas de acordo com o sistema operacional que você tem. ## Demonstração Nesta demonstração, criaremos um ambiente Puppet, incluindo a instalação do servidor e cliente, as certificadas, a instalação do NTP no cliente, e o uso do DSL do Puppet. Para isso, utilizaremos um pseudo Domain Name Local pois o Puppet exige um nome de domínio qualificado completo. Será instalado a Puppet server, client, assinar certificados, instalar NTP no cliente, e escrever módulo de NTP, ### Siga estes passos: 1. Instale o Puppet server e client 2. Assine as certificadas 3. Instale o NTP no cliente 4. Escreva um módulo de NTP # Conclusão Este guia fornece uma visão geral do Puppet, de seus usos e de sua comunidade. Com o Puppet, você pode gerenciar sua infraestrutura de forma eficiente e aproveitar a comunidade ativa do Puppet para ajudar a customizar código e superar quaisquer desafios que possam surgir. ``` # Configuração em Lado do Cliente: Demonstração do Puppet Este guia vocá-lo conduzirá através do processo de configuração do cliente e do mestre Puppet, da instalação de um módulo do Forge Puppet, e da comparação de quatro ferramentas de gerência de configuração populares (Chef, Puppet, Ansible e SaltStack). ## Pré-requisitos - Um ambiente Puppet master e cliente funcionando; - Acesso a ambos os servidores Puppet master e cliente; - Um arquivo hospedeiros configurado corretamente no servidor Puppet master para incluir o servidor cliente. ## Configuração do Cliente e do Mestre Puppet Agora que os servidores cliente e mestre reconheçam um ao outro, proceda com os próximos passos. ### Criação de uma Solicitação de Assinatura de Certificado 1. Navegue até o diretório `opt` do servidor Puppetmaster: ``` cd /opt/Puppet Labs/puppet/bin ``` 2. Execute o seguinte comando para criar uma solicitação de assinatura de certificado para o cliente: ``` puppet agent --test --server puppet-master. local --certname puppet-client. local ``` 3. No servidor cliente, verifique se há certificados pendentes: ``` sudo puppet cert list --pending ``` Deveria ver um certificado público do cliente. 4. Faça o assinatura do certificado pendente: ``` sudo puppet certsign puppet-client. local ``` O assinatura do certificado é verificável em ambos os servidores mestre e cliente. ### Instalação de um Módulo do Puppet Forge Agora que temos um ambiente Puppet funcional configurado, faça a instalação de um módulo do Puppet Forge. 1. No servidor mestre, navegue para o diretório appropriado: ``` cd /etc/puppetlabs/code/environments/production ``` 2. Mude para o diretório `modules`: ``` cd modules ``` 3. Navegue até o binário presente em `opt/Puppet Labs/bin` e instale o módulo do Apache: ``` sudo puppet module install puppetlabs/apache ``` 4. Crie o módulo para a pasta appropriada: ``` mkdir manifests cd manifests nano site. pp ``` 5. No arquivo `site. pp`, façam especificar que você deseja a inclusão do módulo Apache no nó cliente: ```puppet node 'puppet-client. local' { include apache } ``` 6. Salve e feche o arquivo, depois execute o seguinte comando no servidor cliente: ``` sudo puppet agent --test ``` 7. Verifique se o servidor Apache está em execução e se a página padrão está disponível no servidor cliente. ## Comparação de Ferramentas de Gerência de Configuração Agora que temos um ambiente Puppet em funcionamento, exploremos quatro ferramentas de gerência de configuração populares: Chef, Puppet, Ansible e SaltStack. *Detalhes sobre cada ferramenta podem ser encontrados em seções separadas abaixo. * ### Chef O Chef é uma solução madura para infraestruturas grandes e heterogêneas, escrita em Ruby e Erlang. *Para mais informações, confira a documentação oficial do Chef: https://www.chef.io/* ### Puppet O Puppet é semelhante ao Chef, foi projetado para grandes organizações heterogêneas e escrito em Ruby. *Para mais informações, confira a documentação oficial do Puppet: https://puppet.com/* ### Ansible O Ansible se destaca por transmitir instruções em vez de se manter um ambiente cliente-servidor ou mestre-escravo. *Para mais informações, confira a documentação oficial do Ansible: https://docs.ansible.com/* ### SaltStack O SaltStack é uma ferramenta CLI com excelentes relatórios e projetada para ambientes que desejam crescer rapidamente e serem muito robustos. *Para mais informações, confira a documentação oficial do SaltStack: https://docs.saltstack.com/* Em breve, exploraremos cada uma dessas ferramentas detalhadamente, ajudando-o a decidir qual é melhor para seu ambiente de operações (Chef, Puppet, Ansible ou SaltStack). ### Cenário de Tim Conheça Tim, nosso administrador de sistema. A sua rede está estável, mas quando os servidores começam a falhar ou a rede expandir, as coisas se complicam. Nessas situações, Tim precisa de uma ferramenta de gerência de configuração robusta para ajudá-lo a gerenciar eficientemente seus servidores. ### Comparação de Ferramentas de Gerência de Configuração: Resumo Vamos comparar essas ferramentas baseadas em suas forças e debilidades: 1. Chef - Uma forte comunidade e uma coleção de respeito da comunidade - Ótima integração com Git e controle de versão forte - Precisa de um grande aprendizado para se tornar um especialista, incluindo a dominação do Ruby - Controla pouco do servidor em si, depende da comunicação na rede - Fornece uma solução madura para infraestruturas heterogêneas - Comunica-se de forma de ambos os lados para entender áreas afetadas - As operações avançadas requerem um bom entendimento do Ruby 2. Puppet - Uma forte comunidade e suporte - Informações de relatório madura - Precisa de um bom entendimento de Ruby para operações avançadas - Controla pouco do servidor em si, depende da comunicação na rede - Fornece gerenciamento eficiente de infraestrutura para grandes organizações - Ótima integração com Git para controle de versão - O servidor tem pouco controle porpadrão 3. Ansible - Fácil de aprender e usar uma vez configurado - As instruções são escritas em YAML e fácil de adaptar - Ligeira, sem a necessidade de agentes em nós remotos - Performance ligeiramente mais lenta do que outras ferramentas, mas ainda bem rápida - Não possui uma interface gráfica para criação e gerenciamento de ambientes 4. SaltStack - Fácil de usar uma vez configurado - Fornece excelentes recursos de relatório - Embora o Setup seja simples de iniciar, pode ser ligeiramente complexo inicialmente - Não possui uma interface gráfica para criação e gerenciamento de ambientes ### Avaliação e Seleção de Ferramentas de Gerência de Configuração Escolher a ferramenta certa de gerência de configuração para seu ambiente de operações depende das suas específicas necessidades, conhecimentos e requisitos de infraestrutura. As quatro ferramentas comparadas aqui têm suas próprias forças e debaixos, e está essencial que considere essas características antes de fazer a sua escolha. Agora que nós fezemos uma análise nas ferramentas em detalhe, é hora da verdadeira batalha entre Chef, Puppet e Ansible vs SaltStack, para determinar qual domina para seu ambiente de operações. Vamos começar a corrida! 🎉 # Gestão de Redes: Ansible como uma Opção por Sua Facilidade de Configuração Este guia tem o objetivo de discutir os benefícios de Ansible, uma ferramenta de gerenciamento de configuração popular, principalmente por sua facilidade de configuração. Enquanto outras ferramentas, como Chef, Puppet e Saltstack também oferecem procedimentos de configuração simples de executar, Ansible se destaca pela sua natureza amigável para o usuário. ## Configuração Fácil: Ansible na Frente ### Introdução Ansible é uma opção excelente para quem está começando com tais ferramentas, oferecendo uma experiência de gerenciamento de configuração simples e acolhedora. Enquanto outras ferramentas, como Chef, Puppet e Saltstack também ofertam procedimentos de configuração simples de executar, Ansible se destaca pela sua natureza amigável para o usuário. ### Idiomas Utilizados na Configuração 1. Ansible e Chef são procedimentais—especificam e descrevem os passos exatos para completar uma tarefa nas instruções. 2. Puppet e Saltstack são declarativos—funções somente o que precisa ser feito nas instruções sem especificar os passos. ## Escalabilidade: Eficiência para Gerenciamento de Organizações Grandes Todas as ferramentas de gerenciamento de Configuração são projetadas para escalabilidade, permitindo-lhes gerenciar organizações de grande porte. ## Ferramentas de Gerenciamento: User Experience Across Contenders 1. Ansible e Saltstack: Ferramentas de gerenciamento são usuárias e populares escolhas entre os utilizadores. 2. Puppet e Chef: Ferramentas de gerenciamento exigem um curso educacional, pois envolvem compreender o DSL público ou o DSL Ruby. ## Interoperabilidade: Alta em Todos os Contenders A interoperabilidade com estes produtos é alta devido à sua semelhança na escalabilidade. ## Disponibilidade nas Nuvem: Considerações para Migração Rápida da Nuvem - Ansible e Saltstack atualmente não possuem disponibilidade nas ambientes cloud populares. - Puppet e Chef são acessíveis tanto em Amazon quanto em Azure, com suporte recente para Azure para Chef. ## Comunicação: Métodos Seguros e Únicos Across Tools - Chef utiliza a sua própria ferramenta `knife` para comunicação. - Puppet utiliza o SSL (Secure Sockets Layer). - Ansible e Saltstack utilizam hashing de sockets seguros e SSH (Secure Shell) como seus métodos de comunicação. ## Conclusão: Escolhendo a Ferramenta Certa A ferramenta apropriada depende de seus recursos e do ambiente a gerir. Explore uma mistura de ferramentas abertas e considere suas necessidades e recursos da equipa. ## Guia de Instalação de Ansible: Tutorial para Iniciantes Bem-vindo a este guia onde nos guiamos pela instalação do Ansible! ### Requisitos 1. Ansible é uma ferramenta de gestão de configuração por puxar que opera dentro de uma arquitectura de mestre-escravo, assim, certifique-se que o seu sistema-mestre está pronto. 2. Conheça os básicos do YAML, o idioma utilizado para escrever tarefas de Ansible, pois é simples e similar ao português europeu. ### Passos para Instalar Ansible 1. **Descargar Ansible**: Instale o Ansible no seu sistema-mestre seguindo as instruções apropriadas para o seu sistema operativo. 2. **Configurar Hosts de Ansible**: Crie o ficheiro ` /etc/ansible/hosts` para especificar detalhes dos sistemas cliente. 3. **Criar uma Tarefa**: Escreva uma tarefa no formato YAML, definindo tarefas e especificando sistemas de host e informação de utilizador. 4. **Verificar a Síntaxe da Tarefa**: Usa o comando `ansible-playbook -i /etc/ansible/hosts -C sample_playbook. yml` para verificar a síntaxe da tarefa. 5. **Executar a Tarefa**: Execute a tarefa com o comando `ansible-playbook -i /etc/ansible/hosts sample_playbook. yml`. 6. **Verificar Resultados**: Monitore o progresso da tarefa nos sistemas cliente e verifique que as tarefas tenham sido executadas com sucesso. Com estes passos em mente, já estás em caminho para implementar o Ansible nas tuas necessidades de gerenciamento de configuração! # Ansible: Melhorando a Eficiência em Organizações através da Automação ## Porque Ansible? O Ansible é outra ferramenta no seu ambiente DevOps, ajudando a gerenciar servidores do lado da operação da equação. Vamos tomar um olhar para um caso de uso examinando a HootSuite, uma empresa de gestão de redes sociais, e como eles utilizam o Ansible para melhorar a eficiência dentro da sua organização. ## Função do Administrador Sistema Como administrador de sistema, você é responsável por manter a infraestrutura para todos os servidores dentro da sua empresa. Estes servidores podem ser servidores web executando Apache, servidores de banco de dados executando MySQL, e muito mais. ## Desafios com a Gestão Manual de Servidores A gestão de alguns servidores é mais ou menos fácil, mas quanto mais servidores tiver, mais dificil é criar uma configuraçãoConsistente para diferentes infraestruturas como servidores web e banco de dados. Isto é devido a erros humanos ao actualizar e manter os servidores manualmente. ## Ansible ao Resgate O Ansible SORTEIA-SE para o resgate, ao permitir-lhe criar e controlar três áreas chave do seu ambiente de operação: 1. Automação: Escreva instruções que automatizam a definição de IT tipicamente feita a mão. 2. Configuração: Asegure-se de que existe uma configuração coerente entre todos os servidores. 3. Desploiamento: Automatize o desploiamento de servidores ao escalar o seu ambiente. ## Configuração "push" vs "pull" O Ansible utiliza uma configuração "push", onde empova os serviços e a estrutura do servidor a infraestruturas remotas. Isto contrasta com outros produtos populares como Chef e Puppet, que utilizam a arquitetura Mestre-Escravo. ## Arquitectura do Ambiente Ansible Quando se configura um ambiente Ansible, precisará de uma máquina local onde irá escrever os seus instruções e gerir a lista dos nós no seu ambiente. As máquinas vinculadas à máquina local são todas as diferentes nós, cada um empurrando para fora as configurações que definiu. ## Playbooks A parte central do Ansible é o playbook, onde você cria as instruções que definem a arquitetura da sua infraestrutura. Cada conjunto de instruções é escrito no YAML, um línguagem padrão utilizada para configuration environments de servidores. ## Gestão da Lista de Inventário A parte de lista de inventário do Ansible é onde mantém a estrutura de sua rede. Cria nós, e sob cada nó, especifica os nomes das máquinas dentro do seu ambiente. Isto torna fácil a execução de instruções em servidores específicos. ## Aplicação em Ambiente Real-World Em um ambiente real-world, terá o software do Ansible instalado numa máquina local, que se conecta a diferentes nós dentro da sua rede. Você terá o seu playbook, que é o dévido set de instruções para a criação dos nós remotos, e uma lista de inventário para identificar como se conectar a esses nós. ## Ansible Tower O Ansible Tower é um produto adicional que fornece uma interface Gráfica, tornando facil o Ansible para não desenvolvedores criarem e gerenciar seus planos DevOps sem constantemente utilizar a janela de prompt de comandos. ## Caso de Uso HootSuite A HootSuite, um sistema de gestão de redes sociais, enfrentava o desafio de frequentemente reconstruir o seu ambiente de envio e não podia manter consistência. Com o Ansible, foram capazes de criar um ambiente consistente, melhorando a sua eficiência. ## As suas Opiniões O que são as principais oportunidades do Ansible sobre Chef e Puppet? Compartilhe as suas opiniões nos comentários abaixo, e retornaremos às suas respostas. ## Bonus: Ansible Tower O Ansible Tower é um quadro que fornece interface grafica, tornando-o fácil para não desenvolvedores criarem e gerenciar seus planos DevOps sem necessariamente utilizar a janela de prompt de comandos. Titulo principal: Introdução ao Ansible ======================================= Este artigo apresenta uma visão geral do Ansible, uma ferramenta de automação de configuração e gerenciamento que tem se tornado popular nos últimos anos. As aulas da quarta-feira abordarão o porque utilizar o Ansible, sua arquitetura, como funciona, benefícios e uma demonstração de instalação do Apache (ou o pacote httpd) em sistemas clientes. Porque utilizar o Ansible? --------------------------- Enquanto uma infraestrutura pequena pode ser gerenciada manualmente por um administrador, grandes infraestruturas requerem uma abordagem mais eficiente para garantir que todos os sistemas estejam funcionando na versão correta de cada software. As tarefas repetitivas e monótonas de um administrador como o Sam de HootSuite (exemplo usado no texto original) podem ser facilitadas com o uso do Ansible. O que é o Ansible? ------------------ O Ansible é uma ferramenta de automação de configuração, gerenciamento e implantação de sistemas que está em crescimento no mercado. Ele automatiza várias tarefas, sendo uma delas a orquestração - unificação dos aplicativos e segurança em uma sequência apropriada para garantir que tudo funciona bem; a automação de gerenciamento de configuração - garantindo que todos os sistemas estejam configurados de acordo com um estado desejado; e a automação de implantação - garantindo que as aplicações possam ser implantadas em várias máquinas e ambientes sem a necessidade de qualquer manuseio manual. Córico de demonstração: Instalação do Apache ------------------------------------------- Nesta aula, lhe mostrarei como instalar o Apache (ou o pacote httpd) em um sistema cliente. Será necessário seguir alguns passos, como: 1. Instalação do Ansible: ``` yum install ansible -y ``` 2. Criação do arquivo de inventário: ``` cat << EOF > /etc/ansible/hosts [web_servers] client_1 ansible_user=root ansible_password=senha_secreta ansible_ssh_common_args='-o StrictHostKeyChecking=no' client_2 ansible_user=root ansible_password=senha_secreta ansible_ssh_common_args='-o StrictHostKeyChecking=no' EOF ``` (Note: Adicione as informações de SSH de suas máquinas clientes aqui). 3. Criação do arquivo de rotação (playbook): ``` cat << EOF >install_apache. yml --- - hosts: web_servers become: yes tasks: - name: Instalar Apache apt: name: httpd state: latest - name: Startar Apache service: name: apache2 enabled: yes state: started - name: Criar página web copy: dest: /var/www/html/index. html content: '@templates/index. html' EOF ``` (Note: Adicione a pasta de templates com uma página HTML simples para a demonstração). 4. Executar a rotina: ``` ansible-playbook -i /etc/ansible/hosts install_apache. yml ``` Após a conclusão da instalação, você poderá acessar 'http://{client_1_IP}/' e 'http://{client_2_IP}/' para confirmar o funcionamento do Apache na satellites clientes. # Fácil de Ler com Indentações Corretas e Verificação de Sintaxe de YAML Este guia é feito sob a base da utilização de Ansible para um playbook específico. A formatação em Markdown será mantida, enquanto se corrigem erros ortográficos e se manteiam as informações técnicas precisas. ## Formato do Playbook YAML Aqui estão algumas dicas importantes para estruturar um ficheiro de playbook YAML: - A simplicidade e a lisbilidade através de indentações preciosas são fundamentais. - Certifique-se de que há espaçamento correto entre os elementos de código para uma execução correta. Com essas directivas em mente, melhoraremos e formataremos o texto de forma melhor: ### Formato do Playbook e Sintaxe As indentações corretas são fundamentais ao escrever playbooks YAML: ```yaml # Define o nome do seu playbook usando '#' para cabeçalhos - name: [Nome do seu Playbook] # Tarefas secundárias devem ser indentadas sob as tarefas principais tasks: - name: Verifique a sintaxe do ficheiro YAML ansible-playbook: playbook: [Nome do seu Playbook] tags: syntax-check - name: Execute o Playbook ansible-playbook: playbook: [Nome do seu Playbook] - name: Gather facts hosts: todos tasks: - name: Gather facts ansible. builtin. setup: - name: Mude 1: Instale o pacote httpd ansible. builtin. apt: name: httpd state: present quando: "ansible_os_family == 'Debian' ou ansible_os_family == 'Ubuntu'" - name: Mude 2: Garanta que o httpd esteja a correr ansible. builtin. service: name: httpd estado: started - name: Verifique o estado final: Criação de conteúdo ansible. builtin. file: path: [Destino] estado: present quando: "ansible_os_family == 'Debian' ou ansible_os_family == 'Ubuntu'" ``` Tenha em conta as alterações aplicáveis baseadas no sistema operativo (SO) alvo. ### Teste de Browsers no máquina cliente Depois de executar o playbook Ansible, verificar as alterações realizadas na máquina cliente: ```markdown # Abrir o teu navegador e acessar localhost 1. Abre um navegador em tua máquina cliente. 2. Digite 'localhost' na caixa de endereço e insere. 3. Se o Servidor Apache e a página web forem hospedados, deverás ver a página web em execução. # Teste automatizado da página web usando Selenium Se quiseres explorar a teste automatizado e compreender o Selenium, é possível ver o seguinte vídeo: [Link do Vídeo] ``` Seguindo estas regras de formatação, conseguimos agora ler, entender e manter o conteúdo original com facilidade. # Selenium: Um Panorama Selenium é uma ferramenta poderosa usada para a automação de testes em aplicações web. Interage com navegadores usando uma solicitação HTTP POST/GET simples, que foi originalmente chamada de Selenium 1. 0, mas foi depreciada em Selenium 2. 0 e completamente removida em 3. 0. Essa foi substituída pelo WebDriver, que é o componente mais importante na Suite Selenium. ## WebDriver O WebDriver é uma interface de programação para criar e executar casos de teste. É o sucessor do Selenium Remote Control (RC) mencionado anteriormente, devido a alguns inconvenientes que o RC apresentava. Contrariamente ao RC, o WebDriver interage diretamente com os navegadores. </br> ## Selenium RC O Selenium RC (utilizado em versões anteriores) exigia um servidor para interagir com o navegador, mas foi depreciado em Selenium 2. 0 e substituído por WebDriver. </br> ## Selenium Grid O Selenium Grid é usado para executar vários scripts de teste em várias máquinas ao mesmo tempo, ajudando a alcançar a execução paralela. Em um ambiente real-time, você sempre precisa executar casos de teste em um ambiente distribuído, e isso é o que o grid ajuda-o a fazer. </br> ## História das Versões do Selenium As versões anteriores do selenium consistiam em um ambiente de desenvolvimento integrado (IDE), RC e grid. O IDE do Selenium estava disponível desde a versão um, mas morreu com a versão Firefox 55, e não era mais suportado a partir da versão 55 em diante. No entanto, um novo Selenium IDE foi lançado recentemente pela Appl crash e está disponível como uma extensão multi-browser. </br> ## Selenium IDE O Selenium IDE é o ferramenta mais simples do conjunto Selenium. É o IDE de criar seus scripts de automação. Ele possui recursos de registro e reprodução e é um ferramenta simples e fácil de usar. Ele é disponível como um complemento de Firefox e uma extensão do Chrome. ## Recursos do novo Selenium IDE 1. Reutilização de casos de teste 2. Um depurador melhor 3. Execução de casos de teste em paralelo </br> ## Instalação e Uso do Selenium IDE Para instalar o Selenium IDE, acesse a sua Pasta de Ad-ons do Firefox, procure pela selenium IDE e instale a extensão. Após instalado, deveria ser possível ver o ícone do Selenium IDE no seu navegador. </br> ## Demonstração Usando Selenium IDE [Incluirá aqui instruções e capturas de tela demonstrando o uso do novo Selenium IDE. ] # Teste de Busca na Amazon utilizando o Selenium IDE Neste tutorial, vou mostrar como criar um caso de teste para a pesquisa da Amazon utilizando o Selenium IDE. ## Estrutura do Teste O teste é dividido em passos claros e organizados. 1. **Abrir o Amazon** - Abre a URL do Amazon (amazon. in neste exemplo) ``` open "https://amazon.in" ``` 2. **Digitar o termo de pesquisa** - Digite o termo de pesquisa no campo de pesquisa (iPhone neste exemplo) ``` type css=#twotabsearchtextbox iPhone ``` 3. **Iniciar a pesquisa** - Clica no botão de pesquisa ``` click css=#nav-search-btn ``` 4. **Validar o título da página** - Verifique se o título da página é o esperado ``` assertTitle "iPhone - Amazon" ``` ## Mecanismo de Falha O Selenium IDE possui um mecanismo de fallback para locais de elementos, que fica disponível caso a ID de algum elemento seja alterada. Ele identifica vários locators para o mesmo elemento, como ID, name, CSS, e XPath. ## Limitações do Selenium IDE O Selenium IDE possui algumas limitações: - Não permite exportar seus scripts para scripts web driver - Não é possível realizar testes de banco de dados - Não possui um mecanismo de reporting satisfatório, como testNG ou reportNG. Por fim, vamos utilizarmos o Selenium RC, que possui um suporte mais amplo para linguagens de programação e que nos permitirá resolver algumas dessas limitações. Para mais informações sobre o Selenium RC, veja [Aqui](https://seleniumhq.org/docs/03_webdriver.jsp) . Você é um revisor especializado em melhorar documentação técnica em Markdown. Corrija e formate o texto mantendo estas regras: 1. FORMATAÇÃO MARKDOWN: - Use # para títulos e subtítulos - Use ** para negrito em termos importantes - Use ` para código inline - Use ``` para blocos de código - Use > para citações - Use - ou * para listas - Use --- para separadores - Preserve todas as URLs existentes 2. ESTRUTURA: - Organize em seções com títulos claros - Use parágrafos para separar ideias - Mantenha listas e enumerações - Preserve a hierarquia de títulos 3. CONTEÚDO: - Corrija erros de pontuação e gramática - Mantenha todos os termos técnicos inalterados - Preserve comandos e códigos exatamente como estão - Mantenha URLs e referências intactas Retorne o texto mantendo toda a formatação Markdown. Corrija e formate este texto: Desenvolvedores utilizam para criar, portanto, Selenium RC foi depreciado e não está mais disponível nas versões mais recentes do Selenium. É obsoleto agora. Para sobrepor estes problemas, WebDriver foi introduzido. Assim, enquanto RC foi introduzido em 2004, WebDriver foi introduzido por Simon Stewart em 2006. É uma plataforma de teste de classe, portanto, WebDriver pode executar em qualquer plataforma, como Linux, Windows, Mac, ou mesmo uma máquina Ubuntu. Você pode executar seus scripts Selenium nesta máquina. É uma interface de programação para executar casos de teste; é mais um IDE e aqui está como funciona: os casos de teste são criados e executados usando elementos da web ou objetos usando a localização do objeto e o método WebDriver. Assim, quando eu faço uma demonstração, você vai entender o que são esses métodos WebDriver e como localizamos os elementos da página da web. Não requer um motor principal como RC; portanto, é bastante rápido. Por que? Porque WebDriver interage diretamente com o navegador e não tem esse servidor intermediário como o servidor RC. Assim, cada navegador atua como seu motor e este motor é responsável por fazer o navegador entender os comandos que você está passando do script, como clicar em um botão ou entrar com algum texto. Por meio de seu script, você diz qual navegador deseja trabalhar, por exemplo, Chrome, e então o motor do Chrome é responsável por interpretar suas diretrizes e executá-las no aplicativo web lançado no navegador do Chrome. Assim, como o RC, WebDriver também suporta múltiplas linguagens de programação, em que você pode escrever seus scripts de teste. Outro vantagem do WebDriver é que ele suporta vários frameworks, como TestNG, JUnit e Test Entry. Quando falamos sobre limitações de WebDriver, você compreenderá como esta suporte para vários Frameworks e Ferramentas ajuda a tornar o Selenium uma solução completa para a automação de aplicativos web. Assim, vamos olhar a arquitetura de WebDriver de forma geral. O que existe em WebDriver? Um web driver consiste em quatro componentes principais: 1. **Client Libraries/Language Bindings**: Com o Selenium suportando várias linguagens e você sendo livre para usar qualquer das línguas suportadas para criar o script de automação de seu choice, estas bibliotecas são disponibilizadas em seu site do Selenium que você precisa baixar e então escrever seu script conforme. Para descarregar, vá para o seu navegador e acesse <https://www.seleniumhq.org/>. Se você estiver trabalhando com Selenium, este site é sua Bíblia; tudo o que você precisa saber sobre Selenium, você precisa vir aqui e utilizar todas as ferramentas neste site. Assim, aqui queremos fazer algumas comparações entre o RC e o WebDriver. - Selenium RC tem uma arquitetura complexa. Você sabe por que? Porque devido ao servidor adicional RC. Por outro lado, devido à interação direta com o navegador, a arquitetura do WebDriver é bastante simples. Execution speed: é mais lento no RC e quase duas vezes mais rápido no WebDriver. Por que? Porque no WebDriver, eliminamos completamente uma camada do servidor do Selenium, o RC server, e estabelecemos uma comunicação direta com o navegador através do motor de navegador do navegador. Dependendo da configuração, o RC pode necessitar de um tempo de carregamento maior, mas o WebDriver é muito mais rápido. Por isso, escolha o WebDriver. 2. **Selenium fornece várias APIs para nós interagir com o navegador**. Quando fizermos uma demonstração, irei mostrar alguns desses APIs. Estes são nada mais do que APIs REST, e tudo que fazemos através do script acontece por meio de chamadas REST. 3. **JSON Wire Protocol**: O que é JSON? JSON significa JavaScript Object Notation e é nada menos do que uma padronização para troca de dados sobre a web. Portanto, para executar um script é enviada uma chamada REST para o motor de navegador do navegador. - **Não testa aplicações móveis**: Selenium não pode automatizar aplicações móveis. É para automatizar aplicações web. As aplicações móveis são um pouco diferentes e precisam de seus próprios conjuntos de ferramentas de automação. No entanto, o que o Selenium oferece é suporte para integração com esta ferramenta de Gerenciamento de Perfil de Aplicativos (APM), que é uma ferramenta de automação de aplicativos móveis e usando a APM e o Selenium, você pode ainda alcançar automação de aplicações móveis. Isso é útil quando seu aplicativo de teste também é suportado nos dispositivos móveis e quer apenas uma mecanismo para executar os mesmos casos de teste em ambos os navegadores web e em dispositivos móveis. - **Limited execution**: Quando discutimos os componentes do Selenium, disse que com o WebDriver é possível executar apenas execução sequences. No entanto, em scenario's reais, não podemos apenas viver com isso. Precisamos ter um mecanismo para executar nossos casos de teste concorrentemente em várias máquinas, bem como em vários navegadores. Embora seja uma limitação do WebDriver, o que o Selenium oferece é algo chamado Grid, que nos ajuda a atingir isso, e vamos ver brevemente o que o Grid é sobre. - **Limitações de raporthood**: O WebDriver fornece um sistema de raporthood limitados; ele pode criar relatórios básicos, mas o que precisamos é um sistema de ferramentas de raporthood mais sofisticado. No entanto, ele oferece suporte para ferramentas como TestNG ReportNG, Extent Reports e muito mais, que você pode integrar com o Selenium e gerar boas apresentações. Outros desafios para o Selenium incluem o fato dele não ser muito bom para teste de imagens, especialmente as projetadas para automação de aplicações web, mas temos outras ferramentas que podem ser usadas junto com o Selenium, como Autoit e Sun. Quando você olha esse tudo ao redor, o Selenium continua a fornecer uma solução completa para as necessidades de automação de você, e isso é a beleza de Selenium e isso é o motivo pelo qual tornou-se o Ferramenta de automação de hoje mais popular para automação. # Configuração do Selenium WebDriver com GeckoDriver (Firefox) Este guia explica como configurar o Selenium WebDriver para o Firefox usando GeckoDriver. ## Caminho do GeckoDriver Para usar o GeckoDriver, é necessário fornecer o caminho para o driver. Como o driver está localizado no mesmo caminho do projeto dentro da `pasta drivers`, o caminho será o seguinte: ```java System. setProperty("webdriver. gecko. driver", "drivers/gecko driver"); ``` ## Lançando o Navegador Firefox e o Website de Aprendizagem Simples Depois de configurar o GeckoDriver, é criado uma instância do navegador Firefox e o website de Aprendizagem Simples é aberto. ```java FirefoxDriver driver = new FirefoxDriver(); driver. get("https://www.simplylearn.com"); ``` ## Procurando Treinamento em Selenium Para procurar "Treinamento em Selenium" no website de Aprendizagem Simples, utilizaremos os seguintes passos: 1. Identifique o elemento de pesquisa na página e obtenha seu ID. 2. Utlize o método `findElementById` para localizar o elemento de pesquisa e envie o texto de pesquisa "Selenium". 3. Identifique o botão de pesquisa e clique nele. 4. Aguarde a aparência do treinamento em Selenium 3. 0. 5. Localize o link do treinamento em Selenium 3. 0 e clique nele. 6. Imprima o título da página após concluir todas as operações. ### Identificação do Elemento de Pesquisa Por favor, siga estes passos para identificar o elemento de pesquisa e seu ID. Para isso, clique com o botão direito sobre o campo de entrada de pesquisa, selecione "Inspecionar", e procurar o ID do elemento. ### Procurando Treinamento em Selenium Agora, vamos escrever um método chamado `searchTraining()` para procurar "Treinamento em Selenium". ```java public void searchTraining() { // Encontre o elemento de entrada de texto da pesquisa pelo ID e envie o texto "Selenium". WebElement searchInput = driver. findElement(By. id("searchInputID")); searchInput. sendKeys("Selenium"); // Identifique o botão de pesquisa e clique nele. WebElement searchButton = driver. findElement(By. id("searchButtonID")); searchButton. click(); // Aguarde a aparência do treinamento em Selenium 3. 0. // Para este demo, estamos utilizzando Thread. sleep. Thread. sleep(3000); // Localize o link do treinamento em Selenium 3. 0 e clique nele. WebElement selenium30TrainingLink = driver. findElement(By. xpath("//a[text()='Treinamento em Selenium 3. 0']")); selenium30TrainingLink. click(); // Imprima o título da página após concluir tudo. System. out. println("Título da página é: " + driver. getTitle()); } ``` ### Fechatura do Navegador Agora, vamos criar um método chamado `closeBrowser()` para fechar o navegador após executar a pesquisa. ```java public void closeBrowser() { driver. quit(); } ``` ## Executando o Script Para executar o script, crie uma instância da classe, chame os métodos de inicialização do navegador, procurar treino, e fechar navegador nos métodos `main`. ```java public static void main(String[] args) { ClassName classObject = new ClassName(); classObject. launchBrowser(); classObject. searchTraining(); classObject. closeBrowser(); } ``` Este script inicializa o navegador Firefox, navega para o website de Aprendizagem Simples, pesquisa "Treinamento em Selenium", e imprime o título da página. Além disso, aguarda que o link de treino em Selenium 3. 0 apareça e clica nele. Finalmente, o navegador é fechado. Você pode adaptar este script de acordo com suas necessidades e realizar as modificações necessárias. # Grade em Teste Automatizado: Entendendo o Selenium Grid A grade entra em jogo quando queremos minimizar o tempo de execução de testes executando-os em paralelo em várias máquinas. O design é tão bom que os comandos são distribuídos em várias máquinas onde deseja executar os testes e estes são executados ao mesmo tempo. Este método permite a execução em paralelo em diferentes navegadores e sistemas operativos. ## Arquitetura do Selenium Grid O Selenium Grid opera de acordo com um conceito hub-nó para atingir a execução em paralelo. - **Hub**: O Hub é configurado em uma máquina-mestre (também conhecida como um hub) executando um servidor Standalone selenium. Pode baixar o servidor do [website do Selenium HQ](https://www.selenium.dev/downloads/). Após obter o servidor, cria-se uma configuração de hub no nó. - **Nós**: Os nós são específicos das suas requisições de máquina e são criados utilizando o mesmo servidor Standalone selenium do servidor. Configura-se nós com base nas suas requisições de máquina. ## Como o Selenium Grid funciona? - A máquina-mestra, ou o Hub, controla quais nós deseja executar os testes. Pode configurar os testes para serem executados em todos os navegadores e sistemas operativos suportados. - OHub seleciona o nó adequado que atende os seus requisitos ou as configurações que criou e envia um comando ao nó para executar essas cases de teste no nó. Tudo é controlado através da sua máquina-mestra. ## Vantagens do Selenium Grid - **Velocidade**: O Selenium Grid permite uma execução mais rápida de testes, já que não há execução manual. Pode executar ou executar volumes grandes de testes em um curto período de tempo. - **Custo-efetivo**: Como ferramenta de código-fonte aberto, o Selenium está disponível gratuitamente. - **Cobertura de teste ampla**: o Selenium suporta um amplo espectro de linguagens de programação e de navegadores e sistemas operativos, incluindo suporte a navegadores headless. ## Desvantagens do Selenium Grid - **Escalabilidade**: O Selenium Grid tem relativamente uma escalabilidade pobre em comparação a aplicações modernas. Cada servidor está configurado adiantemente com uma sub-definição de instâncias de navegador exigidas, e a reconfiguração não é automática. - **Aplicação em nuvem**: o Selenium Grid pode ser executado em servidores virtuais , mas não foi projetado como uma aplicação nativa na nuvem. Não foi otimizado para aproveitar coisas como armazenamento distribuído, escalabilidade dinâmica ou falha automática. ## Perguntas analíticas em teste selenium Esta secção abrange perguntas relacionadas com devops, principalmente focando no Selenium Grid e outras concepções de devops. Abordaremos temas como cultura de devops, integração contínua, teste contínuo, gestão de configuração, recolha contêinerizada e monitorização contínua. Para informações mais detalhadas sobre o Selenium Grid, consulte a nossa [videos como Aprender Simplamente](https://www.simplylearn.io/). Se está interessado no aprendizado de devops, sinta-se à vontade para explorar o nosso outro conteúdo e videos. Feliz aprendizagem! # Implementando DevOps: Uma Guia ## Visão Geral Este guia fornece uma visão detalhada das fases e componentes envolvidos no implementação de DevOps. Ao final, você terá uma compreensão clara do processo, desde a avaliação de necessidades do cliente até ao monitoramento contínuo e manutenção. ### Section 1: Entendendo o DevOps Projetos massivos que você está passando por necessitam apenas de trabalho em pequenas micro-serviços ou seções de código. Isso permite detectar e corrigir problemas mais rapidamente do lado da empresa. Os benefícios são fantásticos do ponto de vista do cliente: - As respostas ocorrem continuamente, mantendo o cliente informado de que você está ouvindo suas exigências e responder de forma adequada. - Um ambiente mais estável é fornecido, e ele pode ser escalado para atender às demandas do número de clientes que estão usando seus serviços. ### Section 2: Aproximando-se de um Projeto DevOps Existem três etapas essenciais ao trabalhar em um ambiente DevOps: 1. **Fase de Avaliação**: É a etapa de ideia de céu azul, onde você discute ideias com líderes de negócios e desenvolve uma solução para atender às demandas do cliente. 2. **Fase de Prova de Conceito (PoC)**: Desenvolva uma PoC, que pode ser tão simples quanto um esboço ou tão complexo quanto uma versão miniature do aplicativo final. Garanta que a PoC é detalhada o suficiente para receber feedback e validar a solução escolhida. 3. **Fase de DevOps**: Implemente a solução usando práticas de entrega ágil, enquanto também incorpora analíticas e sensores para validar o sucesso. ### Section 3: Continuous Delivery vs. Continuous Deployment O continuous delivery se refere à segura implantação de código para produção, garantindo que as operações comerciais e funcionais sejam executadas conforme o esperado. O continuous deployment se refere à automação da implantação de ambientes de produção, permitindo implantações mais rápidas e mais robustas no desenvolvimento e processos de lançamento de software. ### Section 4: Continuous Integration e Continuous Deployment Continuous Integration (CI) e Continuous Deployment (CD) trabalham de forma harmoniosa. As ferramentas de desenvolvimento, de containerização e de teste devem sempre refletir o ambiente de produção, eliminando surpresas quando as soluções são implantadas no ambiente de produção. ### Section 5: O Papel da Gestão de Configuração no DevOps A gestão de configuração tem três áreas distintas: 1. **Gestão de mudanças de escala rápida em vários sistemas**: Você deve ter experiência significativa nessa área. 2. **Justificativa empresarial**: A padronização na configuração de recursos permite obter mais com menos pessoas e ambientes operacionais maiores. 3. **Escalabilidade**: As ferramentas de gestão de configuração podem gerenciar servidores e domínios, incluindo aqueles implantados em plataformas cloud ou privadas. ### Section 6: Monitoramento Contínuo O monitoramento contínuo fornece monitoramento 24/7 e resposta rápida às alterações, garantindo que sua rede funcione sempre corretamente. Benefícios principais incluem: - Monitoramento de toda a rede para alterações. - Identificação e relatório de ameaças imediatamente. - Garantia de que o software e serviços certos estejam em execução nos recurs # Executando a Solução em Sua Máquina Local Esta seção explica as vantagens e etapas para executar a solução em sua máquina de desenvolvimento local. ## Vantagens - Trabalho offline: Ter uma cópia completa da solução em sua máquina local permite trabalhar eficientemente sem internet. - Escalabilidade: Um time pode facilmente escalar para Europa, Ásia, América do Norte e América do Sul sem se preocupar com questões de distribuição de código ou compatibilidade. - Recuperação de desastres: Se o servidor principal cair, cada membro do time terá uma cópia do código, reduzindo o tempo de parada e garantindo uma fácil reação quando o servidor volta online. ## Comandos do Git para Trabalhar com Soluções ### Clonando um Repositório do GitHub Para baixar qualquer repositório do GitHub para sua computador, utilize o seguinte comando Git: git clone [URL do Repositório] ### Enviando Código da Sua Sistema Local para um Repositório do GitHub Para enviar código da sua máquina para um repositório do GitHub, siga estas etapas: 1. Conecte o repositório local ao repositório remoto: git remote add origin [URL do Repositório GitHub] 2. Envie seus arquivos para o ambiente master: git push origin master ### Comparando um Repositório de Urso (Bear) com um Repositório de Git padrão - Repositório Git padrão: inicializado usando `git init`, cria uma pasta de trabalho e armazena a história de revisão em uma subpasta. - Repositório Git de Urso (Bear): inicializado usando `git init --bare`, não contém arquivos de trabalho ou arquivos verificados localmente e armazena a história de revisão na pasta raiz. ### Renomeando um Arquivo No Git, utilize `git mv` para renomear um arquivo. ### Reverter um Commit Há duas formas de reverter um commit: 1. Remova o arquivo em um novo commit: git commit -am "Comentário para remoção do arquivo ruim" 2. Crie um novo commit que desfaz todos os mudanças do commit ruim: git revert [ID do Commit] ### Diferenças Entre `git fetch` e `git pull` - `git fetch`: baixa e baixa dados de um novo repositório, mas não integra nenhum dos dados novos nos arquivos de trabalho ativos. - `git pull`: atualiza a linha de cabeça atual com as mudanças mais recentes do servidor remoto, baixa os dados novos e os integra com os arquivos de trabalho ativos em sua máquina. ### Git Stash Permite modificar seus arquivos sem interromper a linha principal. Guarda temporariamente seus alterações para que possa voltar a elas mais tarde. ### Merge e Rebase - `git merge`: faz o merge de uma branch com a linha principal. - `git rebase`: permite reiniciar e reescrever a história do projeto, criando uma nova linha principal que ignora todas as outras branches anteriores. ### Encontrar alterações em um commit Para listar os arquivos que foram modificados em um determinado commit, use o seguinte comando: git diff-tree -r --name-only [Hash do Commit] ### Conflitos de Merge e Resolução Os conflitos de merge ocorrem quando duas branches estão em competição com comitados e você precisa determinar quais arquivos # Jenkins Pipeline: Princípios Chave e Uso Este documento fornece uma visão geral dos princípios chave e aspectos de trabalho com o Jenkins Pipeline. Passaremos por quatro áreas principais: pipeline, nó, etapa e dependências em Maven. ## Pipeline O pipeline se refere ao modelo de entrega continuada (CD) definido no Jenkins. - **Nós**: Máquinas que faitem parte do ambiente Jenkins dentro do pipeline. - **Passo**: Uma tarefa simples que diz ao Jenkins o que fazer em um determinado ponto no tempo. - **Etapa**: Um subconjunto conceitual de tarefas realizadas ao longo do pipeline. As tarefas podem ser de compilação, teste e implantação. ## Dependências em Maven O arquivo usado para definir dependências em Maven é o **pom. xml**. ## Tipos de Pipeline Jenkins 1. Pipeline Scripted: Baseado no script Groovy como a língua específica do domínio para o Jenkins. Os blocos de notas são usados ao longo do pipeline, a esquerda mostra o script e a direita mostra a declaração real para cada seção. 2. Pipeline Declarativo: Oferece um sintaxe simples e amigável para definir o que o pipeline deveria parecer. Os blocos são usados para definir a obra realizada em um pipeline declarativo. ## Backup do Jenkins Para criar uma cópia de segurança do Jenkins: 1. Faça backup em Jenkins periódicamente para o seu diretório de casa de Jenkins. 2. Crie uma cópia do diretório. ## Cópia do Jenkins para outro servidor 1. Mova um trabalho de um Jenkins para outro: faça cópia do diretório correspondente do trabalho. 2. Crie uma cópia de um diretório de trabalho existente e renomeie-o com um nome diferente (clonando). 3. Renomeie um trabalho existente: renomeie o diretório. ## Segurança no Jenkins A segurança é fundamental no DevOps, e o Jenkins fornece o centro central de todos os trabalhos realizados em um ambiente DevOps. - O Jenkins possui seu próprio banco de dados interno que usa dados de usuário seguros da base de usuários e senhas. - É possível usar um servidor LDAP (Protocolo de Acesso Ligero Diretório) para autenticar os usuários do Jenkins. - É possível configurar o Jenkins para autenticar utilizando OAuth, um método de autenticação mais moderno. ## Implementação de uma Compilação Personalizada de um Plugin de Núcleo em Jenkins 1. Copie o arquivo do plugin com a extensão . hpi para o subdiretório de plugins do diretório de casa de Jenkins. 2. Remova a diretório de desenvolvimento de plugins se houver uma. 3. Crie um arquivo vazio chamado `plugin. hpi. pinned` e reinicie o Jenkins. ## Desligando temporariamente a Segurança no Jenkins Se o usuário administrativo se bloqueou no console do administrador: 1. Localize o arquivo fake e mude-o para `False` para desativar a segurança. ## Agendando e Executando Trabalhos em Jenkins 1. Comitamento de código fonte coloca novos códigos no repositório. 2. Depois da conclusão de outros trabalhos (caso haja dependências em tramas). 3. Em um horário específico (trabalhos agendados). 4. Manualmente pelo reinício do Jenkins. ## Reiniciando o Jenkins manualmente 1. Força o reinício sem aguardar para que todos os trabalhos se concluam: use a URL do Jenkins que você tem para o ambiente /restart. 2. Permitir que todos os trabalhos em execução se concluam antes do reinício: use o comando URL para o ambiente Jenkins /safe restart. ## Teste Continuo com Selenium 1. Componentes Selenium: IDE de Selenium, Controle Remoto do Selenium (RC), Selenium WebDriver, Selenium Grid. 2. Exceções do WebDriver Selenium: Timeout, ElementNotVisible, NoSuchElement, SessionNotFound. 3. Selenium e Outras Ferramentas DevOps: Sim, pueden rodar em ambientes diferentes. Para navegadores web do Android, utilizar o Motorista do Android. 4. Tipos de Testes Selenium: Funcional, Regressão, Carregamento. 5. Obter o Texto de um Elemento Web: `element. getText()`. 6. Ação no Teclado e no Rato: Sim, com a API de Interação de Usuário Avançada. 7. Método Não de um Elemento Web: B `size`. 8. `findElement` vs `findElements`: `findElement` encontra o primeiro elemento, `findElements`encontra todos os elementos. 9. `driver. close` vs `driver. quit`: `driver. close` fecha a sessão da janela do navegador atual, `driver. quit` fecha todas as janelas do navegador e termina a sessão do Web Driver. 10. Submissão de um Formulário usando Selenium: `element. submit()`. ## Gerenciamento de Configuração com Certificados SSL no Chef - O SSL fornece segurança privada e emparelhamentos privados e públicos, garantindo uma ambiente seguro em toda a sua rede. - O SSL garante que o Chef está validando contra os nós reais (não imitadores) quando usa o modelo privado-público do SSL dentro do SSL. - O comando a seguir para parar ou desabilitar o serviço HTTP quando o sistema inicia: `systemctl disable httpd. service`. ## Kitchen de Teste - **Kitchen de Teste**: Ferramenta de linha de comando que permite testar seu cookbook antes de enviá-lo para um nó real. - Comandos: `Kitchen create`, `Kitchen destroy`, `Kitchen converge`. ## Cliente do Chef vs Aplicar o Chef - Chef Apply valida a receita, enquanto o Chef Client olha para aplicar e validar todas as receitas. Este documento fornece uma visão geral de temas técnicos relacionados à infraestrutura de TI, com ênfase em Puppet, Ansible, Docker e containerização. ### Puppet #### Classes em Puppet Uma classe em Puppet é um bloco nomeado de configurações contendo serviços, ficheiros, pacotes, etc. ``` class meu_class { # Bloco de configuração } ``` #### Funções em Puppet Em Puppet, uma função é um bloco independente de tarefas, ficheiros de variáveis e modelos embutidos no playbook. ``` - hosts: webservers funções: - função_web ``` #### Utilizando Aspiras em Ansible As aspiras em Ansible são usadas para diferenciar strings e variáveis não definidas, e para construir instruções condicionais quando usadas com variáveis. ```plain {% se foo foi definido %} {{ foo }} {% final %} ``` #### Reutilizando e Redistribuindo Conteúdo com Ansible Para reutilizar e redistribuir conteúdo em Ansible, você pode: 1. Incluir um módulo subordinado ou outro ficheiro no seu playbook. 2. Importar um include para garantir que um ficheiro seja adicionado apenas uma vez. 3. Usar funções para gerir tarefas no playbook. ### Differeças entre Ansible e Puppet - Ansible é sem agente, baseado em Python, e utiliza ficheiros de configuração em YAML. Não suporta Windows. Em contraste, Puppet é agente-based, escrito em Ruby, utiliza um DSL para ficheiros de configuração, e possui suporte nas placenas operacionais sistemas. ### Docker #### Arquitetura de Docker O Docker correciona em uma arquitetura cliente-servidor. O cliente do Docker corre na linha de comando e o servidor do Docker corre como uma API REST na linha de comando. Ele interage com o sistema operativo para construir imagens do Docker e rodar contêineres. #### Registo de Docker O registo de Docker é um serviço para hospedagem e distribuição de imagens de Docker entre os utilizadores. #### Vantagens do Docker sobre máquinas Virtuais - Os contêineres do Docker consumem significativamente menos espaço do que as máquinas Virtuais ou dedicadas. - O tempo de arranque do Docker é mais rápido do que as máquinas Virtuais. - Os contêineres do Docker têm melhor desempenho, pois são hospedados num único Docker imagem. - O Docker é altamente eficiente e fácil de escalas, especialmente quando trabalhar com o Kubernetes. - Os contêineres do Docker são portáteis entre várias plataformas. - Os volumes de dados do Docker podem ser partilhados e reutilizados entre vários contêineres. #### Docker Swarm O Docker Swarm permite que os administradores de sistemas e desenvolvedores criem e gerenciem grupos de nós de Docker dentro da plataforma do Docker. ## Conclusão Entender estas ferramentas e plataformas é fundamental para qualquer profissional da TI. Ter um conhecimento profundo de suas diferenças e semelhanças fará com que se destaque no processo de seleção de emprego. # Cr manipulador de configurações e automação de máquinas virtuais: Chef, Puppet, Ansible, e SaltStack Para seguir dentro da formatação Markdown, será criado um conteúdo que receberá a tradução do texto: ```markdown # Para usar Chef, Puppet, Ansible e SaltStack: uma comparação Este artigo será uma introdução a Chef, Puppet, Ansible e SaltStack, além de analisar cada um destes ferramentas de gestão de configuração e automação de máquinas virtuais. Serão apresentadas as principais vantagens e desvantagens em uma comparação entre eles. ## Chef Chef é uma ferramenta robusta e flexível de gestão de configuração com recursos para a orquestração de aplicações, manutenção de segurança e automação de infraestruturas. A sua principal vantagem reside no seu expresso syntax DSL com módulos para recursos e recursos móveis. ### Pré-requisitos - Instalar a Chef Developer Kit (ChefDK) no sistema `https://chef.io/chef-dki/` - Instalar o plugin do Chef Berkshelf (se usar o Chef) ### Recursos clave - Inspec (verificar a conformidade com a configuração, leia-se os ficheiros de código e recordar outras ferramentas de teste) - Knife (ferramentas de linha de comando para o desenvolvimento e utilidade diária do Chef) ## Puppet Puppet é uma ferramenta de gestão de configuração de longa data que permite automatizar a manutenção de recursos e a infraestrutura dos servidores. O seu principal recurso reside no poder de importar tipicamente os scripts de Ruby e no conceito de Recurso. ### Pré-requisitos - Tener um SL 7 ou um Ubuntu 16. 04 de fatura os pre-requisitos minimos para a instalação do Puppet - Instalar Facter 3 (um ferramenta para obter dados sobre o sistema) ### Recursos clave - Facts (facts about your nodes) - Modules (para criar e configurar vários manifestos numa soma) ## Ansible Ansible é uma ferramenta de automação de infraestrutura que irá configurar e manter recursos IAAS e PaaS. O seu principal forte reside na leveza e na simplicidade do seu lotar de duas dependências. ### Pré-requisitos - Instalar o software python (sugerência de versão python 2. 7 ou 3. 5) ### Recursos clave - Playbooks (fish-like script) - Roles (modular organização de recursos) ## SaltStack SaltStack é uma ferramenta de gestão de configuração Open Source simplificada e de altísima velocidade, que é utlizada para gerenciar, automatizar infraestruturas e aplicações. O principal recurso reside na utilização do SSH (SSH árias) para estabelecer a comunicação entre a sala do mestre e a máquina recebeu. ### Pré-requisitos - [Instalar e configurar o SaltStack](https://docs.saltstack.com/en/latest/topics/tutorials/install_salt/minute_install_on_a_single_machine.html) ### Recursos clave - State (estado de servers) - Ornitica (para a configuração e manutenção de estádios) - Exchange (forma de gerir as atualizações entre vairios mestres) Em Julia para continuar a esplorar o verdadeiro potencial de cada uma destas ferramentas. --- ``` URL: https://www.youtube.com/watch?v=O1s16cYzC10&t=0s Idioma: en Olá à todos em Portugal, bemd-vindos ao canal Simply Learn Portugal! Nesta sessão, faremos uma comparación de Chef, Puppet, Ansible, e SaltStack, gostosamente a partir da instalação até um caso de uso completo. Começaremos com a comparação entre Chef, Puppet, Ansible, e SaltStack, seguido de uma introdução a cada uma das ferramentas. Então, aprenderemos sobre o Chef, seguido da instalação local. Após a cobertura dos fundamentais, começaremos com um tutorial completo onde irá aprender a utilizar o Chef com um conslike opção mãos-on. Em seguida, começaremos com Puppet, e finalmente, irá ter Ansible na sessão. Enfim, irá concluir a sessão com as principais questões frequentes para as entrevistas, de modo a evitar difícilmente de>"perguntas" durante as suas entrevistas. Portanto, espero que eu me tenha mostrado claro o que há na agenda, mas antes de começarem, recuerde-se que terece subscrito ao nosso canal Simply Learn Portugal, e não esqueça de ativar a notificação para nunca perde-se uma actualização do Simply Learn Portugal. Sem mais ado, avante-se! Olá, este é Matthew com Simply Learn Portugal, e hoje, iremos comparar os quatro melhores para o seu ambiente operativo: é Chef, Puppet, Ansible ou SaltStack? Todos nós iremos ir en confrontramente, so então, vamos através do cenário e por que você deve utilizar estas ferramentas. Portanto, jogaremos o caso de Tim. Tim é o nosso administrador de sistema e Tim é com felicidade que trabalha em todos os sistemas na rede. Mas o que acontece se um sistema der bug, se um servidor der cerro? Bem, Tim sabe exatamente o que fazer para resolver o fogo rapidamente. Mas o nosso problema fica difícil para Tim caso vários servidores victimizem-se particularmente se tivermos redes grandes e que sejam em expansão. Portanto, Tim realmente precisa ter uma ferramenta de gestão de configuração. E agora reencontraremos o que é a melhor ferramenta para ele, porque ferramentas de gestão de configuração podem tornar Tim parecer um super-estrela. Bem, vamos enfrentar todos os atletas e ver quais podem ser usados. Os atletas que vamos passar em diante são Chef, Puppet, e Ansible. Temos vídeos de muitas destas ferramentas e ferramentas que podem ver para ver uma perspetiva ou ver um aprofundamento de como eles funcionam. Então, vamos conhecer alguns de nosso atletas: Vamos usar Chef como nosso primeiro atleta. ``` ``` # Análise comparativa de ferramentas de gerenciamento de configuração: Chef, Puppet, Ansible e SaltStack Esta análise fornece uma visão geral de quatro ferramentas de gerenciamento de configuração populares: Chef, Puppet, Ansible e SaltStack. Cada ferramenta tem como objetivo suportar organizações grandes e heterogeneas e foi escrita em Ruby. ## Chef O Chef é uma ferramenta aberta-source que permite configurar e gerenciar grandes ambientes de forma efetiva. Por padrão, é uma ferramenta open-source escrita em Ruby e Erlang. ### Características Chave - **Receitas e cookbooks**: O Chef utiliza receitas que são compiladas em cookbooks. Esses cookbooks definem como configurar um nó, que é uma seleção de servidores configureados de uma determinada maneira. - **Comunicação**: O Chef comunica entre os nós para entender quais nós estão sendo afetados e necessitam de instruções. Você também pode enviar instruções do servidor para os nós para atualizações maiores ou menores. ### Vantagens - Uma grande coleção de receitas para configuração rápida do ambiente. - Integra bem com Git para controle de versão forte. ### Desvantagens - Um curva de aprendizado considerável do iniciante ao especialista. - Dependência ao Ruby como língua de programação. - O servidor possui poucos recursos para o controle, dependendo da comunicação de rede. ## Puppet O Puppet é semelhante ao Chef, com algumas diferenças. Ele também foi projetado para suportar organizações grandes e heterogêneas e é escrito em Ruby. ### Características Chave - **Manifests**: O Puppet utiliza manifests para escrever código. - **Infraestrutura de mestre-escravo**: O Puppet possui um servidor mestre que envia os manifests para os clientes via conexão SSL. ### Vantagens - Uma comunidade forte para apoio e informações. - Um mecanismo de relatórios bem desenvolvido para o entendimento da infraestrutura. ### Desvantagens - Substancial requer aptidão em Ruby para tarefas avançadas. - O servidor possui poucos recursos para o controle, dependendo da comunicação de rede. ## Ansible O Ansible é ligeiramente diferente do Chef e do Puppet. Ele distribui instruções para o ambiente de servidores sem uma estrutura cliente-servidor ou mestre-escravo. ### Características Chave - **Playbooks e Inventory**: O Ansible utiliza playbooks contra um Inventory de servidores para distribuir instruções. - **Linguagem**: As instruções do Ansible são escritas em YAML, que é fácil de aprender se você conhece o XML. ### Vantagens - Necessidade de um agente instalado em nós remotos e servidores. - O YAML é fácil de aprender e rápido para se tornar hábil. ### Desvantagens - Desempenho menor do que outras ferramentas da lista, mas ainda superior ao setup manual do servidor. - O YAML, embora fácil de aprender, não é tão poderoso quanto o Ruby para tarefas avançadas. ## SaltStack O SaltStack é uma ferramenta baseada no CLI que gerencia toda a ambiente via linha de comando ou terminal. ### Características Chave - **Grains**: O SaltStack distribui instruções para o que eles chamam de grains, que é sua rede. - **Linguagem**: As instruções são baseadas em Python, mas podem ser escritas em YAML ou DSL. ### Vantagens - Fácil de usar uma vez que está em execução. - Bom mecanismo de relatórios para operadores em um ambiente de devops. ### Desvantagens - Setup mais difícil do que outras ferramentas, mas está se simplificando com lançamentos mais recentes. - Falta uma interface gráfica para criar e gerenciar ambientes. ## Comparação - **Arquitetura**: Chef, Puppet e SaltStack possuem arquitetura cliente-servidor, enquanto o Ansible é uma solução de cliente apenas. - **Fácil de Configurar**: O Ansible é a ferramenta mais fácil de configurar. Chef, Puppet e SaltStack não são difíceis de configurar, com boas instruções disponíveis online. - **Linguagem**: Chef e Ansible são procedurais, especificando como as tarefas devem ser feitas. O Puppet e o SaltStack são declarativos, especificando apenas o que deve ser feito. - **Escalabilidade**: Todas as ferramentas são projetadas para escalabilidade. - **Ferramentas de Gerenciamento**: Ansible e o SaltStack têm ferramentas de gerenciamento easy-to-use. O Puppet e o Chef possuem ferramentas de gerenciamento mais difíceis de aprender, requerendo aprendizado da DSL do Puppet ou do Ruby DSL. - **Interoperabilidade**: Alta interoperabilidade nos quatro casos. - **Disponibilidade na andamento (Cloud)**: O Ansible e o SaltStack possuem limitação de disponibilidade na cloud. O Puppet e o Chef são disponíveis em Amazon e Azure. - **Comunicação**: O Chef utiliza sua própria ferramenta knife, O Puppet utiliza SSL. # Chef: Automatização da Gestão da Sua Infraestrutura Quando surge algum desafio, especialmente quando tem vários sistemas, pode ser difícil gerir-los manualmente, particularmente quando não é possível alcançá-los com rapidez o suficiente. O problema que começa a surgir é que os ambientes não estão sincronizados. Neste caso, Chef um salva-vidas. Vou apresentar-lhe conceitos por detrás dele e por que está ferramenta é provavelmente aquela que deseja utilizar em seu ambiente. Então, o que é realmente Chef? Chef é uma maneira de utilizar código para kitchenizar o seu ambiente físico do hardware. Basicamente, escrevemos scripts em Chef que podem gerir o ambiente para a essência, de maneira que você não precisa gerir o ambiente em uma base de hardware-a-hardware. Em vez disso, Chef garante que cada sistema está automaticamente configurado para os estados apropriados que satisfazem as exigências que você definiu no seu código. Isso significa que você não terá problemas onde o hardware começa a Fallir por não referenciar o código para reiniciar o estado dentro deste ambiente. É isso que fará você um administrador de sistemas feliz. Vamos passar pelos mecanismos por trás de como isto funciona com Chef: ## Chef: A Ferramenta de Automação Chef é fundamentalmente uma ferramenta de automação que converte a infraestrutura em código, e você costumará ouvir o termo **Infrastructure as Code (IaC)**. Este inicia com o trabalho que o Chef realizou, pois tomamos as políticas que o sua organização criou e convertemos-as numa linguagem de script que pode ser então implementada de forma automática. Isto permite que o Chef gerencie múltiplos sistemas bem facilmente, considerando como vasto e profundo nosso sistema torna-se, é muito fácil ver como isto pode ajudá-lo como um administrador de sistemas. O código é depois testado continuamente e implantado por Chef de maneira que possa garantir que os seus padrões e a apropriada configuração para o seu hardware e ambiente de execução estão sempre mantidos. ## Receitas: O Coração de Chef Quando você cria realmente as receitas para o Chef, trabalha em uma estação de trabalho e escreve seu código, o qual é referenciado como uma receita. A receita é escrita numa linguagem chamada Ruby. É importante notar que existe uma quantidade enorme de exemplos de receitas de ruby que foram criados pela comunidade de código aberto. Para funcionar, você deverá utilizar `knife` como a ferramenta de linha de comando que liga entre as receitas e o servidor. A sua receita é a instrução, e o `knife` é a ferramenta que faz funcionar esta instrução e define o estado apropriado do ambiente de execução do servidor. Quando cria mais de uma receita, começa a criar uma coleção, estas coleções são referenciadas como **casseroles**. Pode trabalhar com um ambiente como uma rede grande em que você tem muitos nós (potencialmente centenas de servidores) que possam ter que ter um estado consistente e igual e você organiza esse seu livro de receitas e utiliza esse livro de receitas para garantir que o estado de cada um dos seus nós é consistente com a ajuda do Chef. Já na sua rede de nós do Chef, há a possibilidade a algumas vezes de que um dos seus nós tenha falhado. Se há dois nós falhados, então um sinal de retorno à trás para o servidor é enviado e informação sobre a estrutura do último nó identificada e definida no livro de receitas é enviada para os nós que falharam para serem reinicializados. Pode ser notado que isso é uma situação muito rara na rede de setup do Chef. ## Caso de Uso: Herpolium Vejamos um caso de uso real com Herpolium, um banco, e o maior banco de Israel. Eles utilizam uma mistura de servidores Linux e Windows que precisam mantê-los, o que requer um grande trabalho em configureação constantemente. Isto levou a problemas no passado. O desafio que a equipe do Herpolium Encontra-se com era a criação e a fortalecimento do software que executa as tarefas principais e repetíveis numa base de sistemas Windows e Linux, assim, não importava quem estivesse fazendo a obra, havia consistência na obra que era feita. Chef resolve esses problemas e esteve à frente no produto preferido para Herpolium. Eles foram capazes de escrever as receitas e os livros dos seus casseroles que podiam ser entregues de forma eficaz a rede e não importava o sistema que estava sendo utilizado. As receitas refletiam as normas que a equipe de administração de sistemas juntou e conseguiram garantir que cada script pudesse ser testado e utilizar as ferramentas padrão de teste para os scripts. Não importava qual ambiente que o Apollo tinha se certos portos tinham que ser fechados ou se um firewall tinha de ser instalado ou modificado ou se as senhas fortes em dispositivo rotativo tinham que ser criadas, isto podia ser feito utilizando as receitas que o Chef oferece. Depois de terminadas, podiam ser embaladas numa única coleção de livro de receitas que podiam ser implantadas na rede inteira, garantindo uma consistência nos resultados para a empresa. Não importava se os livros de receitas eram sendo implantados em Linux ou Windows máquinas, como as receitas estavam sendo organizadas nas receitas e as estavam escrevendo numa linguagem chamada Ruby. Pode-se ir e modificar e atualizar aquelas suas receitas de acordo com o ambiente, então, se necessário a alteração para Linux tiver que ser madeira, então é possível manter que jeito o mesmo com todas as outras máquinas Linux ou todas as máquinas Windows, o que aumenta a capacidade de fortalecer e segurar o ambiente na rede inteira num intervalo de minutos com o Chef, em vez dos dias e semanas que demorou antes. Em resumo, a vida antes do Chef é complicada. Se um dos teus servidores sobe a bagaça, talvez possa ser reiniciado, mas se estás a trabalhar em um ambiente de Administração de Sistemas moderno, tens vários sistemas e se vários sistemas começarem a Fallir ou terem pontos criticos de falha, é difícil identificar onde estes pontos criticos estão e como solvê-los. O Chef resolve isso e isso faz por meio de transformação o ambiente que estás a gerir com hardware e aplicativo em código. Una vez o derriveres num código, podes depois garantir a um teste dessa códiga, garantindo uma experiência consistente todo um ambiente de rede. Bem-vindo ao Chef, uma ferramenta que pode ajudá-lo a simplificar a sua administração de sistemas. Abaixo encontra o texto traduzido, formatado no Markdown e mantendo as regras definidas, com formatos de tradução correta (hifenização e português europeu), com termos técnicos em inglês, preservando comandos e códigos inalterados e mantendo URLs intactas: ```markdown Instalação do Chef DK ===================== Agora que downloadamos o Chef DK foi de nossa parte próximo passo será instalá-lo no nosso sistema. Então, sou Chef DK que você baixou agora. Por favor, verifique se o download realizado é exatamente o que você encontrará abaixo para garantir que a instalação seja feita corretamente: ``` $ ls chef-dk-2. 8. 4-1. ubuntu16. 04. 01-amd64. deb ``` ### Instalação do Chef DK na sua máquina Reconfirme se você possui o arquivo lido correto acima: * `chef-dk-2. 8. 4-1. ubuntu16. 04. 01-amd64. deb` Instale a ferramenta Debian do Chef: ```bash $ sudo dpkg -i chef-dk-2. 8. 4-1. ubuntu16. 04. 01-amd64. deb ``` Você pode verificar a instalação do Chef usando o comando abaixo: * `$ chef --version` Referências: * [Download de Chef DK](https://downloads.chef.io/chef-dk/) ### Criação de um repositório Chef Antes de escrever uma receita, primeiros vamos criar um repositório Chef em nosso computador. Vamos chamar esse repositório "chef-repo" (repositório do Chef). Instale o Git no seu computador antes de prosseguir. ``` $ mkdir chef-repo $ cd chef-repo/ $ git init ``` Garry de Jong [Demo de instalação e criação do repositório Chef](https://www.youtube.com/watch?v=H8ri3L04hMg&list=PLC3y8DQjC4B7RvQQohKxccJK1SxqV2xKk&index=4) Na próxima etapa, seremos trabalhar no servidor na nuvem. ```markdown Instalação do servidor do Chef no Ambiente de Nuvem ------------------------------------------------- Link para a seção pertinente ============================= [Instalação do servidor do Chef no ambiente de nuvem | vídeo YouTube de 4: 58 min](https://www.youtube.com/watch?v=tYpORrBv_lI) Agora que sabemos como baixar e instalar o Chef DK, precisamos pegar o Chef DK instalado no seu sistema e carregá-lo no formato de servidor do Chef na nuvem. ### Registrar o chef-server. rb na chef-repo 1. Mude para a pasta do repositório do Chef: ```bash $ cd ~/chef-repo/ ``` 2. Renomeie o arquivo `chef-validator. pem` para `chef-server. rb`: ```bash $ mv chef-validator. pem chef-server. rb ``` 3. Agora acesse o site do Chef e crie uma conta baseado no email que você providenciou anteriormente, para simular um demo rápido, ou use a conta criada pelo escola como parte da seção 1. [Acesse o site do Chef](https://manage.chef.io/) criar uma conta gratuita 4. Agora faça o login em sua conta e tenha um console aberto na sua máquina e execute o comando abaixo na pasta do repositório do Chef: ```bash $ chef-zero start --google-cloud-project PROJECT_ID ``` Em que "PROJECT_ID" é o identity do seu projeto no Google Cloud Platform. ### Configurando o ambiente de servidor do Chef Agora configuraremos o sistema do servidor do Chef para comunicar com o Chef DK instalado no nosso computador. Outra coisa importante é que ative as chaves SSH para que você possa compartilhar arquivos com o servidor do Chef. 1. Primeiro, execute o comando a seguir no console do servidor do Chef para gerar uma nova chave privada e públicas: ```bash $ ssh-keygen ``` 2. Copie e cole a chave pública gerada acima para a pasta `~/. chef/client. pem` na sua máquina, em seguida, configure váriaveis de ambiente para que o Chef DK se comunique com o servidor do Chef da seguinte forma: ```bash export CHEF_SERVER_URL=http://host_name export KNUFE_CLIENT_CERT=~/. chef/client. pem export KNUFE_CLIENT_KEY=~/. chef/client. pem export KNUFE_SSL_CA_CERTS=~/. chef/ca. pem ``` Em que `host_name` é o nome do servidor do Chef que você configurou acima (fornecido pelo escola). Observe para segurança, utilize o comando `cat` para verificar qual a chave pública é geraida: ```bash $ cat ~/. chef/client. pem ``` ### Configurando o cliente do Chef Agora configuraremos a sua máquina cliente do Chef para compartilhar arquivos com o servidor do Chef usando a ferramenta Knife. 1. Para instalar o Knife, execute o comando a seguir: ```bash $ knife plugin install knife-ec2 ``` 2. Agora configure a Knife em sua máquina cliente faça uma cópia do arquivo `chef-validator. pem` para a pasta do cliente do Chef (o caminhos exemplo abaixo é especifico para Ubuntu): ```bash $ cp ~/chef-repo/chef-server. rb ~/. chef/ $ cp ~/chef-repo/kitchen. yml ~/. chef/ ``` 3. Verifique se você possui a chave `~/. chef/client. pem` para que esta geraida acima no servidor do Chef: ```bash $ cat ~/. chef/client. pem ``` Observe para segurança e recieme que ela é a mesma chave pública que fornecemos anteriormente no passo 2 do ambiente do servidor do Chef. 4. Agora verifique se você possui a chave pública, deixando-a ali para que o servidor do Chef possa verificá-la: ```bash $ mkdir ~/. chef/initial_knife. rb ~/. chef/five_hundred_open. pem ~/. chef/five_hundred_private. pem ``` 5. Todas essas configurações vão ajudar a te conectar ao servidor do Chef: ```bash $ knife bootstrap centos7 -x root -N centos7-lab --ssh-user ec2-user --ssh-port 22 --id-file ~/. chef/client. pem -i knifecookbook ``` Acima, "centos7" indica o nome da máquina, você provisoriamente pôde substituir por esse encaminhamento num servidor não-secretado apenas para fins didáticos, a sintaxe "500" é generíqua para virtual machines no environment do Google Cloud Platform, mas você deverá alterar o "porto" conforme suas configurações fornecidas pelo escola. O comando "knifecookbook" é o diretório contendo sua coleção de cookbooks no repositório git (fornecido pelo escola). Agora o cliente do Chef e o servidor do Chef estão conectados e você está pronto para iniciar a criação de sua primeira receita. Chegamos ao final da demo de instalação do Chef DK e configuração do servidor do Chef na nuvem, agora segue abaixo a lista de links para demais referências. ### Referências * [Guia de Referência do Chef](https://docs.chef.io/) * [Guia de Instalação do Kitchen](https://docs.kitchen.ci/installation.html) ``` ## Chef: Entendendo o Gerenciamento de Configuração Ao atravessar qualquer material anterior sobre o Chef, você pode ter visto o Ruby relacionado ao Chef, mas não o Erlang. Isso é porque o Ruby e o Erlang ambos são usados para construir o Chef, mas quando chega o momento de escrever o código no Chef, apenas é o Ruby. Estes são os códigos que são implantados em seus múltiplos servidores e executam configuração automática e manutenção. Isso é por que o Chef é ferramenta de gerenciamento de configuração. Utilizei o termo gerenciamento de configuração várias vezes, então vamos entender exatamente o que isso significa: ## Definição de Gerenciamento de Configuração O gerenciamento de configuração é uma coleção de práticas engenheiras que fornece um método sistemático para gerenciar entidades de maneira eficiente para implantação. Vamos quebrar isso: 1. **Gerenciamento de Configuração**: Coleção de práticas que gerenciam entidades. 2. **Entidades**: Código, infraestrutura e pessoal necessários para implantação eficiente. ## Código O código se refere ao código que os administradores de sistemas escrevem para configurar vários sistemas. ## Infraestrutura Infraestrutura consiste em sistemas e servidores que precisam ser gerenciados. ## Pessoal Times que cuidam desta infraestrutura. O código precisa ser atualizado sempre que a infraestrutura necessitar de uma nova configuração ou uma atualização no sistema operacional ou nas versões do software. Quando os requisitos da empresa mudam, a configuração da infraestrutura também precisa mudar. Também, as pessoas precisam coordenar-se. Se houver equipe de administradores de sistemas, quando uma pessoa faz uma alteração no código, outras pessoas que podem estar trabalhando em sistemas do mesmo tipo, como pessoa B, C, D, etc. , precisam estar cientes da alteração, por que esta foi feita, o que foi alterado e onde exactamente esta alteração foi feita. ## Configuração Push e Configuração Pull Existem dois tipos de gerenciamento de configuração: 1. **Configuração Push**: Neste caso, o servidor que guarda os arquivos com instruções para configurar seus nós empurra estes arquivos para o nó. O servidor tem controle completo. 2. **Configuração Pull**: Neste caso, os nós se movingem contra o servidor para first examinar se houve uma mudança nas configurações necessárias. Se houver uma mudança, os nós mesmos retiram esses arquivos de configuração. O Chef segue o modelo Pull, e veremos como ele realiza isso ainda mais em nossa vídeo. Um termo importante frequentemente associado ao Chef é a infraestrutura como código. Vamos entender o que isso significa: ## Infraestrutura como Código A infraestrutura como código é um tipo de infraestrutura onde o time de operações cuida de um código que executa várias operações auto-matizadas, em vez de precisar fazer todas as operações manualmente. Com esta funcionalidade, todas as suas políticas e configurações estão escritas em código. ## Componentes do Chef Agora, vamos olhar para os vários componentes do Chef: 1. **Estação de Trabalho**: O sistema onde o administrador de sistemas senta. Eles criam códigos para configurar seus nós. Estes códigos em Chef, escritos em Ruby, são chamados de receitas. 2. **Servidor**: A máquina intermediária que liga sua estação de trabalho e seus nódos. Este é onde todos seus livros de receitas são armazenados. 3. **Nódos**: Os sistemas que requerem configuração em uma arquitetura do Chef. Pode-se ter qualquer número de nódos. Em um nó, executamos o serviço ohai, responsável por coletar todas as informações sobre o estado atual do nó. Esta informação é então enviada para o servidor para ser comparada contra os arquivos de configuração e verificar se alguma configuração nova é necessária. O serviço do cliente do Chef é outro tais serviços em seu nó que é responsável por todas as comunicações com o servidor. Em uma arquitetura do Chef, não é necessário que cada nó seja idêntico, então cada nó pode ter uma configuração diferente. Agora vamos ter um olhar no arquitetura do Chef: ## Arquitetura do Chef ! [Arquitetura do Chef](https://www.relishapp.com/assets/chef/quickstart-39f27a5dce1a62c0c5e0d6d3de497a303b2c38c0.png) Nesta diagrama, temos uma estação de trabalho, uma máquina de servidor e dois nódos. Pode ser qualquer número de nódos. Primeiro, o administrador deve criar uma receita. Nas arquiteturas Chef, as receitas são apenas receitas falsas, vemos o funcionamento real das receitas mais tarde em nossa demonstração. Uma coleção de receitas forma um livro de receitas. Instruções para a criação de receitas reais e livros de receitas serão cobertas em nossa demonstração prática. Para enviar os livros de receitas para o servidor, utilizamos a ferramenta de linha de comando knife, que é responsável por transferir todas as suas receitas para o servidor, do seu trabalho. O comando para executar sua knife é `knife upload <livro_de_receitas>`. Em nossa próxima sessão, prosseguiremos com a demonstração prática utilizando o Chef. Fique atento! # Instruções para a criação do seu primeiro livro de receitas com o Chef Este guia irá te guiar através da criação de seu primeiro livro de receitas usando o Chef. ## Novo livro de receitas Para criar um novo livro de receitas, use o comando `chef generate cookbook` e especifique o nome do seu livro de receitas. Em nosso caso, chamaremos-o de `sample`. ``` $ chef generate cookbook sample ``` Depois de criar o livro de receitas, você verá que um hierarquia também foi criada automaticamente. Vamos olhar agora à hierarquia de nossa caixa de receitas. ### Verificando a hierarquia da caixa de receitas Mude para o diretório `sample` usando o seguinte comando: ``` $ cd sample ``` Para verificar a hierarquia, use o seguinte comando: ``` $ knife berks vendor ``` Aqui, você verá uma estrutura incluindo o diretório `recipes` onde editaremos as nossas receitas para criar uma nova uma. ### Criando uma receita Agora, vamos criar uma receita. Criaremos uma receita para instalar o pacote `httpd` no nosso nó CentOS e depois criar um ficheiro de teste index. #### Installar o pacote httpd Dentro do diretório `recipes`, abra o ficheiro `default. rb`. Aqui, escreveremos o código para instalar o pacote `httpd`, permitir a sua inicialização e iniciá-lo. ```ruby package 'httpd' do action : install # Enable the package after installation enables : true end service 'httpd' do action : start end ``` #### Criar o ficheiro de teste index Depois de escrever o código para instalar o pacote, garanta que funciona corretamente escrevendo um ficheiro index de teste. Por padrão, o caminho dos seus seus ficheiros HTML seguirá este padrão. ```html <! DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Bem-vindo</title> </head> <body> <h1>Bem-vindo à sua máquina</h1> </body> </html> ``` Agora, salve o ficheiro e saia do editor. ### Configurar o servidor Para configurar o servidor, você vai precisar da gestão de serviços do servidor Chef. Pode utilizar um servidor na nuvem, como faremos neste exemplo. 1. Abrir o seu navegador e aceder a <https://manage.chef.io>. 2. Se não tiver um perfil ainda, clique em "Clique aqui para começar" e preencha os detalhes obrigatórios. 3. Depois de se logar, terá a opção de criar uma organização. Introduza o nome e uma abreviatura para a sua organização e clique em "Criar Organização". 4. A partir da guía de administração, poderes a sua organização nome. Clique no seta e faça o download do kit inicial. 5. Grave o ficheiro e volte ao teu terminal. 6. Mova o `chefstarter. zip` ficheiro para a raiz e descompacte-o. ``` $ mv chefstarter. zip / $ unzip /chefstarter. zip ``` 7. Agora, mova o `chefstarter. zip` ficheiro para o diretório `cookbooks` dentro do repositório do chef. ``` $ mv /chefstarter. zip /caminho/ao/seu/repositório/do/chef/cookbooks/ ``` 8. Use o `knife` comando para enviar a sua caixa de receitas para o servidor. ``` $ knife upload cookbook sample 0. 1. 0 ``` 9. Verifique se a caixa de receitas foi enviada corretamente para o servidor usando o seguinte comando. ``` $ knife bootstrap SERVER_IP -U USERNAME -P PASSWORD ``` Substitua `SERVER_IP`, `USERNAME`, e `PASSWORD` pelos valores appropriados. Este comando irá te ajudar a ligar a sua estação de trabalho com o servidor e enviar a sua caixa de receitas. 10. Quando o livro de receitas for enviado, mova-se para a sua máquina de nó para verificar as alterações. 11. Abrir o teu navegador e visite `localhost` para ver o ficheiro index que criaste na tua estação de trabalho. Se é exibido corretamente, então é que configuraste corretamente o seu servidor Chef e executaste a sua primeira caixa de receitas! Nós lhe guiamos através da criação de uma caixa de receitas com o Chef, instalando o pacote `httpd`, implementando um ficheiro HTML, e configurando o servidor usando o Chef. *Nota: Este demo foca-se especificamente a utilização do Chef, mas se quiser aprender a Puppet, por favor faça um outro tutorial dedicado ao Puppet. Esperamos que este tenha sido útil! * # Puppet Master Componentes e Suas Funções Esta documentação fornece uma visão geral dos componentes do Puppet Master, de suas funções e de como eles funcionam juntos. ## Puppet Master O Puppet Master é um componente chave, que é sinônimo de Certificate Authority (CA). É responsável por: - **Identificar Clients**: O Puppet Master reconhece clients por meio de uma troca de certificados SSL. - **Assinatura de Certificados**: Depois que o Puppet Master receber um certificado do cliente, fornece o poder de assinar esses certificados. - Quando o Master assina um certificado, está basicamente dizendo que o cliente é registrado nele e concorda em trocar dados com este cliente. ## Puppet Client O Puppet Client é o sistema que requer configuração. O Agent é um serviço instalado no cliente responsável exclusivamente por todos os comunicações entre o Master e o Cliente. - **Coleta de Dados**: O Facter, um serviço presente nos clients, coleta todos os dados sobre o estado atual do cliente. - **Envio de Dados**: Este dado é depois enviado até o Puppet Master. - **Comparação com Manifesto**: No Puppet Master, este dado é comparado contra o Manifesto (arquivos de código). - **Envio de Manifesto**: Os resultados desta comparação determinam se o Manifesto precisa ser enviado até o cliente. - **Execução do Manifesto/Catalógos**: Se o Manifesto precisar de funcionalidade adicional, é compilado em catalógos e depois enviado até o cliente para execução. ## Comunicação entre Master e Cliente Antes de qualquer informação possa ser transferida entre o Master e o Cliente, é importante que esses componentes se reconheçam uns aos outros. Uma canal de comunicação encriptada deve ser estabelecida entre cada par de Master e Cliente. Todos os dados que são transferidos entre o Master e o Cliente fluiem através desta canal. ## Certificados SSL O coração do procedimento de reconhecimento de comunicações são os Certificados SSL. SSL abreviaturamente significa Secure Socket Layer, um protocolo de segurança que forma uma canal de comunicação encriptada entre dois componentes. Essa canal de comunicação encriptada garante que todos os dados passados por ela não são acessíveis por nenhum sistema externo, oferecendo completa segurança. Em uma situação geral, um sistema envia um certificado de cliente para o Master. Então, o Master verifica o certificado, verifica o nome de host e decide se quer se conectar com o sistema. Se fizer, ele assina o certificado e o retorna ao sistema. Quando o Master assina o certificado do cliente, ele é oficialmente um cliente. ## Demonstração do Puppet - Instalação de Apache em uma Máquina Cliente Para uma demonstração prática, utilizaremos o Puppet para instalar o Apache em uma de suas máquinas clientes. Será utilizada duas máquinas: um servidor (Master) e um nó (Client). Ambas são enviadas para uma máquina CentOS 7 e o Oracle VM VirtualBox é instalado para a demonstração. ### Master (Servidor) 1. Instalar o servidor do Puppet 2. Iniciar o serviço do Servidor Puppet 3. Fazer shift para a Máquina Cliente 4. Instalar o serviço do Agente do Puppet 5. Iniciar o serviço do Agente do Puppet 6. Executar o serviço do Agente 7. Com o Agente em execução, um certificado SSL é criado e o nome do host do nó é adicionado # Certificados Nosso caso, tendo apenas um cliente e tendo começado recentemente, deveríamos, em teoria, ter apenas um certificado. Aqui está o certificado para `localhost. localdomain`. ## Assinatura do Certificado 1. Para assinar o certificado, utilize o seguinte comando: ``` sign certificate request aqui ``` ## Implementação do Manifest 1. Procure-se o símbolo `>` e move-se para a pasta `manifest` e crie um ficheiro de lugar-holder: `sample. pp`. 2. Verifique se podemos aceder a este ficheiro do lado do cliente. ## Teste da Ligação 1. Agora, de pelo cliente e teste a ligação. O catálogo era um lugar-holder, portanto devemos colocar algum conteúdo no ficheiro de `sample. pp` e ver como a execução decorre. ### Escrita do Código 1. Abra o `sample. pp` no editor `vi`. 2. Introduza o seguinte código: ``` node <client_machine_hostname> { package { 'httpd': ensure => instalado, } } ``` 3. Guarde o ficheiro. 4. Agora, regresse ao cliente e teste a execução do manifesto. 5. Se o serviço Apache estiver em execução, pode aceder a ele através de `localhost` no seu navegador. ## Empresas que Utilizam o Puppet Nos dias atuais, muitas empresas se esforçam a utilizar o Puppet como a ferramenta de configuração principal, incluindo Spotify, Google e AT&T. Um exemplo de empresa que se beneficia do Puppet é a Staples. Por utilizar o Puppet em seu cloud discreto, conseguem salvar um tempo substancial na implementação e manutenção da infraestrutura, liberando tempo para novos projetos. ## Escrita de um Manifesto no Puppet 1. Os manifestos são utilizados para codificar como se configura especificamente um nó no seu ambiente de servidor. Estes manifestos são compilados em catálogos, que então são executados no cliente. 2. Cada manifesto é escrito na linguagem de Ruby com uma extensão `. pp`. 3. Os manifestos seguiam uma sintaxe simples, semelhante a que você talvez tenha visto se trabalhou com Ruby ou configurou sistemas antes. 4. Um manifesto pode conter vários tipos de recursos, e o palavrachave padrão pode aplicar um manifesto a todos os clientes, como: ``` file { 'sample': ensure => diretório, caminho => '/etc/sample', } service { 'apache': ensurer => activo, } ``` ## A Comunidade Puppet 1. A comunidade Puppet é uma comunidade rica e activa, com mais de 2, 900 colaboradores de projetos GitHub e quase 5, 000 módulos disponíveis no Puppet Forge. 2. Interagra com outros utilizadores do Puppet através de vários canais, como listas de correio, Slack, e o tag Puppet Labs no Stack Overflow. ## Puppet Forge O Puppet Forge é um cliente GitHub que fornece um repositório de código pré-escrito Puppet. Estes módulos são fáceis de personalizar e vêm com testes construídos. # Configuração do Servidor Puppet ## Início do Servidor Puppet - **Minutos** para iniciar o servidor Puppet, de modo que o servidor Puppet esteja agora em execução. - Também irei **ativar**-o ao iniciar: - utilizar `systemctl enable puppet server` para ativá-lo ao iniciar. ## Configuração do Nome de Domínio Totalmente Qualificado (FQDN) - Para configurar um FQDN, vá para o arquivo de hosts: - adicione `192. 168. 1. 23` e depois `puppet-server. local` e depois `puppet-server` ao final. - Se o nome atual for `puppet-master`, mude-o para `puppet-master. local` no arquivo de hosts. - A trapaça é ter o nome. local antes do endereço IP no arquivo hosts. ## Configuração do Cliente - A configuração do cliente é quase a mesma com uma diferença pequena. - O pacote que precisamos instalar no cliente é o **agente de puppet**. ### Instalação do Agente de Puppet no Cliente - Baixe os pacotes Zenio: - Utilize `wget https://apt.puppetlabs.com/debian/puppetlabs-release-pc1-xenial.deb` - Instale o pacote baixado: - Utilize `dpkg -i puppetlabs-release-pc1-xenial. deb` - Atualize as caches da aplicação em caso da máquina: - Utilize `apt-get update` e depois `apt-get upgrade` - Finalmente, instale o agente de puppet: - Utilize `apt-get install puppet-agent` ## Mapeamento de Certificado Cruzado entre SISTEMAS - Precisaremos fazer um mapeamento de certificado cruzado entre SISTEMAS: - Copie a entrada do arquivo hosts do cliente e adicione-o ao servidor. - Adiciona a entrada do master no lado do cliente. ## Criação de uma Solicitação de Certificado de Assinatura (CSR) - Vá para a pasta `opt/puppetlabs/puppet/bin` e execute `puppet agent t signing --server puppet-master. local`. - Isto criará uma CSR. - Verifique o número de certificados pendente por ser assinado no servidor. - Faça-Lhe assinar o certificado: - Utilize `puppet server ca sign puppet-client. local` ## Instalação de um Módulo de Puppet do Puppet Forge - Pesquise sobre o módulo Apache no Puppet Forge: - Utilize `puppet module install puppetlabs/apache` - Instale o módulo no master: - Vá para a pasta `/etc/puppetlabs/code/environments/production/modules` e execute `puppet module install puppetlabs/apache`. ## Configuração do Módulo - Crie um ficheiro `site. pp` na pasta `/etc/puppetlabs/code/environments/production/manifests`. - No ficheiro `site. pp`, especifique que o nó `puppet-client. local` deverá ter o módulo do Apache incluído. - Execute o agente do puppet no lado do cliente: - Isso lhe permitiráautomaticamente baixar o módulo do Apache e compilará-o. # Setup de Ansible - Ansible é uma ferramenta que pode automatizar a gestão de configuração de sistemas. - Uma pequena equipe de sistemas manager pode escrever código simples em YAML. - Estes códigos são implementados em centenas e milhares de servidores que configurations-os para o estado desejado. ## Instalação de Ansible - Baixe o ensible: - Utilize `ansible --version` para verificar se o ansible foi instalado. - Se não estiver, utilize `sudo apt-get install ansible`. - Instale Python 2. 7 necessária por ansible: - Utilize `sudo apt-get install python` ## Ficheiro de Ansible hosts - Crie um ficheiro `/etc/ansible/hosts` e especifique informações sobre a máquina do cliente. ## Jogador Ansible - Escreva um jogador no formato YAML e especifique as tarefas a serem executadas. - Execute o jogador utilizando o comando `ansible-playbook playbook. yml`. # Ansible: Ferramenta de Gestão de Configuração Este documento apresenta um vídeo de instalação e configuração para o uso de Ansible, uma ferramenta potente no ambiente DevOps. ## Instalação e Configuração ### Pré-requisitos - Verifique se o sistema já possui o HTTPD instalado. Não é experimentado, mas se o sistema não tiver o HTTPD, você precisará instalá-lo. - Execute o HTTPD, uma vez que este serviço pode não estar a rodar no seu sistema. - Adicione conteúdo ao servidor, desde que exista pouco ou nenhum conteúdo pré-existente. ### Verifique a Documentação Antes de seguir adiante, é importante revisar a documentação fornecida por Ansible. Esta documentação contém informações sobre as tarefas executadas, a disponibiliade do cliente, entre outras coisas. ### Execução do Playbook Se o playbook tiver sido executado: - O serviço HTTPD deve estar em estado de execução. - A página web criada deverá estar hospedada. (Digite `localhost` no seu navegador para verificar. ) Se todo estiver bem, podemos prosseguir para o nosso Sistema de Notas. ## Porque o Ansible? O Ansible é outra ferramenta que ajuda na gestão de serviços dentro da área de operações de DevOps. É especialmente útil ao trabalhar com vários servidores e quando o trabalho de manter uma configuração consistente de várias infraestruturas se torna desafiador. ### Áreas-chave que o Ansible Endereça 1. Automação. 2. Configuração. 3. Implementação. Usando Ansible, é possível acelerar e fazer a equipa de operações mais produtiva. ### Entendendo Ansible O Ansible utiliza codigo para automatizar a instalação e configuração de servidores. É possível escrever instruções que automatizam tarefas que são geralmente executadas manualmente. O Ansible é um servidor de configuração push, em oposição a outras ferramentas populares como Chef e Puppet, que têm uma arquitetura master-slave. ## Arquitectura do Ambiente Ansible ### Máquina local - A máquina local é o local onde se escrevem e gerenciam os playbooks do Ansible. - Concorde com a máquina local a todas as diferentes nodos (Saída de configurações diferentes). - Mantenha a lista de nodos nos teus ambientes. ### Gestão de Nodos - Mantém a estrutura do teu ambiente de rede. - Crie nodes baseado nos servidores na rede de hardware. - Conecta-se aos nodos via clients de SSH seguros. ### Playbooks - Núcleo do Ansible. - Define instruções para configurar nodos. - Escrito em YAML (YAML Ain't Markup Language). - Cada playDefine os nodos alvo e tarefas específicas para execução. ## Vantagens do Ansible - Simplifica a configuração de fármacas de servidor complexos. - Reduz o erro humano ao automatizar tarefas repetitivas. - Melhora a eficiência da tua organização. Para mais informações e um caso real do mundo, verifique a [documentação do Ansible](https://www.ansible.com/resources/documentation). Se tiver qualquer dúvida, por favor, posta-as nos comentários abaixo, e responderemos o mais rápido possível. Feliz automatização! 🤖🎉 Título: Guia Prático sobre Ansible =============================== Saiba mais sobre Ansible, uma ferramenta de automatização de configuração popular e em tendência no campo do DevOps. Este guia fornece informações sobre o que é Ansible, por que utilizar Ansible, sua arquitetura e funcionamento, os benefícios de utilizar Ansible e uma demonstração prática de sua instalação. Motivo de Utilizar Ansible -------------------------- Para entender melhor o motivo de utilizar Ansible, considere um cenário de uma organização onde Sam é o administrador do sistema. O sistema da organização consiste em todos os sistemas, como servidores Web, servidores de banco de dados e repositórios, entre outros. Como administrador de sistemas, Sam deve garantir que todos os sistemas estejam com as versões mais atualizadas do software. Ao considerar um pequeno número de sistemas, esta tarefa parece simples. Sam pode simplesmente navegar de sistema para sistema e executar as configurações necessárias. No entanto, isso não é o caso em uma organização, que pode possuir centenas ou milhares de sistemas. Isto faixa bastante a tarefa de Sam e ele precisa migrar de sistema para sistema executando a mesma tarefa repetidamente, o que o torna tedioso. Além disso, repetir a mesma tarefa apagar todo o espaço para inovação e criatividade, sem qualquer ideia ou inovação, como o sistema crescer. O pior de tudo, trabalho manual é vulnerável a erros. Neste ponto, entra o Ansible a jogar. Com o Ansible, Sam pode escrever códigos simples que são executados em todos os sistemas e os configuram para o estado desejado. O que é o Ansible ---------------- O Ansible é uma ferramenta de automatização de TI que automatiza as seguintes tarefas: - Orquestração: Orquestração significa a união de várias aplicações e garantir a ordem na qual estas são executadas. Por exemplo, para um web page que você precisa hospedar, esta página armazena todos os valores que ela recebe do usuário em um banco de dados. Por isso, o primeiro passo é garantir que o sistema tem um gerenciador de banco de dados e apenas depois você hospeda sua página web. - Gestão de Configuração: Gestão de configuração simplesmente significa que todos os sistemas são mantidos em um estado desejado desejado. Outras ferramentas que automatizam a gestão de configuração incluem Puppet e Chef. - Implementação: Implementação significa a implementação de aplicações em seus servidores de diferentes ambientes. Se você precisar implementar uma aplicação em 10 sistemas com diferentes ambientes, você não precisa fazer isso manualmente mais como o Ansible automatiza isso para você. Esta refrase foi mantida intacta pois contém um trecho em inglês: `actually the E is lowercase, it should be A<img emoji="grinning">in't lowercase, it should be YAML. YAML, que significa "YAML Ain't Markup Language", é uma linguagem ligeira e próxima à língua inglesa que certamente é a mais fácil de se entender e aprender pois é muito próxima à inglês. Arquitetura do Ansible ---------------------- O Ansible possui dois componentes principais: - Máquina Local: Esta é onde o administrador de TI fica e instala o Ansible. No outro extremo, encontram-se suas máquinas cliente. - Máquina Cliente: Estas são as máquinas que precisam ser configuradas. Nos casos do Ansible, não há nenhum software de suporte instalado nelas, somente as máquinas que precisam ser configuradas. Na sua máquina local, você também possui um módulo, o módulo é uma coleção de seus arquivos de configuração e em caso do Ansible estes arquivos de configuração são chamados de playbooks. Playbooks são escritos em YAML. Também possuímos o arquivo inventory, onde são mencionadas todas as máquinas que requerem configuração. No decorrer da demonstração, teremos uma melhor visualização de como o playbook e inventory estão escritos. Como o Ansible funciona ---------------------- Para entender como o Ansible funciona, tenha em mente que sua máquina local instala o Ansible. No decorrer de qualquer material anterior sobre o Ansible, você provavelmente a possa ter visto frequentemente associado ao termo 'agente sem suporte', isso é o que significa. Você instala o Ansible apenas na sua máquina local e não tem qualquer software ou plugin instalado nos clientes. Essa mágica consiste no fato de ter um custo mínimo na cliente e no node, permitindo que o aprendizado o aprenda rápido. Uma outra palavra que você encontrará frequentemente com o Ansible é configuração 'push'. Isto significa que a máquina local tem inteira controle e executa os arquivos de playbook em todos os nós. Em outras palavras, o Ansible “empurra” os arquivos de playbook para os nós. Os arquivos de playbook e inventory são escritos na máquina local e a máquina local comunica com os nós através do ssh. Neste passo, é possível que você colleja os fatores, que são os dados atuais da máquina. Esses dados são coletados a partir da máquina e enviados até a máquina local. Quando os arquivos de playbook são executados, as tarefas indicadas documentadas no arquivo são executadas. Caso as tarefas estejam desatualizadas quando o playbook é executado, apenas as mudanças que forem necessárias serão executadas e depois de serem executadas as máquinas serão configuradas no estado desejado. Benefícios do Ansible --------------------- O Ansible é agente sem suporte, eficiente, flexível, simples, prático e fornece relatórios automáticos. - Agente sem suporte: Isto significa que não é necessário instalar nenhum software ou plugin em sua máquina cliente, o que torna o Ansible muito eficiente. - Eficiente: O Ansible é eficiente porque agora temos mais espaço em nossos sistemas cliente e node para outros recursos e podemos ter o Ansible no ar rápido. - Flexível: Um ambiente corporativo é bastante susceptível à mudança e o Ansible tem que ser altamente adaptável. - Simples: Com seus arquivos de playbook escritos em uma linguagem como YAML que é como se fosse o inglês como é uma linguagem muito próxima à inglês, o Ansible não tão bom a ser chamado de simples. - Prático: Se você estiver implementando um arquivo de playbook para ser executado em n numeros de sistemas, o efeito será o mesmo em todos esses sistemas. - Reutilização de código: Um arquivo de playbook pode ser reutilizado em qualquer sistema onde for necessário. - Pode-se utilizar playbooks em vários sistemas O Ansible também fornece relatórios automáticos, os códigos do playbook são nomeados, então quando você executar ou executar seu playbook, dá um relatório sobre o que deu certo, o que falhou, qual sistema não estava disponível e assim por diante. Isso é bastante importante quando se está lidando com uma infrações de tamanho completo. Demonstração prática ------------------- Antes de nos moving para a demonstração real, aqui uma breve revisão sobre o que fazemos. . . Primeiro, iremos hospedar duas máquinas virtuais, ambas com o sistema operacional CentOS 7. Uma será a máquina local, a outra será a máquina cliente ou máquina nó. Na máquina local, primeiro iremos instalar o Ansible. Em seguida, escreveremos inventory e o arquivo de playbook e simplesmente implementaremos este arquivo de playbook em dependência do cliente. Neste ponto, teremos que verificar se as configurações que citamos em nosso arquivo de playbook foram configuradas corretamente. # Documentação Técnica em Markdown de Configuração de Ferramentas de Gerenciamento de Configuração ## Introdução ### Objetivo Este texto é um manual de uso para as ferramentas de gerenciamento de configuração, com enfoque em Chef, Ansible e Puppet. ### Pré-requisito Antes de chegar ao teclado deste tutorial, é recomendado que você verifique se o endereço IP de sua máquina cliente está correto. Use o comando `ifconfig` para verificar-lo, depois, após obter o endereço IP, faça um espaço, depois acrescente o usuário e senha para o cliente. Neste exemplo, o usuário é o root: ``` # ifconfig # ip_address username password ``` ## Playbook do Ansible ### Criação Para criar o playbook do Ansible, use o nome do arquivo com a extensão `yml`. Para começar, o arquivo sempre deve começar com três traços (-). ``` --- ``` ### Nome do Playbook ``` sample_book: ``` ### Execução ``` host: ansible_host: <your_ansible_host> ansible_user: root ansible_become: true tasks: - name: Install httpd yum: name: httpd state: latest - name: Start httpd systemd: name: httpd enabled: yes state: started - name: Create Content copy: content: "welcome to ansible" dest: "/var/www/html/index. html" ``` ## Referências Um vez que o playbook for criado, é necessário verificar se ele está correto. Use o comando `ansible-playbook` junto do nome do arquivo do playbook. Para obter um manuscrito sintático, você pode usar o comando abaixo: ``` ansible-playbook sample_book. yml syntax check ``` ## Conclusão Agora que seu playbook do Ansible esteja em execução, você pode verificar se as alterações desejadas foram feitas no seu cliente. Use o navegador e digite `localhost` para verificar. ## Observações de aculturação Este manual de uso foi compilado com as perguntas de entrevista mais importantes de gerenciamento de configuração com foco em Chef, Ansible e Puppet que você pode encontrar em uma entrevista de DevOps. ### Chef #### SSL Certificados em Chef – Por que uso SSL? A resposta correta seria que os certificados SSL são usados para garantir segurança, pois oferecem uma segurança de nível alto com par de chaves públicas e privadas. Além disso, com o modelo de chave pública/privada dentro do SSL, é possível garantir que os sistemas em sua rede que o Chef está validando realmente são os nós reais e não um fraude. #### Para desabilitar ou parar o serviço HTTP ao reiniciar o sistema, usem os seguintes comandos da lista a seguir? A resposta correta é `systemctl disable httpd. service`. Aqui está o texto traduzido em português do texto fornecido com a maior fidelidade possível com o Markdown: ```markdown # Tutorial de Ansible para Iniciantes | O Que É Ansible? O Ansible é uma ferramenta de gerenciamento de configuração de código aberto, frequentemente referida como uma "engenharia de infraestrutura como código" de automação. Ele auxilia no automatização da provisão, da aplicação de software, do gerenciamento de configuração e do implantamento em vários ambientes de virtualização e nuvem. ! [Assista Tutorial de Ansible no YouTube](https://img.youtube.com/vi/Zrz9xeJwfx4/0.jpg) * O Ansible é disponível na distribuição Fedora do Linux, Red Hat Enterprise Linux, CentOS, Scientific Linux, e outras. * Red Hat adquiriu o Ansible em Outubro de 2015. * O Ansible pode gerenciar ambientes de virtualização e nuvem como AWS, Azure, Google Cloud Platform, e mais. * O projeto Ansible tem como objetivos maximamente simples, consistente, altamente seguro, fiável, fácil de aprender e sem agente. * O Ansible utiliza OpenSSH para comunicação, não distribui agentes para nós e playbooks utilizam uma linguagem descriptiva baseada em YAML e plantillas de Jinja2. --- # Arquitetura do Ansible O Ansible utilizam uma arquitetura sem agente, e os nós não precisam rodar em background sob o controle contínuo de um demonio. Em vez disso, a máquina controladora estabelece conexões com o nós gerenciados a via SSH. Aqui está um diagrama da arquitetura: ! [Arquitetura do Ansible](https://raw.githubusercontent.com/ansible/ansible-docs-content/devel/installation_guides/intro_to_ansible/images/ansible_architecture.png) --- # Perguntas de Entrevistas sobre Ferramentas de Gerenciamento de Configuração - Chef, Ansible & Puppet * [Perguntas de Gerenciamento de Configuração](#chef-ansible-puppet-gerenciamento-de-configuração) * [Perguntas Gerais](#chef-ansible-puppet-perguntas-gerais) --- ## Chef, Ansible & Puppet Gerenciamento de Configuração Perguntas [Vá para Perguntas Gerais](#chef-ansible-puppet-perguntas-gerais) --- ### Gerenciamento de Configuração Por que SSL certificados são utilizados para o Chef? 1. Para alta segurança 2. Para autenticar nós dentro da sua rede Que comando você usaria para parar ou desativar o serviço http quando o sistema inicia? 1. `systemctl disable httpd. service` --- ## Chef, Ansible & Puppet Perguntas Gerais [Vá para Gerenciamento de Configuração Perguntas](#chef-ansible-puppet-gerenciamento-de-configuração) --- ### Test Kitchen O Que É o Test Kitchen? O Test Kitchen é uma ferramenta de linha de comando que permite que você teste seu cookbook antes de implementá-lo em uma máquina real. Comandos para usar: 1. `kitchen create` - cria uma instância do Test Kitchen 2. `kitchen destroi` - destrói uma instância após a criação dela 3. `kitchen converge` - Converge multiple instances --- ### Chef Como o Chef Apply difere do Chef Client? * Chef Apply valida a receita, enquanto o Chef Client aplica e valida o cookbook completo. --- ### Puppet O Que é uma classe no Puppet? Uma classe no Puppet é um nome de bloco na sua manifesto que contém várias configurações, incluindo serviços, arquivos e pacotes. Exemplo de uma classe: ```puppet class meuapp { # Detalhes de configuração aqui } ``` --- ### Ansible O Que É um Ansible role? Um Ansible role é um bloco independente de tarefas e arquivos e plantillas de variáveis e templates embedidos em um playbook. Exemplo de um role: ```yaml - name: Meu Role hosts: todos tarefas: - name: Instalar Tomcat package: nome: tomcat ``` --- ### Ansible Quando você deve usar recodelas {`{}`} no Ansible? * Para distinguir cordas e variáveis não definidas. * Para juntar comandos condicionais quando usa variáveis. --- ### Reutilização de Conteúdo em Ansible * Use sub-módulos ou inclui ``` ``` # Visão Gereral da Arquitetura do Puppet Esta arquitetura permite que um ambiente completo seja gerenciado pelo Puppet. Com esta arquitetura, chegámos ao fim deste vídeo sobre questões de entrevista relacionadas com ferramentas de gerenciamento de configuração como o Chef, o Ansible e o Puppet. Esperamos que você gostou deste vídeo. - **Like e Compartilhe** > Se gostou deste vídeo, por favor, gere uma like e compartilhe-o. - **Inscreva-se** > Se gostou deste vídeo, considere se inscrever no seu canal do YouTube para captar mais vídeos como este. Para mergulhar mais fundo, clique [aqui](#) para assistir a conteúdo semelhante. Prontos para aumentar a volumes e se certificar, clique [aqui](#). Obrigado por assistir e se mantenha atente para mais de Simply Learn! --- Se gostou deste vídeo, considere-se inscrever no seu canal do YouTube para captar mais vídeos semelhantes. Para mergulhar mais profundamente, clique [aqui](#) para assistir a conteúdo semelhante. Selecione para aumentar a volumes e se certificar, clique [aqui](#). Obrigado por assistir e se tenha atenção para mais de Simply Learn! 