2015-05-08 19 views
5

Ich habe eine Umgebung mit mehreren Linux-Hosts basierend auf KVM erstellt. Ich benutze Virt-Manager, um verschiedene VMs zu erstellen, und ich verwende Linux-Bridges, um Konnektivität zwischen VMs in verschiedenen Hosts zu erstellen.Kann ich eine Cloud-Init-Umgebung ohne Open Stack oder EC2 ausführen?

Jetzt hätte ich gerne einen Autokonfigurationsserver, damit meine VMs ihren Namen, ihre IP-Adresse, ihre Skripts usw. automatisch konfigurieren können, basierend auf einer eindeutigen ID, die jeder von ihnen hat. Ist es möglich, eine Art Cloud-Init-Setup in einer Nicht-Openstack-Umgebung zu replizieren?

Ich habe versucht, Cloud-Init die Datenquelle NoCloud in der folgenden Weise. Zuerst habe ich installiert cloud-init in der VM und konfiguriert cloud.cfg:

datasource: 
    NoCloud 
datasource_list: [ NoCloud ] 
disable_ec2_metadata: True 

Dann habe ich eine Benutzer-Datendatei und Meta-Datendatei mit folgendem Inhalt erstellt:

benutzer- Daten:

#cloud-config 
hostname: prueba 
password: passw0rd 
chpasswd: { expire: False } 
ssh_pwauth: True 

Meta-Daten:

instance-id: iid-local01 
local-hostname: prueba 

Dann habe ich eine ISO-Datei erzeugt:

genisoimage -output seed.iso -volid cidata -joliet -rock user-data meta-data 

Schließlich habe ich die Festplatte an die VM angeschlossen und gestartet. Dies ist der relevante Teil des XML:

<disk type='file' device='disk'> 
    <driver name='qemu' type='raw'/> 
    <source file='/opt/images/seed.iso'/> 
    <backingStore/> 
    <target dev='vdb' bus='virtio'/> 
    <alias name='virtio-disk1'/> 
    <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/> 
</disk> 

Wenn die VM beginnt, heißt es:

2015-05-12 12:12:40,394 - util.py[WARNING]: Getting data from <class 'cloudinit.sources.DataSourceNoCloud.DataSourceNoCloudNet'> failed 
* Stopping Read required files in advance (for other mountpoints)       [ OK ] 
* Stopping Read required files in advance (for other mountpoints)       [ OK ] 
* Stopping Read required files in advance (for other mountpoints)       [ OK ] 
2015-05-12 12:12:48,808 - url_helper.py[WARNING]: Calling 'http://169.254.169.254/2009-04-04/meta-data/instance-id' failed [3/120s]: request error [HTTPConnectionPool(host='169.254.169.254', port=80): Max retries exceeded with url: /2009-04-04/meta-data/instance-id (Caused by <class 'socket.error'>: [Errno 113] No route to host)] 

Vorschläge, wie es funktioniert?

+0

Datenquellen in /etc/cloud/cloud.cfg funktionierte nicht richtig für mich. Ich habe 'dpkg-reconfigure cloud-init' ausgeführt und die NoCloud-Datenquelle angegeben. Das Verfahren, das Bild mit den Benutzer-Daten und Meta-Daten zur Erzeugung war auch etwas anders: Trunkat --size 2M init.img mkfs.vfat -n cidata init.img mcopy -oi init1.img Metadaten für Benutzerdaten :: – garciadeblas

+0

Ich habe eine neue Platte eingefügt und das Ergebnis im XML libvirt Domänen-Deskriptor der VM war wie folgt: garciadeblas

+0

Mit der oberen Konfig, kann ich einige Cloud-Config-Befehle funktionieren ordnungsgemäß (Einstellung von Passwort und Hostname), während andere wie runcmd oder write_files arbeite noch nicht – garciadeblas

Antwort

2

Ist es möglich, eine Art Cloud-Init-Setup in einer Nicht-Openstack-Umgebung zu replizieren?

Sicher.

Cloud-init benötigt keinen Netzwerkmetadaten-Dienst (wie von EC2 und OpenStack bereitgestellt), um zu funktionieren. Es liest gerne Konfigurationsinformationen von einem lokalen CD-ROM-Gerät; siehe zum Beispiel den Abschnitt "Loggen Sie sich in Ihre Atommaschine ein" von this document, der beschrieben hat, wie man das notwendige Dateisystem erstellt.

Dies ist in der cloud-init-Dokumentation here dokumentiert.

+0

Danke für Ihren Vorschlag. Ich habe versucht, die Schritte zu folgen. Ich habe meine Frage bearbeitet, um alle Schritte einzuschließen, aber ich kann es nicht funktionieren lassen. – garciadeblas

+0

Aus den Dokumenten ist die Konfiguration in der virtuellen Maschine nicht eindeutig. Wie sollte ich cloud-init in der VM konfigurieren? – garciadeblas

+0

Ich verstehe deine Frage nicht. Aus Ihrer Antwort am 14.05. Klingt es so, als könnten Sie Dinge zum Laufen bringen. An dieser Stelle möchten Sie vielleicht eine neue Frage öffnen ... – larsks