Filipe Fernandes S B de Matos
Objetivo
Apresentar a arquitetura da ferramenta OpenStack e descrever de forma geral seus principais componentes. Apresentar uma breve descrição sobre a API Python de interação com o OpenStack e mostrar alguns exemplos.
Eleger o módulo que mais interessa o público para posteriormente apresentá-lo de forma mais detalhada.
Prazer em conhecer,
Filipe Fernandes S B de Matos
Professor da Universidade Aberta do Brasil (UECE) Gerente de Projetos (Athomustec)
Mestre em Ciência da Computação (UECE) Tecnólogo em Telemática (IFCE)
Parte 01 Introdução
Parte 02 OpenStack - Uma Visão Geral Parte 03 OpenStack - A Arquitetura
Parte 04 OpenStack - Os Componentes
Parte 05 E o Python?
Sumário
Computação em Nuvens
Computação em Nuvens ou, simplesmente, “a Nuvem” é a entrega de recursos computacionais sob demanda, tudo desde aplicações à datacenters, usando a Internet e com pagamento baseado no uso (pay-for-use).
“
”
Computação em Nuvens
❏ “...entrega de recursos computacionais sob demanda...” ❏ Capacidade computacional de acordo com a demanda ❏ “...usando a Internet...”
❏ Tudo acessível via a grande rede de computadores ❏ “...modelo pay-for-use…”
❏ Pagamento proporcional ao nível de utilização, quanto
Computação em Nuvens
❏ Service Level Agreement (SLA):
❏ Direitos e deveres para consumidores e provedores ❏ Penalidades em caso de transgressão as regras
❏ Computação é tratada como um serviço: ❏ Software como um Serviço (SaaS) ❏ Plataforma como um Serviço (PaaS) ❏ Infraestrutura como um Serviço (IaaS)
Principais tipos de serviços
Infraestrutura como um Serviço
Infraestrutura como um Serviço oferece às empresas recursos computacionais como servidores, redes, armazenamento e espaço dentro do datacenter com pagamento com base no uso (pay-per-use).
“
”
❏ Equipamentos de hardware oferecidos como serviço: ❏ Servidores, roteadores, armazenamento...
❏ Tudo oferecido através de máquinas virtuais (VMs):
❏ Instância com processador, memória e interface de rede ❏ Uma instância lógica do equipamento físico (Host)
❏ Modelos de implantação de IaaS:
❏ Modelo Público, Privado ou Híbrido
Modelo de implantação
Infraestrutura como um Serviço
❏ Nuvens Públicas:
❏ Desenvolvidas para serem utilizadas por terceiros
❏ Exemplos: Amazon EC2, IBM Cloud, Microsoft Azure... ❏ Nuvens Privadas:
❏ Desenvolvidas por empresas para utilização própria ❏ Exemplos: XEN, VMWare, OpenStack...
❏ Nuvens Híbridas:
OpenStack
OpenStack é um sistema operacional em Nuvem que controla grandes pools de computação, armazenamento e recursos de rede ao longo de um datacenter, tudo gerenciado através de uma interface web ou de uma API.
“
”
Introdução
❏ Ferramenta open source para gerenciamento de nuvens
❏ Concebido inicialmente pela Rackspace Hosting e pela NASA ❏ Foca na escalabilidade do IaaS sem aumentar a complexidade ❏ Possui uma arquitetura altamente modularizada:
❏ Cada componente gerencia um tipo de recurso da Nuvem ❏ Componentes instalados em múltiplas máquinas físicas
Introdução
❏ Suporte a múltiplos hypervisors e APIs de terceiros: ❏ Hypervisors: Xen, KVM, VMWare, Hyper-V… ❏ APIs: Amazon EC2 e Rackspace
❏ Um dos projetos open source que mais cresce no mundo: ❏ Maior nível de contribuição do que o Linux
Introdução
Introdução
Links Interessantes
❏ Página Oficial: https://www.openstack.org/
❏ Fóruns para discussão: http://forums.openstack.org/ ❏ Wiki: http://wiki.openstack.org/StartingPage
❏ Documentação oficial: http://docs.openstack.org/ ❏ Canais no IRC: #openstack e #openstack-dev
A Arquitetura
❏ Designada para ser horizontalmente escalável:
❏ Voltada para adição/remoção de servidores sob demanda ❏ Implementação simples e grande variedade de soluções
❏ Componentes modularizados e passíveis de clusterização: ❏ Recuperação rápida de falhas e sem ponto único de falha ❏ 3 tipos de serviços base: computação, rede e armazenamento
A Arquitetura
❏ A forma de organizar os serviços é bastante dinâmica:
❏ Tudo em uma máquina só? Distribuído entre N máquinas? ❏ Vai depender daquilo que você espera para sua nuvem ❏ Componentes segmentados em três grupos:
❏ Controle (Control) ❏ Rede (Network)
Tipos de Componentes
Controle (Control)
Interface Web, APIs, Banco de Dados e messaging
Rede (Network)
Agentes responsáveis pela criação e isolamento das redes
Computação (Compute)
Exemplo
❏ Suponha que tenhamos 6 máquinas “de bobeira”: ❏ Host1: 2 CPUs, 8Gb RAM, 100Gb Storage, 1 NIC ❏ Host2: 2 CPUs, 2Gb RAM, 50Gb Storage, 3 NIC ❏ Host3: 4 CPUs, 16Gb RAM, 500Gb Storage, 2 NIC ❏ Host4: 1 CPUs, 2Gb RAM, 500Gb Storage, 1 NIC ❏ Host5: 1 CPUs, 2Gb RAM, 500Gb Storage, 1 NIC ❏ Host6: 1 CPUs, 2Gb RAM, 500Gb Storage, 1 NIC
Exemplo
Exemplo
Fonte: http://docs.openstack.org/juno/install-guide/install/apt/content/ch_overview.html (Editada) Identity service, Image service, Banco de Dados, Messaging, APIs, Console e Dashboard
Exemplo
Fonte: http://docs.openstack.org/juno/install-guide/install/apt/content/ch_overview.html (Editada) Redes virtuais aos clientes, roteamento, serviços de NAT, DHCP, conectividade com a rede real externa
Exemplo
Fonte: http://docs.openstack.org/juno/install-guide/install/apt/content/ch_overview.html (Editada) Executa o hypervisor KVM e hospedará VMs dos clientes/usuários
Exemplo
Fonte: http://docs.openstack.org/juno/install-guide/install/apt/content/ch_overview.html (Editada) Block Storage service, Object Storage
Atenção!
Perceba que a forma como foi organizada nossa nuvem é apenas uma sugestão, devido sua natureza modular o
OpenStack permite a instalação de múltiplos módulos em uma única máquina. Dessa forma, seria possível fazer do nó de controle um nó de storage ou colocar todos os serviços dentro do nó de computação. Basta que a máquina tenha recursos para prover os serviços!
Os Componentes
❏ Horizon (Dashboard) ❏ Keystone (Identity) ❏ Glance (Image) ❏ Nova (Compute) ❏ Neutron (Network) ❏ Cinder (Block storage) ❏ Swift (Object Storage) ❏ Ceilometer (Telemetry) ❏ Heat (Orchestration)Os Componentes
Horizon (Dashboard)
❏ Interface gráfica web com o usuário/administrador
❏ Executa as mesmas ações via API, porém graficamente ❏ Inclui todos os serviços OpenStack e alguns não oficiais ❏ Aplicação web stateless e data-less
❏ Muitos provedores de nuvem possuem uma
Keystone (Indentity)
❏ Componente de gerenciamento de identidade:
❏ Autenticação do usuário e autorização de uso do serviço ❏ Armazena catálogo de serviços e políticas de registro
❏ Autenticação baseada em nome de usuário e senha: ❏ Usuário recebe um token com prazo de validade ❏ Analogia com a autenticação de um jogo online ❏ Possibilidade de integração com LDAP e PAM
Glance (Image)
❏ Componente de gerenciamento de imagens:
❏ Imagem de disco especial para inicializar uma VM
❏ Especial? SO instalado e algumas configurações limpas ❏ A imagem especial é copiada no nó de computação:
❏ Novas VMs utilizarão a mesma cópia para inicializar ❏ Possível criar scripts e executá-los antes do boot da VM:
Nova (Compute)
❏ Componente de gerenciamento de instancia:
❏ Reserva recursos computacionais junto ao hypervisor ❏ Finaliza as máquinas virtuais junto ao hypervisor
❏ Interage diretamente com as APIs dos hypervisors:
❏ Hypervisors? XenServer, KVM, VMware, dentre outros. ❏ Gerenciamento de key pairs para conexão SSH
Neutron (Network)
❏ Componente de gerenciamento de rede
❏ Arquitetura baseada em Redes Definidas por Software (SDN): ❏ Cada usuário/instuição possui uma rede virtual isolada ❏ Estas redes podem ser conectadas via roteadores virtuais ❏ Um roteador virtual pode se conectar a um roteador real
❏ Usa o Open vSwitch para orquestrar a rede virtualizada: ❏ Possibilita a criação dos switches virtuais das redes
Cinder (Block Storage)
❏ Componente de armazenamento em bloco (volume):
❏ Um disco, ou parte dele, é designado à máquina virtual ❏ Tal disco pode ser montado/removido junto à VM
❏ O usuário é o “responsável” por gerenciar seus arquivos: ❏ Usuário cria o sistema de arquivos e o trabalha com ele ❏ Utiliza-se do LVM (padrão) para gerenciamento de
partições
Swift (Object Storage)
❏ Componente de gerenciamento de objetos:
❏ Objetos? Fotos, zips, multimídia, texto, imagens...
❏ Usuário responsável por enviar o objeto a ser armazenado: ❏ O Swift cuida de todo o resto e faz “a mágica acontecer” ❏ Automaticamente faz réplicas dos objetos armazenados
❏ Objetos são indexados a partir de códigos hash
Cinder Vs. Swift
Ceilometer (Telemetry)
❏ Componente de monitoramento do sistema:
❏ Originalmente concebido para tarifação do usuário ❏ Coleta períodica de métricas dos recursos do sistema
❏ Tais coletas podem ser utilizadas para alarmes no sistema: ❏ Limiar atingido, alarme é engatilhado para o OpenStack ❏ Oferece suporte a Notificações e RPCs
Heat (Orchestration)
❏ Componente responsável pela orquestração de instâncias ❏ Um template define quem (e o que) será lançado:
❏ Definida a ordem de lançamento de cada instância ❏ Definidas todas as depêndencias por instância
❏ Definidos dados a serem trocadas entre as instâncias ❏ Semelhante ao papel de um maestro:
❏ Não toca nenhum instrumento, mas é o responsável por
Existem outros módulos?
❏ Trove* (Database) ❏ Zaqar* (Messaging) ❏ Barbican* (Key Management) ❏ Designate* (DNS) ❏ Ironic (Provisioning) ❏ Sahara* (Elastic Map)Clientes OpenStack
❏ Projecto que inclui uma CLI e APIs de desenvolvimento ❏ Linguagens Suportadas: C/C++, JAVA, ,NET, GO,
Python...
❏ APIs desenvolvidas: Keystone, Glance, Nova, Neutron e Swift ❏ APIs em desenvolvimento: Cinder, Ceilometer, Heat
❏ APIs com suporte ao Python 2.6 e 2.7:
❏ Exceto a OpenStack (CLI) que suporta o Python 3.4 ❏ Executa as mesmas ações da interface web e da CLI
Script de Exemplo
Keystone
from keystoneclient.v2_0 import client
kclient = client.Client(username=’user’, password=’pass’,
tenant_name=’tenant’,auth_url=’http://0.0.0.0:5000/v2.0’)
kclient.users.create(name=’Filipe’, password=’123’, email=’lipe@a.com’)
i_am = kclient.users.find(name=’Filipe’) kclient.users.delete(i_am)
Script de Exemplo
Nova
from novaclient.v1_1 import client
nvclient = client.Client(username=’my_user’, api_key=’my_pass’,
project_id=’my_tenant’,auth_url=’http://0.0.0.0:5000/v2.0’)
my_image = nvclient.images.find(name=’Ubuntu-15.10’)
nvclient.images.delete(my_image) nvclient.flavors.list()
Script de Exemplo
Neutron
from neutronclient.v2_0 import client
neclient = client.Client(username=’user’, password=’pass’,
tenant_name=’tenant’,auth_url=’http://10.129.4.227:35357/v2.0’) new_net = {‘network’:{‘name’:’MY_NET’, ‘admin_state_up’: True}}
neclient.create_network(body=new_net) neclient.list_networks()
Script de Exemplo
Swift
from swiftclient import client
sclient = client.Connection(user=’user’, key=’pass’, auth_version=’2.0’
tenant_name=’tenant’,auth_url=’http://0.0.0.0:35357/v2.0’)
objects = sclient.get_container(‘my_container’)[1]
content = sclient.get_object(‘my_container’, ‘my_object’)