Cloud e OpenStack: Uma breve introdução
Tags: cloud, openstack, distributedsystems, ptbr
Published: 2019-09-22 00:53:27


# Cloud Computing

Computação em Nuvem, ou **Cloud Computing**, é uma tecnologia desenvolvida para flexibilizar os recursos que uma aplicação/sistema tem disponível. Nesse caso, quando falamos de recursos, estamos nos referindo a memória RAM, armazenamento, CPU e afins. Através da Cloud, é possível criar uma **infraestrutura elástica e dinâmica**, ou seja, o sistema pode crescer ou diminuir mais facilmente, uma vez que é possível utilizar os recursos **sob demanda**. 
![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/2p1nw7s7280cb08ut0rl.png)
**Por que Cloud Computing é tão importante para o futuro da computação?** Vamos dar um exemplo prático: uma aplicação. O crescimento de uma aplicação, por exemplo, é algo **inconstante**. Podemos tentar estimar, com base em dados, o quanto uma aplicação tende a crescer ou diminuir, mas, mesmo assim, é uma previsão complexa. Teremos períodos onde usaremos uma demanda de recursos maior, pois o número de usuários será maior, assim como o contrário, períodos em que esses recursos (comprados pelos desenvolvedores da aplicação, por exemplo), **ficarão ociosos**. Isso não é nada bom, uma vez que queremos aproveitar todo o dinheiro aplicado na ideia. Com o uso da Cloud, o usuário **controla seus recursos de forma dinâmica**, levando em consideração a demanda do momento. Isso torna o **sistema elástico**, o que, consequentemente, economiza recursos e investimentos. 

![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/2dp8do1nhi21x8bhr45i.png)
Existe um conceito importante dentro disso tudo, e que também é crucial para entender como essa administração de recursos funciona: **provisão de recursos**. Uma das definições de provisionamento é: *“fornecer os recursos necessários para que o sistema de gestão possa funcionar adequadamente”*. Distribuição dos recursos por demanda.
![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/x276oqgxosc546nnvjw1.png)


