Donnerstag Aug 15, 2013

Die Virtualisierungsmaschine: Oracle Virtual Compute Appliance

Oft wurde bereits darüber spekuliert, ob und wann es von Oracle ein vorkonfiguriertes System explizit für den Aufbau einer komplett virtualisierten Infrastruktur gibt - z.B. für den Aufbau von Private Clouds. Nun ist es soweit, die Engineered Systems Familie hat Zuwachs bekommen: Die Oracle Virtual Compute Appliance - kurz OVCA - ist verfügbar.

Es handelt sich dabei (wie bei den Exa* Systemen) um ein komplett vorkonfiguriertes Rack, welches alle Komponenten mitbringt die man für ein schnelles und performantes Deployment von Oracle VM(x86)-basierten Infrastruktur braucht - und zwar in redundanter Ausführung. Konkret heisst das in der kleinsten Ausbaustufe:

  • 2 Management-Knoten
  • 2 Oracle Fabric Interconnect - Knoten
    (Es handelt sich hier um die ehem. unter "XSigo" firmierende virtuelle Netzwerktechnologie auf Infiniband-Basis. Diese bietet neben der hohen Flexibilität eines "Software Defined Networks"  (SDN) auch Performance-Vorteile wie z.B. extrem kurze Latenzen bei der Kommunikation der einzelnen VMs untereinander.)
  • 2 Infiniband-Switches
  • 1 ZFS Storage Appliance (7320) mit zwei Controllern/"Köpfen" und ca. 6 TB verfügbarem Speicher
  • 1 10Gbit Ethernet Switch
  • 2 Compute Nodes (X3-2)

Interessant dabei ist: Im Gegensatz z.B. zur Exadata, wo man nur "feste Stückelungen" eines Racks kaufen kann (Viertel, Achtel...) lässt sich die OVCA ab dem dritten Node in beliebigen Stufen aufrüsten - bis zum Maximum von 25 Nodes, welches einer Gesamtleistung von 6,4TB RAM und 400 Cores entspricht - und zwar durch simples Einstecken ins Rack. Dank kompletter Vorverkabelung und automatischem Discovery müssen sonst keine weiteren Schritte unternommen werden, um später hinzugekaufte Nodes nutzen zu können.

Überhaupt war das Design-Ziel bei der Entwicklung der OVCA, alles so einfach in Betrieb nehmen zu können wie möglich: Vom Einschalten des Racks bis zum Deployment der ersten VM auf Basis eines vorgefertigten Templates vergeht nur ca. eine Stunde.

Auf den Compute Nodes kommt Oracle VM 3.2 zum Einsatz und kann dort mit allen bekannten Features genutzt werden - wie z.B. Live Migration, Dynamic Resource Scheduling etc. Auch bzgl. der verwendbaren Gastsysteme und der darin nutzbaren Anwendungen gibt es keine Einschränkungen. Für den Betrieb der OVCA werden keine zusätzlichen Software-Lizenzen benötigt - die auf den Management Knoten laufende OVCA Controller Software erweitert den Oracle VM Manager und ist wie dieser ebenfalls kostenfrei.

Alle weiteren Informationen finden Sie hier - inkl. der Möglichkeit, die Aufzeichnung des Launch-Webcasts mit Wim Coekaerts (Senior Vice President Linux and Virtualization) anzusehen:
http://oracle.com/ovca

Montag Aug 05, 2013

Linux Container (LXC) — Teil 2: Arbeiten mit Containern

Teil 1 dieser Artikelserie vermittelte einen Überblick über die Linux-Container-Technologie. In diesem zweiten Teil soll der Umgang mit Containern anhand einiger Beispiele erläutert werden. Diese lassen sich auf einem aktuellen Oracle Linux 6 System nachvollziehen. Für die ersten Schritte empfiehlt sich die Installation von Oracle Linux in einer virtuellen Umgebung wie z.B. Oracle VM VirtualBox. Für diese Plattform bietet Oracle ein bereits vorinstalliertes Oracle Linux 6 Image zum Download vom Oracle Technology Network (OTN) an.

