Download - Introduccion a Open Stack
Índice
● Introducción a “Cloud” (muy breve, lo juro)● Nuevas tendencias● Introducción a OpenStack● Algunas funcionalidades de OpenStack
¿Que es exactamente Cloud?(no me atrevo a definirlo)
● Me quedo con la siguiente definición: “Servicios deslocalizados que cumplen las siguientes características”: autoservicio, flexible, pago por uso● Categorías
● SaaS: Software como servicio (ej. gmail, dropbox)● PaaS: Plataforma como servicio (ej. RedHat
Openshift, Azure native apps )● CaaS: Contenedores como servicio (ej. kubernetes)● IaaS: Infraestructura como servicio (Amazon EC2,
OpenStack)● Tipos: Pública, privada, híbrida
IaaS, SaaS, PaaS y otras hierbas
Tendencias tecnológicas
¿Cómo hemos llegado hasta
aquí?
Metodologías Ágiles
● Nueva metodología de desarrollo (y de trabajo)● Estrecha colaboración entre equipos● Se trabaja en iteraciones de corta duración, lo que facilita una respuesta rápida y flexible a los cambios● La publicación frecuente y con menos cambios, minimiza el riesgo en cada versión (de errores, de tiempo perdido en funcionalidades innecesarias, etc)
Infraestructuras Ágiles
● La publicación frecuente requiere la automatización de todo el proceso de publicación● Se requiere infraestructura “ágil”● Por eso los desarrolladores “ágiles” prefieren infraestructuras Cloud
DevOps
● Convergencia entre Desarrollo (Development) y Sistemas (Operations)● Se incluye la infraestructura de producción como parte del ciclo de desarrollo● Fuerza al desarrollador a tener en cuenta el entorno de producción● Requiere infraestructuras “ágiles”
Aplicaciones “Cloud Nativas”
● La facilidad de despliegue de infraestructuras cloud (y sus limitaciones) promueve una nueva forma de hacer las cosas:
● Tolerancia a fallos mediante redundancia de servicios
● Preferencia por servicios sin estado (“stateless”)● Escalabilidad horizontal (ejecutar muchas instancias)
Amazon AWS lo cambió todo
● Las infraestructuras tradicionales no cubrían las necesidades de Amazon● Desarrollaron sus propias infraestructuras para adaptarlas a sus necesidades● Desarrollaron un modelo de negocio vendiendo su “exceso” de capacidad● Infraestructuras sencillas fáciles de gestionar a través de una API● Así nació el concepto de Cloud pública
Contenedores: Docker y otras hierbas
● Es el “sueño” de los DevOps: La aplicación autocontenida con todas sus dependencia, directamente ejecutable en el entorno de producción● Funciona mejor cuando los contenedores son “inmutables” (no contienen nada que cambie)● Ideal para ejecutar servicios “sin estado”
● Eso es trampa! Las aplicaciones necesitan estado!● En realidad, dejan “el marrón” de gestionar el estado
a otros...
La (cruel) comparación
● A las mascotas se les da un nombre● Se les alimenta y trata con cariño● Su pérdida es una tragedia, porque son únicas y de gran valor
● Al ganado de le nombra con números● No se les distingue individualmente● Si se ponen enfermos, se sustituyen por otro
Mascotas vs Ganado
Cloud vs Virtualización “tradicional”● Las soluciones de virtualización tradicional (Vmware, oVirt, etc) se enfocan a la “Alta disponibilidad” de las máquinas virtuales y a la facilidad de gestión● Las soluciones Cloud se enfocan a la flexibilidad, la disponibilidad de infraestructuras a traves de API, y al autoservicio● En virtualización tradicional, la alta disponibilidad se gestiona desde la infraestructura de virtualización● En Cloud, la alta disponibilidad la debe gestionar la aplicación ejecutando múltiples instancias de cada servicio (aplicaciones Cloud nativas)● En resumen: ganado contra mascotas
OpenStack
Conceptos básicos de...
El Proyecto OpenStack
● 139
COUNTRIESCOMPANIES
355
16,847AVERAGE MONTHLY CONTRIBUTORS
INDIVIDUAL MEMBERS
CODE CONTRIBUTIONS
115,206
TOTAL CONTRIBUTORS
2,130AVERAGE MONTHLY
466
El proyecto libre de mayor crecimiento de la historia(si, más que Linux)
La Fundación OpenStack
Platinum
Gold
Oportunidad de Empleo/Negocio
● Supone una GRAN oportunidad de empleo y/o negocio● OpenStack cambiara el mercado, como lo hizo Linux hace 15 años● Se buscan desarrolladores (We are Hiring!)
● Desarrollado en Python● Muchos proyectos relacionados (SDN, NFV, etc)
● Se necesitan desarrolladores con profundos conocimientos en redes, seguridad, etc ● Las empresas utilizaran cada vez más servicios Cloud, OpenStack sera el estándar “de facto”.
Versiones de OpenStack
Bexar Feb 2011
CactusAbr 2011
DiabloSep 2011
GrizzlyAbr 2013
HavanaOct 2013
EssexAbr 2012
FolsomSep 2012
IcehouseAbr 2014
AustinOct 2010
JunoOct 2014
KiloApril 2015
LibertyOct 2015
MitakaApril 2016
NewtonOct 2016
OcataFeb 2017?
Componentes “Core”
Service OpenStack Project Name Amazon Equivalent
Virtual Machines Compute Nova EC2Virtual Block Devices Block Storage Cinder EBS
Object Storage Object Storage Swift S3Virtual Networks Networking Neutron VPC
App Orchestration Orchestration Heat CloudFormationApp Monitoring Telemetry Ceilometer CloudWatchTenant Auth / Namespace
Identity Keystone IAM
Boot Images Image Service Glance AMI
Dashboard Dashboard HorizonManagement
Console
El inicio… (principios de 2010)
NASA NebulaNASA Nebula
RackspaceCloud FilesRackspaceCloud Files
ComputeNetwork
Block Storage
Object Storage
OpenStack Core inicial
NovaNova SwiftSwift
ComputeNetwork
Block Storage
Object Storage
OpenStack Core: Nova
ComputeService(Nova)
ComputeService(Nova)
Compute Service: Nova
● Controlador del servicio de maquinas virtuales● Soporta diferentes hypervisores (KVM, Xen, etc)● Tambien soporta máquinas físicas (bare metal)
● Nova despliega y gestiona “instancias” (ganado, recuerdan?)
● Se definen “sabores” que determinan las caracteristicas (CPU, RAM, etc)
● Las instancias son no persistentes (cloud style!)● La persistencia de datos se consigue usando
“volumenes” del servicio Cinder● Soporta API nativa OpenStack y compatibilidad con la API de Amazon EC2
OpenStack Core: Neutron
ComputeService(Nova)
ComputeService(Nova)
NetworkService
(Neutron)
NetworkService
(Neutron)
Network Service: Neutron
● Inicialmente llamado “Quantum” ● Permite a los usuarios definir y gestionar redes complejas● Soporta redes “planas”, VLANs 802.1q y tuneles VXLAN y GRE● Soporta IP estaticas, DHCP e IP “Flotantes” (públicas) para acceso desde el exterior● Puede gestionar dispositivos de red utilizando plugins
● Incluidos SDN y OpenFlow● Entorno de extensiones para servicios de red (Firewalls, VPN, Balanceadores, etc)
OpenStack Core: Cinder
ComputeService(Nova)
ComputeService(Nova)
NetworkService
(Neutron)
NetworkService
(Neutron)
Block StorageService(Cinder)
Block StorageService(Cinder)
Block Storage: Cinder● Software para ofrecer “almacenamiento de bloques como servicio”● Inicialmente estaba incluido en Nova● Los volumenes de Cinder son persistentes e independientes de las instancias de Nova a las que se conectan
● Las instancias de Nova pueden arrancar desde volumenes Cinder
● Cinder puede usarse independientemente de Nova● Soporta funciones avanzadas: Snapshots, clonado, etc● Soporta numerosos “plugins” que gestionan en almacenamiento
OpenStack Core: Swift
ComputeService(Nova)
ComputeService(Nova)
Object StorageService(Swift)
Object StorageService(Swift)
NetworkService
(Neutron)
NetworkService
(Neutron)
Block StorageService(Cinder)
Block StorageService(Cinder)
Object Storage: Swift
● Proveedor de almacenamiento de objetos (similar a Amazon S3)
● Soporta API nativa y compatibilidad con S3● El único servicio OpenStack en el que el controlador y el proveedor es el mismo● Masivamente escalable y tolerante a fallos
● Por defecto redundancia 3x● Usa hardware barato● No requiere RAID● Replicacion multi-site
● “Eventualmente consistente” (si, ya dije que se hacian trampas)
OpenStack Core
ComputeService(Nova)
ComputeService(Nova)
Object StorageService(Swift)
Object StorageService(Swift)
NetworkService
(Neutron)
NetworkService
(Neutron)
Block StorageService(Cinder)
Block StorageService(Cinder)
Servicios vs Proveedores
ComputeService(Nova)
ComputeService(Nova)
Object StorageService(Swift)
Object StorageService(Swift)
NetworkService
(Neutron)
NetworkService
(Neutron)
Block StorageService(Cinder)
Block StorageService(Cinder)
Driver/Plugins Driver/Plugins Driver/Plugins
NetworkDevicesNetworkDevices
StorageDevicesStorageDevices
Hypervisor(or Bare Metal)
Hypervisor(or Bare Metal)
Servicios y APIs
ComputeService(Nova)
ComputeService(Nova)
Object StorageService(Swift)
Object StorageService(Swift)
NetworkService
(Neutron)
NetworkService
(Neutron)
Block StorageService(Cinder)
Block StorageService(Cinder)
Driver/Plugins Driver/Plugins Driver/Plugins
NetworkDevicesNetworkDevices
StorageDevicesStorageDevices
Hypervisor(or Bare Metal)
Hypervisor(or Bare Metal)
APIs APIs APIs APIs
Control & Data planes
NovaCompute Service
NovaCompute Service
NeutronNetworkService
NeutronNetworkService
CinderStorageService
CinderStorageService
HypervisorHypervisor NetworkNetwork StorageStorage
Services
Control Plane
Data Plane
Drivers / Providers
Data Path
Almacenamiento en Nova
Hypervisor Host
Nova Compute Service
Hypervisor Driver
APIs
APIs
Horizon GUI
VMs
Local Disk
Hypervisor Host
VMs
Non-Persistent or
“Ephemeral” VMs
Configuracion por defecto de Nova
Almacenamiento en Nova
Hypervisor Host
Nova Compute Service
Hypervisor Driver
APIs
APIs
Horizon GUI
VMs
Local Disk
Hypervisor Host
VMs
Non-Persistent or
“Ephemeral” VMs
Cinder Volume Service
Storage Driver
Swift Object Storage Service
HTTP (Control + Data)
APIs
iSCSI
StorageProvider
Almacenamiento Persistente
Almacenamiento en Nova
Hypervisor Host
Nova Compute Service
Hypervisor Driver
APIs
APIs
Horizon GUI
VMs
Local Disk
Hypervisor Host
VMs
Instancia persistente usando“Boot From Volume”
Cinder Volume Service
Storage Driver
Swift Object Storage Service
HTTP (Control + Data)
APIs
iSCSI
StorageProvider
Instancias persistentes
iSCSI
OpenStack Core: Horizon
ComputeService(Nova)
ComputeService(Nova)
Object StorageService(Swift)
Object StorageService(Swift)
NetworkService
(Neutron)
NetworkService
(Neutron)
Block StorageService(Cinder)
Block StorageService(Cinder)
APIs APIs APIs APIs
DashboardHorizon
Web GUI
DashboardHorizon
Web GUI
Dashboard: Horizon
OpenStack Core: Glance
ComputeService(Nova)
ComputeService(Nova)
Object StorageService(Swift)
Object StorageService(Swift)
NetworkService
(Neutron)
NetworkService
(Neutron)
Block StorageService(Cinder)
Block StorageService(Cinder)
Driver/Plugins Driver/Plugins Driver/Plugins
APIs APIs APIs APIs
DashboardWeb GUI
ImageService(Glance)
ImageService(Glance)
APIs
DashboardHorizon
Web GUI
DashboardHorizon
Web GUI
Images: Glance
● Repositorio de imágenes de maquinas virtuales● Pueden ser usadas por usuarios para crear “instancias”
● Pueden ser publicas o privadas● Los usuarios pueden crear nuevas imagenes● Recomendaciones para imagenes creadas:
● Una unica particion para / al final del disco● Mantenerla lo mas pequeña posible● No MACs● Desactivar firewall en el SO● Activar SSH en el arranque● Instalar cloud-init
● Se pueden almacenar en Swift
OpenStack Core: Keystone
ComputeService(Nova)
ComputeService(Nova)
Object StorageService(Swift)
Object StorageService(Swift)
NetworkService
(Neutron)
NetworkService
(Neutron)
Block StorageService(Cinder)
Block StorageService(Cinder)
Driver/Plugins Driver/Plugins Driver/Plugins
APIs APIs APIs APIs
DashboardWeb GUI
ImageService(Glance)
ImageService(Glance)
APIs
IdentityService
(Keystone)
IdentityService
(Keystone)
DashboardHorizon
Web GUI
DashboardHorizon
Web GUI
Identity Service: Keystone
● Provee servicios de identidad, autenticación, autorización y catálogo de servicios a otros servicios de OpenStack● Usa una BBDD propia, pero puede enlazarse a LDAP y otros sistemas de autenticación externos● Soporta federacion de identidades (OpenID, SAML, Oauth)● Modelo de datos:
● Dominio● Usuario● “Tenant” (Proyecto)● Rol
OpenStack Core: Heat
ComputeService(Nova)
ComputeService(Nova)
Object StorageService(Swift)
Object StorageService(Swift)
NetworkService
(Neutron)
NetworkService
(Neutron)
Block StorageService(Cinder)
Block StorageService(Cinder)
Driver/Plugins Driver/Plugins Driver/Plugins
APIs APIs APIs APIs
DashboardWeb GUI
ImageService(Glance)
ImageService(Glance)
APIs
IdentityService
(Keystone)
IdentityService
(Keystone)
OrchestrationService(Heat)
OrchestrationService(Heat)
DashboardHorizon
Web GUI
DashboardHorizon
Web GUI
Orchestration: Heat
● Permite la creación de infraestructuras complejas mediante plantillas de definición
● Soporta el paso de parámetros a las plantillas● El sueño de los DevOps: “Infraestructura como como
código”● La plantillas equivalen a clases y los parámetros a
atributos modificables● Compatible con el formato de plantillas y API de AWS CloudFormation● Permite la creación rápida y reproducible de pilas completas de aplicaciones
OpenStack Core: Ceilometer
ComputeService(Nova)
ComputeService(Nova)
Object StorageService(Swift)
Object StorageService(Swift)
NetworkService
(Neutron)
NetworkService
(Neutron)
Block StorageService(Cinder)
Block StorageService(Cinder)
Driver/Plugins Driver/Plugins Driver/Plugins
APIs APIs APIs APIs
DashboardWeb GUI
ImageService(Glance)
ImageService(Glance)
APIs
IdentityService
(Keystone)
IdentityService
(Keystone)
OrchestrationService(Heat)
OrchestrationService(Heat)
Metering &Monitoring
(Ceilometer)
Metering &Monitoring
(Ceilometer)
DashboardHorizon
Web GUI
DashboardHorizon
Web GUI
Monitoring: Ceilometer
● Provee un servicio unificado de monitorizacion, medición y “contabilidad” de otros servicios de OpenStack● Puede ser utilizado por proveedores para facturar el uso de infraestructuras
Monitoring: Ceilometer
Openstack Core: Misc
ComputeService(Nova)
ComputeService(Nova)
Object StorageService(Swift)
Object StorageService(Swift)
NetworkService
(Neutron)
NetworkService
(Neutron)
Block StorageService(Cinder)
Block StorageService(Cinder)
Driver/Plugins Driver/Plugins Driver/Plugins
APIs APIs APIs APIs
DashboardWeb GUI
ImageService(Glance)
ImageService(Glance)
APIs
IdentityService
(Keystone)
IdentityService
(Keystone)
OrchestrationService(Heat)
OrchestrationService(Heat)
Metering &Monitoring
(Ceilometer)
Metering &Monitoring
(Ceilometer)
DashboardHorizon
Web GUI
DashboardHorizon
Web GUI
BBDDAMQP(Misc)
BBDDAMQP(Misc)
BBDD y AMQP
● Cada servicio OpenStack utiliza una BBDD para almacenar sus datos, por lo que necesitamos un servidor de BBDD central● El controlador de cada servicio se comunica con sus “workers” mediante mensajes AMQP, por lo que necesitamos una infraestructura de “brokers” AMQP● Balanceadores y alta disponibilidad
Arquitectura OpenStack Core
Arquitectura OpenStack Core
Hypervisor
NetworkProvider
StorageProvider
¿Sencillo, no?
Horizon
NeutronCinder
NovaSwift
Glance
Keystone
Demo
Demo de OpenStack
OpenStack de CanaryTek (paciencia...)
● Controller y Neutron: VM en oVirt con 8GB de RAM● 2 Nodos Nova/Cinder: HP MicroServer con 10GB de RAM● 2 redes: “publica” (192.168.100.0/24) y gestión (172.16.11.0/24)● Para empezar a probar: devstack
Interfaz Web: Horizon
Un paseo por el Horizon(te)
Horizon
● Dashboard● Instancias● Volumenes● Imagenes● Seguridad
● Security Groups, claves SSH, IP Flotante, Acceso API● Red
● Topología, Redes, Routers
Crear una Instancia
● Web: no tiene ciencia● Consola
openstack server create --flavor m1.nano --key kuko --image cirros test1openstack server list
● Verificar acceso SSH y red● Borrar instancia
openstack server delete test1openstack server list
● Dejar la maquina creada (la necesitaremos)
openstack server create --flavor m1.nano --key kuko --image cirros test1openstack server list
Asignar volumen a instancia
● Web: no tiene ciencia● Crear volumen
openstack volume create –size 1 volume1openstack volume list
● Asignar a instanciaopenstack server add volume test1 volume1openstack volume list
● Acceder a instancia y verificar que vemos volumen
Snapshots
● Web: no tiene ciencia● Crear snapshot
openstack snapshot create –name snap-volume1 –force volume1# Aclarar el –force??openstack snapshot list
● Crear volumen desde el snapshotopenstack volume create –snaphot snap-volume1 –size 2 volume2openstack volume list
● Tenemos un volumen de 2G creado a partir del snapshot del volumen1 de 1G
Arrancar desde volumen
● Web: no tiene ciencia● Crear volumen a partir de imagen
openstack image listopenstack volume create –-image CentOS7-Cloud –-size 10 vol-vm1openstack volume list
● Crear instancia desde volumen openstack server create –-flavor m1.small –key kuko —volume vol-vm1 test2openstack server list
● Ahora la instancia es persistente
Crear instancia usando cloud-init
● Web: no tiene ciencia● Ver fichero user_data.file● Crear una una imagen pasandole los datos
openstack server list● openstack server create --flavor m1.small --key kuko --image CentOS7-
Cloud –user-data user-data.file test-custom● Acceder a la instancia y verificar
Funcionalidades “Cloud”
¡ Pero eso lo hace cualquiera!
¿donde esta la parte “Cloud”?
Crear red privada y router
● Web: no tiene ciencia● Crear red (dominio de broadcast)
openstack network listopenstack network create network1openstack network list
● Crear subnet (direccionamiento asociado)openstack subnet create –subnet-range 172.16.100.0/24 –network network1 subnet1openstack subnet list
● Crear un routeropenstack router create gw1neutron router-gateway-set gw1 provideropenstack router show gw1
● Conectar a red privada● neutron router-interface-add gw1 subnet1
Crear instancia en red privada● Web: no tiene ciencia● Crear maquina en red privada
openstack network list (ver ID)openstack server create --flavor m1.nano --key kuko --image cirros –nic net-id=$ID test3openstack server create --flavor m1.nano --key kuko --image cirros –nic net-id=$ID test4openstack server list
● Por qué no llego?● “Solicitar” IP flotante
openstack floating ip listopenstack floating ip create provideropenstack floating ip list
● Asignar IP flotante a instancia● openstack server add floating ip test3 192.168.100.203
● Verificar que llegamos a la IP flotante y desde una instancia a la otra
Crear stack completo (Heat)
● Web: no tiene mucho sentido● Revisar plantilla y parametros● Crear stack
openstack stack listopenstack stack create –environment params.yml –template template.yml stack-test1openstack stack list
● Revisar en Web UI● Borrar stack
openstack stack delete stack-test1openstack stack list
● Desaparecen todos los recursos
Funcionalidades “Enterprise”
¿Vale, pero puedo usar esto
para mis “mascotas”?
Migración en caliente
● Web: no tiene ciencia● Solo puede hacerlo un administrador (por motivos evidentes)● Requiere que la instancia tenga el disco de sistema en un volumen Cinder o en almacenamiento compartido● Ver en que hypervisor se esta ejecutando la instancia
openstack server show vm01● Migrar “en caliente”
nova live-migrate vm01 ostack2.canarytek.lan● Verificar que el hypervisor ha cambiado
● openstack server show vm01
(Hay otros métodos “frios” y “tibios”)
Watchdog
● Watchdog “virtual” para que el hypervisor reinicie la instancia se esta “se cuelga”● Ver propiedad watchdog de la imagen CentOS7-Cloud● Crear una instancia basada en esa imagen
openstack server create –flavor m1.small –image CentOS7-Cloud –key kuko –nic net-id=$ID_RED test-watchdog
● Instalar, activar y arrancar watchdog● Hacer ping a la instancia● Provocar kernel panic
echo 0 > /proc/sys/kernel/sysrqecho c > /proc/sysrq-trigger
● Esperar, el ping se recuperara en un rato
Alta disponibilidad de Instancia
(Si preguntabas por esto, te solían contestar mal)
●Manual (o scripts externos)● Evacuate + arranque en otro nodo
● Masakari (Subproyecto)● Especifico para HA de instacias● Reserva nodos fisicos de sustitución
● Vitrage (RCA OpenStack) + Doctor (OpenNFV)● https://www.youtube.com/watch?v=Dvh8q5m9Ahk● Demo IMPRESIONANTE (minuto 8:30)