Para administrar os recursos da Cloud, existem diversas tecnologias, sendo uma das mais utilizadas o [**Openstack**](https://www.openstack.org/).
OpenStack pode ser definido como um **gerenciador para componentes de múltiplas infraestruturas virtualizadas**. Imagine o OpenStack como uma plataforma de componentes, uma espécie de sistema operacional para a Cloud. OpenStack utiliza recursos virtuais para executar uma combinação de ferramentas, seus componentes. Os componentes servem para criar um ambiente de cloud que atende aos cinco critérios do *National Institute of Standards and Technology* para a Cloud: **rede, recursos agrupados, interface de usuário, provisionamento de funcionalidades e alocação/controle automático de recursos.**

----
# Openstack: Conceitos
![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/n58izzmom8bp808rmeyq.png)

Agora que você já tem uma ideia do que é Cloud Computing, da sua importância para a computação e foi introduzido ao OpenStack e seus componentes, existem alguns conceitos que são importantes entender ao lidar com esse tipo de sistema:

**Instância**

A instância nada mais é do que uma máquina virtual, já com sua imagem, grupos de seguranças e outras configurações, administrada pelo OpenStack.

**Imagens**

A imagem de uma instância é o sistema operacional utilizado pela mesma. Assim como temos o famoso formato .iso para imagens que usamos normalmente, o formato padrão mais utilizado para Cloud no OpenStack é o qcow2. Imagens com esse formato podem ser encontradas tanto nos sites da maioria das distribuições, quanto no próprio site do OpenStack.  

**Network**

A função de Network do OpenStack é bastante completa. Como o próprio nome já antecipa, essa área é focada nas conexões de redes, permitindo a criação de redes virtuais para as instâncias. Essas redes podem ser tanto públicas, quanto privadas. Ainda na parte de Network, é possível criar roteadores virtuais para conexão de redes entre si, o que possibilita a criação de redes públicas, isto é, conectadas à internet.

**Grupos de Segurança**

Os grupos de segurança podem ser definidos como um conjunto de regras de firewall aplicadas a uma instância. Essas regras são definidas pelos usuários de acordo com as necessidades da instância. Caso o usuário não crie um grupo de segurança, o OpenStack define um grupo default que, por padrão, bloqueia tudo. Essa estratégia de bloquear tudo e, através dos grupos de segurança, ir liberando aos poucos o acesso, é de extrema importância para a segurança da instância e o controle de acesso total da mesma.  

**Volumes**

Os volumes são discos virtuais que persistem os dados da instância. Imagine o volume como um HD instalado na sua máquina. É lá onde os dados ficam, mesmo que a instância seja reiniciada. Caso sua instância não seja inicializada com um volume, os dados não ficarão salvos.  

**Identity**

Essa parte diz respeito ao controle de acesso ao seu OpenStack. Na interface do Horizon, é possível criar projetos, usuários, definir senhas e, assim, controlar o acesso e poderes de usuários. 

**Par de Chaves**

Por padrão, para acesso via SSH na sua instância, normalmente é necessário cadastrar uma senha pública gerada pelo usuário no OpenStack. Depois de cadastrada, basta aplicá-la ao criar uma instância. 

**Flavors**

Os flavors são um conjunto de configurações pré-determinadas que definem características da instância, como a memória e a capacidade de armazenamento. Podem ser entendidos também como “configurações de hardware” disponíveis para um servidor. Vários flavors podem ser criados e aplicados para diferentes instâncias. 

----
# OpenStack: Componentes

Uma vez que o OpenStack atua como um gerenciador de componentes, é importante entender um pouco da atuação de cada um deles: cada um com sua responsabilidade na gerência da infraestrutura da Cloud. Como existem muitos, não precisamos nos apegar aos detalhes cada componente, então, vamos dar uma visão geral sobre os utilizados com maior frequência:

## OpenStack Compute (Nova)

![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/kxnbyrceret9m5km22zg.png) 

Responsável pela estrutura de virtualização. É uma ferramenta de acesso e gerenciamento total para os recursos computacionais do OpenStack, incluindo programações, criações e exclusões. 

É agnóstico ao hypervisor (camada de software entre o hardware e o sistema operacional), tendo compatibilidade com a maioria deles.

## OpenStack Block Storage Cinder (Cinder)

![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/cju49zb8kk1sbhe7nyqt.png) 


Responsável pelo serviço de storage do OpenStack Nova. 
Com o Cinder é possível gerenciar volumes através da interface do Horizon ou via CLI.


##OpenStack Object Storage (Swift)
![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/d8o495zf1kvbaztwd4kl.png)

É um serviço altamente tolerante a falhas que armazena e recupera objetos de dados não estruturados. Enquanto o Cinder é responsável pelo volume, o Swift é responsável pelos objetos. 


##OpenStack Image Service (Glance)
![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/t8r73kudrehh7fdwswlu.png)

Responsável pelos recursos de imagens de máquinas virtuais. Ele armazena e recupera imagens de disco de máquinas virtuais de uma variedade de locais.

##OpenStack Networking (Neutron)
![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/6fynnrvuni20iy2dc32y.png)

Responsável pelos recursos do serviço de rede para o OpenStack.  Conecta redes a outros serviços do OpenStack.

##OpenStack Identity (KeyStone)
![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/kxnbyrceret9m5km22zg.png) 

Responsável pela autenticação e autorização, definindo regras para acesso aos recursos do OpenStack. Ele também é o catálogo de endpoints para todos os serviços.


##OpenStack Dashboard (Horizon)
![Alt Text](https://thepracticaldev.s3.amazonaws.com/i/9rkdqe3hu46uw345v7a1.png)

Provê uma interface web para acesso aos serviços do OpenStack.

Dependendo da necessidade do serviço de Cloud, o administrador da infraestrutura pode inserir outros componentes, a exemplo do OpenStack Monasca, que tem como função ser um sistema de monitoramento para as máquinas (para saber mais, acesse a página de [componentes] (https://www.openstack.org/openstack-components/) do OpenStack).


----
## OpenStack: Primeiros Passos

É possível dar seus primeiros passos com OpenStack sem precisar ter uma infraestrutura de Cloud com diversos computadores, para isso existe uma solução: o [**OpenStack AIO**] (https://docs.openstack.org/openstack-ansible/latest/user/aio/quickstart.html) (All-In-One). 

Nele, é possível criar imagens, subir instâncias, definir grupos de segurança, integrar chaves públicas e outras funções, assim como no OpenStack; a diferença é que tudo funciona em uma máquina só, podendo ser utilizada uma máquina virtual, por exemplo. Por isso é considerado um laboratório para OpenStack. No site do OpenStack tem uma área dedicada para essa solução, com todo o passo a passo para sua instalação e configuração. 

É importante dizer também que o OpenStack AIO é integrado ao [**Ansible**] (https://pt.wikiversity.org/wiki/Ansible), uma ferramenta de automatização criada para gerenciar múltiplas máquinas de uma vez. A parte mais importante para se entender agora sobre Ansible são os seus Playbooks. Os Playbooks são um conjunto de Plays (instruções) através das quais o Ansible consegue configurar o passo a passo de um processo de configuração — uma estrutura bem parecida com um shell script. São basicamente instruções de fácil leitura de como serão feitas as configurações que possibilitam a realização de atividades em máquinas remotas ou diferentes hosts.

Para administração e gerência do OpenStack, temos duas opções: a interface web já citada anteriormente, Horizon, ou o [**OpenStack-CLI**] (https://docs.openstack.org/cli/command-list.html) (Client Line Interface). Na dashboard do Horizon existem diversas abas relacionadas aos conceitos já abordados neste material.  


Para finalizar, quando pensamos no futuro da computação, é impossível não pensar em Cloud. Um dos fatores mais limitantes para nossa área são os recursos, por isso precisamos aproveitá-los da maneira mais inteligente e consciente. Ferramentas como OpenStack, em conjunto com toda a comunidade open source que move o projeto, nos dão uma visão que, no futuro, os limites serão apenas termos usados em cálculo. 

---

Muito obrigada pela leitura! Fique atento: em breve, teremos novos artigos de contribuidores do OpenDevUFCG aqui no **dev.to**. Acompanhe o OpenDevUFCG no [Twitter](https://twitter.com/OpenDevUFCG), no [Instagram](https://instagram.com/OpenDevUFCG) e, claro, no [GitHub](https://github.com/OpenDevUFCG).