© Martin Alfke - 2014
OpenNebula
public and private cloud management	

!
Martin Alfke	

<martin.alfke@buero20.org>	

!
GUUG Hamburg	

12.06.2014
© Martin Alfke - 2014
• Freelancer - Berlin/Germany	

• Automation and Cfg Mgmt	

• ePost Development GmbH	

• Migration von HW aufVM	

• Umzug Bonn —> Berlin
Martin Alfke - at home
OpenNebula	

- Martin Alfke -
© Martin Alfke - 2014
OpenNebula	

- Agenda -
• Allgemein	

• Backends	

• Planung	

• Komponenten	

• Workflow	

• Management (GUI/CLI)	

• Live Demo
© Martin Alfke - 2014
OpenNebula	

- Allgemein -
• Management vonVirtualisierern	

• Management von Netzwerk
Interfaces	

• Management vonVM’s
© Martin Alfke - 2014
OpenNebula	

- Allgemein -
© Martin Alfke - 2014
OpenNebula	

- Backends -
• Netzwerk 	

• Storage	

• Virtualisierung	

• Image
© Martin Alfke - 2014
OpenNebula	

- Netzwerk Backends -
• Unterstütze Netzwerk Backends	

• 802.1q	

• ebtables / iptables	

• ovswitch	

• dummy (NAT)
© Martin Alfke - 2014
OpenNebula	

- Storage Backends -
• Unterstütze Storage Backends	

• Lokale Storage	

• NFS	

• Ceph	

• Gluster	

• iSCSI (Community Plugin)
© Martin Alfke - 2014
OpenNebula	

- Storage Backends -
• ssh (Kopieren auf
denVirtualisierer)	

!
!
© Martin Alfke - 2014
OpenNebula	

- Storage Backends -
• ssh (Kopieren auf
denVirtualisierer)	

• shared (Kopieren
von Shared Storage)	

!
© Martin Alfke - 2014
OpenNebula	

- Storage Backends -
• ssh (Kopieren auf
denVirtualisierer)	

• shared (Kopieren
von Shared Storage)	

• lvm copy (LVM
cluster FS)
© Martin Alfke - 2014
OpenNebula	

-Virtualisierung -
• UnterstützeVirtualizierer	

• KVM	

• VMware	

• Xen	

• Public Clouds (AWS/Rackspace/…)
© Martin Alfke - 2014
OpenNebula	

- Image Backends -
• Unterstütze Image Backends	

• LVM	

• qcow2	

• ceph blocks
© Martin Alfke - 2014
OpenNebula	

- Planung -
• Cluster	

• Over Commitment	

• Storage
© Martin Alfke - 2014
OpenNebula	

- Planung -
• Cluster	

• Trennung und Gruppierung vonVirtualisieren	

• Verteilung nach Kriterien:	

• Anzahl vonVM’s	

• Last	

• Individuelle User Berechtigungen
© Martin Alfke - 2014
OpenNebula	

- Planung -
© Martin Alfke - 2014
OpenNebula	

- Planung -
• Over Commitment	

• RAM Over Commitment - benötigt KSM	

• Benötigt eine Code Änderung in OpenNebula
(reserved RAM)	

• CPU Over Commitment - vCPU im Template	

!
!
© Martin Alfke - 2014
OpenNebula	

- Planung -
• Storage	

• Lokale Storage -VM Images müssen via SSH kopiert
werden	

• Shared Image Storage -VM Images werden lokal
kopiert (cp)	

• Shared OpenNebula Installation -VM Images werden
gelinkt (ln -s)	

!
© Martin Alfke - 2014
OpenNebula	

- Komponenten -
• Management
Node	

• Virtualisierer
© Martin Alfke - 2014
OpenNebula	

- Komponenten -
• Management Node	

• Opennebula (notwendig)	

• Apache + Passenger (sunstone web gui -
optional)	

• VNC Proxy (optional)	

• MySQL DB (notwendig - sqlite für Tests)	

• User: oneadmin + ssh key (notwendig)
© Martin Alfke - 2014
OpenNebula	

- Komponenten -
• Virtualisierer (KVM)	

• libvirtd	

• User: oneadmin + authorized key file	

• sudoers (bridgectl, …)	

• policykit (RH) / User Berechtigungen für /dev/
qemu (Debian)
© Martin Alfke - 2014
OpenNebula	

- Komponenten -
© Martin Alfke - 2014
OpenNebula	

- Workflow -
• Netzwerk	

• Image	

• Kontextualisierung	

• Template	

• VM	

• Hooks
© Martin Alfke - 2014
OpenNebula	

- Workflow -
• Netzwerk	