Die Administration von Linux-Containern erfolgt auf der Kommandozeile; bisher existiert noch keine Integration oder Unterstützung von Linux-Containern in Applikationen wie dem Oracle VM Manager oder dem Oracle Enterprise Manager. Viele von Oracle entwickelte Verbesserungen sind jedoch in das in Oracle Linux 6.4 enthaltene lxc-Paket eingeflossen; diese wurden auch an das LXC-Projekt übergeben und sind damit Bestandteil aktueller LXC-Versionen. Die Unterstützung von Linux-Containern ist weiterhin in das libvirt-Projekt integriert, welches eine grafische Oberfläche für die komfortable Verwaltung von virtuellen Maschinen oder Linux-Containern mit Hilfe des virt-manager (und anderen Werkzeugen) ermöglicht. Libvirt ist ebenfalls Bestandteil von Oracle Linux.

Das Anlegen eines Oracle Linux-Containers ist aber auch mit Hilfe der LXC-Kommandozeilenwerkzeuge in wenigen Schritten erledigt. Zuerst sollte ein dediziertes Verzeichnis für die Container-Dateisysteme angelegt werden, als Standard wird /container als Verzeichnis-Name vorgegeben. Wird dieses Verzeichnis auf einem Btrfs-Dateisystem angelegt, ergeben sich einige weitere interessante Möglichkeiten, wie z.B. das "Einfrieren" eines Container-Dateisystems zu einem bestimmten Zeitpunkt oder das schnelle Erzeugen (Clonen) von weiteren Containern, basierend auf einer "Muster-Vorlage" (Template). Das Clonen mit Hilfe von Btrfs-Snapshots erfolgt extrem schnell und platzsparend; nur die Veränderungen zum "Template" werden gespeichert. Die Erstellung und Verwaltung von Btrfs-Dateisystemen wird im Kapitel " The Btrfs File System" des "Oracle Linux Administrator's Solutions Guide for Release 6" im Detail erläutert.

Um beispielsweise ein Btrfs-Dateisystem auf einem zweiten Festplattenlaufwerk anzulegen und es unter /container als Verzeichnis einzuhängen, können folgende Kommandos verwendet werden:

# mkfs.btrfs /dev/sdb

WARNING! - Btrfs v0.20-rc1 IS EXPERIMENTAL
WARNING! - see http://btrfs.wiki.kernel.org before using

fs created label (null) on /dev/sdb
	nodesize 4096 leafsize 4096 sectorsize 4096 size 4.00GB
Btrfs v0.20-rc1