• Image	

• Kontextualisierung	

• Template	

• VM	

• Hooks
• 802.1q	

• ebtables	

• open vswitch	

• dummy (nat)
© Martin Alfke - 2014
OpenNebula	

- Workflow -
• Netzwerk	

• Image	

• Kontextualisierung	

• Template	

• VM	

• Hooks
• Muss vorab angefertigt
werden	

• Braucht one-context
Package oder cloud-init
(v0.7.3 oder neuer)	

• Hinweis: Image erst auf
Management Node kopieren
© Martin Alfke - 2014
OpenNebula	

- Workflow -
• Netzwerk	

• Image	

• Kontextualisierung	

• Template	

• VM	

• Hooks
• Anpassungen des Images
(hostname, Netzwerk
Konfiguration, ssh pub key,
…	

• Kann durch eigene Skripte
erweitert werden	

• VM erhält ein CD-ROM mit
den Kontext Informationen
© Martin Alfke - 2014
OpenNebula	

- Workflow -
• Netzwerk	

• Image	

• Kontextualisierung	

• Template	

• VM	

• Hooks
© Martin Alfke - 2014
OpenNebula	

- Workflow -
• Netzwerk	

• Image	

• Kontextualisierung	

• Template	

• VM	

• Hooks
• Zusammenfassung von
Netzwerk, CPU, RAM und
Image	

• Hardware Spezifika (z.B.
ACPID)	

• Dient alsVorlage fürVM
© Martin Alfke - 2014
OpenNebula	

- Workflow -
• Netzwerk	

• Image	

• Kontextualisierung	

• Template	

• VM	

• Hooks
• VM wird auf Basis eines
Templates initialisiert
© Martin Alfke - 2014
OpenNebula	

- Workflow -
• Netzwerk	

• Image	

• Kontextualisierung	

• Template	

• VM	

• Hooks
• Hooks werden bei
bestimmtenVM Stati
ausgeführt	

• DNS (nsupdate), Puppet
Zertifikatsmanagement,
PuppetDB remove	

• Anmelden einerVM an
einem Dritt-System
© Martin Alfke - 2014
OpenNebula	

- Workflow -
• Netzwerk	

• Image	

• Kontextualisierung	

• Template	

• VM	

• Hooks
#!/bin/bash	

set -e	

NAME=`onevm show $1 | 	

grep HOSTNAME | cut -d '"' -f2`	

!
DOMAIN=`echo $NAME | cut -d '.' -f2-`	

!
curl -k -X DELETE -H "Accept: pson" https://
puppet.$DOMAIN:8140/production/
certificate_status/$NAME
© Martin Alfke - 2014
OpenNebula	

- GUI / CLI -
• CLI	

• User braucht eine Token Datei ~/.one_auth.conf	

• Verschiedene Kommandos (one*)	

• GUI	

• Sunstone Web Interface	

• Anbindung an LDAP möglich	

• Verwendet ebenfalls eine Token Datei
© Martin Alfke - 2014
OpenNebula	

- GUI / CLI -
© Martin Alfke - 2014
OpenNebula	

- GUI / CLI -
© Martin Alfke - 2014
OpenNebula	

- GUI / CLI -
© Martin Alfke - 2014
OpenNebula	

- GUI / CLI -
© Martin Alfke - 2014
OpenNebula	

- GUI / CLI -
© Martin Alfke - 2014
OpenNebula	

- GUI / CLI -
© Martin Alfke - 2014
OpenNebula	

- GUI / CLI -
© Martin Alfke - 2014
# Context variables generated by OpenNebula	

DISK_ID='1'	

ETH0_DNS='10.175.4.11'	

ETH0_GATEWAY='10.175.16.1'	

ETH0_IP='10.175.24.1'	

ETH0_MASK='255.255.240.0'	

ETH0_NETWORK='10.175.16.0'	

FILES_DS='/var/lib/one/datastores/2/
ef48a35be2d8723ef7788175be6087eb:'''init.sh''' '	

HOSTNAME='martin.xxxxxxxxx'	

NETWORK='YES'	

TARGET='hdb'
OpenNebula	

- Kontextualisierung -
© Martin Alfke - 2014
#! /usr/bin/python	

# based on script of Chris Usher June 2009	

# import xmlrpclib re hashlib	

!
server = 'http://<opennebula>:2633/RPC2'	

user = "oneadmin"	

password = "<password>"	

one_auth = '{0}:{1}'.format(user, password)	

!
def getVMInfo(id):	

response = xmlrpclib.ServerProxy(server).one.vm.info(one_auth,id)	

return response[1]	

!
print getVMInfo(24)
OpenNebula	

- XML RPC API -
© Martin Alfke - 2014
OpenNebula
• Demo
© Martin Alfke - 2014
OpenNebula
Danke schön.	

Fragen?

GUUG Hamburg OpenNebula

  • 1.
    © Martin Alfke- 2014 OpenNebula public and private cloud management ! Martin Alfke <martin.alfke@buero20.org> ! GUUG Hamburg 12.06.2014
  • 2.
    © Martin Alfke- 2014 • Freelancer - Berlin/Germany • Automation and Cfg Mgmt • ePost Development GmbH • Migration von HW aufVM • Umzug Bonn —> Berlin Martin Alfke - at home OpenNebula - Martin Alfke -
  • 3.
    © Martin Alfke- 2014 OpenNebula - Agenda - • Allgemein • Backends • Planung • Komponenten • Workflow • Management (GUI/CLI) • Live Demo
  • 4.
    © Martin Alfke- 2014 OpenNebula - Allgemein - • Management vonVirtualisierern • Management von Netzwerk Interfaces • Management vonVM’s
  • 5.
    © Martin Alfke- 2014 OpenNebula - Allgemein -
  • 6.
    © Martin Alfke- 2014 OpenNebula - Backends - • Netzwerk • Storage • Virtualisierung • Image
  • 7.
    © Martin Alfke- 2014 OpenNebula - Netzwerk Backends - • Unterstütze Netzwerk Backends • 802.1q • ebtables / iptables • ovswitch • dummy (NAT)
  • 8.
    © Martin Alfke- 2014 OpenNebula - Storage Backends - • Unterstütze Storage Backends • Lokale Storage • NFS • Ceph • Gluster • iSCSI (Community Plugin)
  • 9.
    © Martin Alfke- 2014 OpenNebula - Storage Backends - • ssh (Kopieren auf denVirtualisierer) ! !
  • 10.
    © Martin Alfke- 2014 OpenNebula - Storage Backends - • ssh (Kopieren auf denVirtualisierer) • shared (Kopieren von Shared Storage) !
  • 11.
    © Martin Alfke- 2014 OpenNebula - Storage Backends - • ssh (Kopieren auf denVirtualisierer) • shared (Kopieren von Shared Storage) • lvm copy (LVM cluster FS)
  • 12.
    © Martin Alfke- 2014 OpenNebula -Virtualisierung - • UnterstützeVirtualizierer • KVM • VMware • Xen • Public Clouds (AWS/Rackspace/…)
  • 13.
    © Martin Alfke- 2014 OpenNebula - Image Backends - • Unterstütze Image Backends • LVM • qcow2 • ceph blocks
  • 14.
    © Martin Alfke- 2014 OpenNebula - Planung - • Cluster • Over Commitment • Storage
  • 15.
    © Martin Alfke- 2014 OpenNebula - Planung - • Cluster • Trennung und Gruppierung vonVirtualisieren • Verteilung nach Kriterien: • Anzahl vonVM’s • Last • Individuelle User Berechtigungen
  • 16.
    © Martin Alfke- 2014 OpenNebula - Planung -
  • 17.
    © Martin Alfke- 2014 OpenNebula - Planung - • Over Commitment • RAM Over Commitment - benötigt KSM • Benötigt eine Code Änderung in OpenNebula (reserved RAM) • CPU Over Commitment - vCPU im Template ! !
  • 18.
    © Martin Alfke- 2014 OpenNebula - Planung - • Storage • Lokale Storage -VM Images müssen via SSH kopiert werden • Shared Image Storage -VM Images werden lokal kopiert (cp) • Shared OpenNebula Installation -VM Images werden gelinkt (ln -s) !
  • 19.
    © Martin Alfke- 2014 OpenNebula - Komponenten - • Management Node • Virtualisierer
  • 20.
    © Martin Alfke- 2014 OpenNebula - Komponenten - • Management Node • Opennebula (notwendig) • Apache + Passenger (sunstone web gui - optional) • VNC Proxy (optional) • MySQL DB (notwendig - sqlite für Tests) • User: oneadmin + ssh key (notwendig)
  • 21.
    © Martin Alfke- 2014 OpenNebula - Komponenten - • Virtualisierer (KVM) • libvirtd • User: oneadmin + authorized key file • sudoers (bridgectl, …) • policykit (RH) / User Berechtigungen für /dev/ qemu (Debian)
  • 22.
    © Martin Alfke- 2014 OpenNebula - Komponenten -
  • 23.
    © Martin Alfke- 2014 OpenNebula - Workflow - • Netzwerk • Image • Kontextualisierung • Template • VM • Hooks
  • 24.
    © Martin Alfke- 2014 OpenNebula - Workflow - • Netzwerk • Image • Kontextualisierung • Template • VM • Hooks • 802.1q • ebtables • open vswitch • dummy (nat)
  • 25.
    © Martin Alfke- 2014 OpenNebula - Workflow - • Netzwerk • Image • Kontextualisierung • Template • VM • Hooks • Muss vorab angefertigt werden • Braucht one-context Package oder cloud-init (v0.7.3 oder neuer) • Hinweis: Image erst auf Management Node kopieren
  • 26.
    © Martin Alfke- 2014 OpenNebula - Workflow - • Netzwerk • Image • Kontextualisierung • Template • VM • Hooks • Anpassungen des Images (hostname, Netzwerk Konfiguration, ssh pub key, … • Kann durch eigene Skripte erweitert werden • VM erhält ein CD-ROM mit den Kontext Informationen
  • 27.
    © Martin Alfke- 2014 OpenNebula - Workflow - • Netzwerk • Image • Kontextualisierung • Template • VM • Hooks
  • 28.
    © Martin Alfke- 2014 OpenNebula - Workflow - • Netzwerk • Image • Kontextualisierung • Template • VM • Hooks • Zusammenfassung von Netzwerk, CPU, RAM und Image • Hardware Spezifika (z.B. ACPID) • Dient alsVorlage fürVM
  • 29.
    © Martin Alfke- 2014 OpenNebula - Workflow - • Netzwerk • Image • Kontextualisierung • Template • VM • Hooks • VM wird auf Basis eines Templates initialisiert
  • 30.
    © Martin Alfke- 2014 OpenNebula - Workflow - • Netzwerk • Image • Kontextualisierung • Template • VM • Hooks • Hooks werden bei bestimmtenVM Stati ausgeführt • DNS (nsupdate), Puppet Zertifikatsmanagement, PuppetDB remove • Anmelden einerVM an einem Dritt-System
  • 31.
    © Martin Alfke- 2014 OpenNebula - Workflow - • Netzwerk • Image • Kontextualisierung • Template • VM • Hooks #!/bin/bash set -e NAME=`onevm show $1 | grep HOSTNAME | cut -d '"' -f2` ! DOMAIN=`echo $NAME | cut -d '.' -f2-` ! curl -k -X DELETE -H "Accept: pson" https:// puppet.$DOMAIN:8140/production/ certificate_status/$NAME
  • 32.
    © Martin Alfke- 2014 OpenNebula - GUI / CLI - • CLI • User braucht eine Token Datei ~/.one_auth.conf • Verschiedene Kommandos (one*) • GUI • Sunstone Web Interface • Anbindung an LDAP möglich • Verwendet ebenfalls eine Token Datei
  • 33.
    © Martin Alfke- 2014 OpenNebula - GUI / CLI -
  • 34.
    © Martin Alfke- 2014 OpenNebula - GUI / CLI -
  • 35.
    © Martin Alfke- 2014 OpenNebula - GUI / CLI -
  • 36.
    © Martin Alfke- 2014 OpenNebula - GUI / CLI -
  • 37.
    © Martin Alfke- 2014 OpenNebula - GUI / CLI -
  • 38.
    © Martin Alfke- 2014 OpenNebula - GUI / CLI -
  • 39.
    © Martin Alfke- 2014 OpenNebula - GUI / CLI -
  • 40.
    © Martin Alfke- 2014 # Context variables generated by OpenNebula DISK_ID='1' ETH0_DNS='10.175.4.11' ETH0_GATEWAY='10.175.16.1' ETH0_IP='10.175.24.1' ETH0_MASK='255.255.240.0' ETH0_NETWORK='10.175.16.0' FILES_DS='/var/lib/one/datastores/2/ ef48a35be2d8723ef7788175be6087eb:'''init.sh''' ' HOSTNAME='martin.xxxxxxxxx' NETWORK='YES' TARGET='hdb' OpenNebula - Kontextualisierung -
  • 41.
    © Martin Alfke- 2014 #! /usr/bin/python # based on script of Chris Usher June 2009 # import xmlrpclib re hashlib ! server = 'http://<opennebula>:2633/RPC2' user = "oneadmin" password = "<password>" one_auth = '{0}:{1}'.format(user, password) ! def getVMInfo(id): response = xmlrpclib.ServerProxy(server).one.vm.info(one_auth,id) return response[1] ! print getVMInfo(24) OpenNebula - XML RPC API -
  • 42.
    © Martin Alfke- 2014 OpenNebula • Demo
  • 43.
    © Martin Alfke- 2014 OpenNebula Danke schön. Fragen?