# mdkir -v /container
mkdir: created directory `/container'
# mount -v /dev/sdb /container
mount: you didn't specify a filesystem type for /dev/sdb
       I will try type btrfs
/dev/sdb on /container type btrfs (rw)

Anschließend können Sie einen Container mit dem Kommando lxc-create erzeugen. Dessen Option "-t" bestimmt den generellen Distributions-Typ der erstellt werden soll (das sogenannte "Template"), z.B. "oracle", "ubuntu" oder "fedora". Je nach ausgewählten Template lassen sich nach den zwei Trennzeichen ("--") weitere Template-spezifische Optionen angeben. Für das Oracle-Template läßt sich z.B. mit der "--release"-Option die Distributions-Version auswählen, z.B. "5.8", "6.3" oder "6.latest". Weitere Informationen über die hier verfügbaren Konfigurationsmöglichkeiten finden Sie im Kapitel "About the lxc-oracle Template Script" des Oracle Linux 6 Administrator's Solutions Guide.

Um also beispielsweise einen Container mit dem Namen "ol6cont1" mit der aktuellsten Version von Oracle Linux 6 und Standardvorgaben zu erzeugen verwenden Sie folgendes Kommando:

# lxc-create -n ol6cont1 -t oracle -- --release=6.latest
/usr/share/lxc/templates/lxc-oracle is /usr/share/lxc/templates/lxc-oracle
Note: Usually the template option is called with a configuration
file option too, mostly to configure the network.
For more information look at lxc.conf (5)

Host is OracleServer 6.4
Create configuration file /container/ol6cont1/config
Downloading release 6.latest for x86_64
Loaded plugins: refresh-packagekit, security
ol6_latest                                               | 1.4 kB     00:00     
ol6_latest/primary                                       |  31 MB     01:23     
ol6_latest                                                          21879/21879
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package chkconfig.x86_64 0:1.3.49.3-2.el6 will be installed
--> Processing Dependency: libc.so.6(GLIBC_2.4)(64bit) for package: chkconfig-1.3.49.3-2.el6.x86_64
--> Processing Dependency: libc.so.6(GLIBC_2.3.4)(64bit) for package: chkconfig-1.3.49.3-2.el6.x86_64
[...]
--> Processing Dependency: rpm-python for package: yum-3.2.29-40.0.1.el6.noarch
--> Running transaction check
---> Package audit-libs.x86_64 0:2.2-2.el6 will be installed
---> Package bash.x86_64 0:4.1.2-15.el6_4 will be installed
[...]
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package               Arch   Version                          Repository  Size
================================================================================
Installing:
 chkconfig             x86_64 1.3.49.3-2.el6                   ol6_latest 158 k
 dhclient              x86_64 12:4.1.1-34.P1.0.1.el6           ol6_latest 316 k
[...]
 yum                   noarch 3.2.29-40.0.1.el6                ol6_latest 995 k
Installing for dependencies:
 MAKEDEV               x86_64 3.24-6.el6                       ol6_latest  88 k
 audit-libs            x86_64 2.2-2.el6                        ol6_latest  60 k
 basesystem            noarch 10.0-4.0.1.el6                   ol6_latest 4.3 k
[...]
 yum-metadata-parser   x86_64 1.1.2-16.el6                     ol6_latest  26 k
 zlib                  x86_64 1.2.3-29.el6                     ol6_latest  72 k

Transaction Summary
================================================================================
Install     135 Package(s)

Total download size: 79 M
Installed size: 294 M
Downloading Packages:
(1/135): MAKEDEV-3.24-6.el6.x86_64.rpm                   |  88 kB     00:00     
(2/135): audit-libs-2.2-2.el6.x86_64.rpm                 |  60 kB     00:00     
[...]
(135/135): zlib-1.2.3-29.el6.x86_64.rpm                  |  72 kB     00:00     
--------------------------------------------------------------------------------
Total                                           271 kB/s |  79 MB     04:59     
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing : libgcc-4.4.7-3.el6.x86_64                                  1/135 
  Installing : setup-2.8.14-20.el6.noarch                                 2/135 
[...]
  Installing : rootfiles-8.1-6.1.el6.noarch                             135/135 
  Verifying  : gamin-0.1.10-9.el6.x86_64                                  1/135 
  Verifying  : procps-3.2.8-25.el6.x86_64                                 2/135 
[...]
  Verifying  : 1:findutils-4.4.2-6.el6.x86_64                           135/135 

Installed:
  chkconfig.x86_64 0:1.3.49.3-2.el6                                             
  dhclient.x86_64 12:4.1.1-34.P1.0.1.el6                                        
[...]
Dependency Installed:
  MAKEDEV.x86_64 0:3.24-6.el6                                                   
  audit-libs.x86_64 0:2.2-2.el6                                                 
[...]
  zlib.x86_64 0:1.2.3-29.el6                                                    

Complete!
Rebuilding rpm database
Configuring container for Oracle Linux 6.4
Added container user:oracle password:oracle
Added container user:root password:root
Container : /container/ol6cont1/rootfs
Config    : /container/ol6cont1/config
Network   : eth0 () on virbr0
'oracle' template installed
'ol6cont1' created

Das Script lädt hierbei die erforderlichen RPM-Pakete von Oracles "public-yum" Server herunter, um eine Minimalinstallation (ca. 400 MB) der aktuellsten Oracle Linux 6 Version zu erstellen. Die Verzeichnis-Struktur des Containers befindet sich unter /container/ol6cont1/rootfs und kann vom Host-System aus wie eine reguläre Verzeichnisstruktur eingesehen werden. Das Script legt weiterhin zwei Benutzerkonten "root" und "oracle" an und konfiguriert eine virtuelle Netzwerk-Schnittstelle, die ihre IP-Adresse per DHCP vom zu libvirt gehörenden DHCP-Server bezieht. Die von lxc-create generierte Container-Konfigurationsdatei befindet sich in /container/ol6cont1/config und kann mit einem herkömmlichen Text-Editor an die eigenen Bedürfnisse angepasst werden. Vorab empfiehlt es sich, vom frisch installierten Container einen Snapshot zu erzeugen, von dem sich bei Bedarf schnell weitere Container erzeugen lassen:

# lxc-clone -o ol6cont1 -n ol6cont2
Tweaking configuration
Copying rootfs...
Create a snapshot of '/container/ol6cont1/rootfs' in '/container/ol6cont2/rootfs'
Updating rootfs...
'ol6cont2' created
# lxc-ls -1
ol6cont1
ol6cont2

Gestartet wird der Container anschließend mit dem folgenden Kommando:

# lxc-start -n ol6cont1 -d -o /container/ol6cont1/ol6cont1.log
# lxc-info -n ol6cont1
state:   RUNNING
pid:       311
# lxc-info -n ol6cont2
state:   STOPPED
pid:        -1

Der Container wird nun im Hintergrund gestartet; eventuelle log-Meldungen werden in die Datei ol6cont.log umgeleitet. Wie der Ausgabe von lxc-info entommen werden kann, wurde nur der Container ol6cont1 gestartet, während ol6cont2 sich weiterhin im gestoppen Zustand befindet, bis er ebenfalls mit lxc-start hochgefahren wird.

Anschließend können Sie sich mit dem folgenden Kommando an der Konsole des Linux-Containers anmelden. Die Systemkonfiguration kann nun mit den üblichen Bordmitteln (z.B. yum/rpm zur Software-Installation) innerhalb des laufenden Containers angepasst werden.

#  lxc-console -n ol6cont1

Oracle Linux Server release 6.4
Kernel 2.6.39-400.109.4.el6uek.x86_64 on an x86_64

ol6cont1 login: root
Password: 
[root@ol6cont1 ~]# ps x
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:00 /sbin/init
  184 ?        Ss     0:00 /sbin/dhclient -H ol6cont1 -1 -q -lf /var/lib/dhclien
  207 ?        Sl     0:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
  249 ?        Ss     0:00 /usr/sbin/sshd
  256 lxc/console Ss+   0:00 /sbin/mingetty /dev/console
  260 ?        Ss     0:00 login -- root     
  262 lxc/tty2 Ss+    0:00 /sbin/mingetty /dev/tty2
  264 lxc/tty3 Ss+    0:00 /sbin/mingetty /dev/tty3
  266 lxc/tty4 Ss+    0:00 /sbin/mingetty /dev/tty4
  267 lxc/tty1 Ss     0:00 -bash
  278 lxc/tty1 R+     0:00 ps x
[root@ol6cont1 ~]# logout

Oracle Linux Server release 6.4
Kernel 2.6.39-400.109.4.el6uek.x86_64 on an x86_64

ol6cont1 login: CTRL-A Q
Die Tastensequenz CTRL-A, Q beendet die Konsolen-Sitzung. Alternativ ist es auch möglich, sich vom Host aus mittels SSH am Container-System anzumelden. Alle Container haben eine eigene IP-Adresse und sind standardmäßig über eine virtuelle Ethernet-Brücke virbr0 miteinander verbunden, die auch vom Host-System aus erreichbar ist. Auf diesem Weg lassen sich z.B. recht schnell einfache Client-Server-Architekturen innerhalb eines Host-Systems aufsetzen.

Ein laufender Container läßt sich jederzeit mit dem Kommando lxc-freeze im aktuellen Zustand "einfrieren". Die laufenden Prozesse werden hierbei angehalten und verbrauchen keine CPU-Ressourcen mehr, bis der Container mittels lxc-unfreeze wieder freigegeben wird. Da Linux-Container auf den Linux-Control Groups (CGroups) basieren, ist es weiterhin auch möglich, den Ressourcenverbrauch eines Containers zu limitieren.

Heruntergefahren werden kann ein Container auf verschiedene Weise: Entweder vom Host-System aus mittels lxc-stop, oder innerhalb des Containers mit den üblichen Kommandos wie shutdown -h oder poweroff. Nicht mehr benötigte Container lassen sich mit Hilfe des Kommandos lxc-destroy entfernen.

Dem Thema "Linux Container" wird im Oracle Linux Administrator's Solutions Guide ebenfalls ein eigenes Kapitel gewidmet. Dieses behandelt im Detail unter anderem das Erstellen, Konfigurieren und Starten von Linux-Containern, sowie dem Monitoring und Herunterfahren. Auch die Erstellung eines Container-Repositories auf einem Btrfs-Dateisystem und wie sich bestehende Container sehr schnell und platzsparend duplizieren (klonen) lassen wird dort ausführlich beschrieben.

Weitere Links zum Thema Linux Container:

About

Dieses Blog befasst sich mit Themen rund um Oracle Linux, Virtualisierung (primär mit Oracle VM) sowie Cloud Computing mit Oracle Produkten. Es wird betreut von Manuel Hoßfeld
- - - - - - - - - - - - - - - - - - - -
DISCLAIMER: Die Artikel und Kommentare in diesem Blog entsprechen den Meinungen der jeweiligen Autoren, und nicht notwendigerweise denen der Oracle Deutschland B.V. & Co. KG oder der Oracle Corporation.

Search

Archives
« August 2013
MoDiMiDoFrSaSo
   
1
2
3
4
6
7
8
9
10
11
12
13
14
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
       
Heute