Deze maand hebben we een zeer spannende samenwerking met Canonical, de makers van Ubuntu. Bovenal is het belangrijkste element in deze samenwerking de introductie van volledige CloudInit-ondersteuning tussen de CloudSigma-cloud en Ubuntu.
Een introductie tot CloudInit
Als je’re niet bekend bent met CloudInit, is het de industriestandaard voor het bootstrappen van cloudservers. Ter verduidelijking: als je een eenvoudige DSL gebruikt, is het mogelijk om eenvoudig taken uit te voeren bij de eerste opstart. Het is ook de moeite waard om te vermelden dat CloudInit niet beperkt is tot Ubuntu. Tegenwoordig vind je CloudInit-ondersteuning in de meeste moderne Linux-distributies (maar de ondersteunde clouds variëren).
Voordat we aan de slag gaan met CloudInit, is het belangrijk om te begrijpen waar CloudInit past in het provisioning-ecosysteem. Hoewel het mogelijk is om CloudInit als een zelfstandig provisioning-systeem uit te voeren, is het veel gebruikelijker om het te gebruiken in combinatie met een ander provisioning-systeem, zoals Ansible, Chef, Puppet of Salt. In dat geval gebruik je CloudInit simpelweg om je nieuwe server in een staat te brengen waarin het provisioning-systeem het kan overnemen. Persoonlijk gebruik ik CloudInit vaak in combinatie met Ansible.
CloudInit gebruiken op CloudSigma
Het gebruik van CloudInit op CloudSigma is zeer eenvoudig.
Om CloudInit op een Ubuntu 14.04-server te gebruiken, voer je de volgende stappen uit:
-
- Kloon de schijf “Ubuntu 14.04 Cloud Image” uit de marketplace (momenteel de enige volledig ondersteunde schijf met CloudInit). Zorg ervoor dat je de grootte van de gekloonde schijf aanpast naar de gewenste grootte, waarna het bestandssysteem automatisch wordt uitgebreid bij de eerste opstart.
- Maak een nieuwe server aan.
- Zodra de server is aangemaakt, zie je een CloudInit-knop onder de serverstatus.

-
- Wanneer je op deze knop klikt, verschijnt het volgende dialoogvenster.

- Plak hier eenvoudig je CloudInit-gegevens en druk op ‘Activeren’.
- Je kunt je server starten en het script zal worden uitgevoerd bij de eerste opstart.
SSH-sleutel(s) installeren met CloudInit
Nu je weet hoe je CloudInit op onze cloud moet gebruiken, laten we deze nieuwverworven kennis in de praktijk brengen door deze te gebruiken om twee SSH-sleutels te installeren. De twee fictieve openbare SSH-sleutels die we zullen gebruiken zijn ‘ssh-rsa AAA[…] user1@host‘ en ‘ssh-rsa AAA[…] user2@host‘. (Voor meer informatie over het genereren van SSH-sleutels, neem een kijkje op deze pagina op Github.)
Op Ubuntu Cloud Images is de standaard gebruikersnaam ‘ubuntu’. Daarom worden de sleutels in dat gebruikersaccount geïnstalleerd.
De CloudInit-configuratie hiervoor zou er als volgt uitzien:
[ruby]
#cloud-config
ssh_authorized_keys:
- ssh-rsa AAA[...] user1@host
- ssh-rsa AAA[...] user2@host
[/ruby]
Let op dat spaties belangrijk zijn. Er staan twee spaties voor de ‘-‘. Als je er maar één plaatst, wordt deze mogelijk niet door de server gelezen.
Zodra je de CloudInit-configuratie hebt opgeslagen en de server hebt opgestart, zou je via SSH verbinding moeten kunnen maken met de server met de gebruiker ‘ubuntu’:
[bash light="true"]
$ ssh ubuntu@aaa.bbb.ccc.ddd
Welcome to Ubuntu 14.04.1 LTS (GNU/Linux 3.13.0-36-generic x86_64)
* Documentation: https://help.ubuntu.com/
System information as of Sun Oct 19 21:51:54 UTC 2014
System load: 0.0 Users logged in: 0
Usage of /: 77.4% of 39.34GB IP address for eth0: aaa.bbb.ccc.ddd
Memory usage: 26%
Swap usage: 0%
Processes: 113
Graph this data and manage this system at:
https://landscape.canonical.com/
Get cloud support with Ubuntu Advantage Cloud Guest:
http://www.ubuntu.com/business/services/cloud
0 packages can be updated.
0 updates are security updates.
[...]
ubuntu@myserver:~$
[/bash]
Systeemupdates installeren met CloudInit
Een ander zeer nuttig ding dat je eenvoudig kunt bereiken met CloudInit is het uitvoeren van systeemupdates bij de eerste opstart. Hoewel we onze schijfkopieën regelmatig vernieuwen, is het nog steeds een goed idee om extra voorzorgsmaatregelen te nemen om ervoor te zorgen dat je systemen up-to-date zijn.
Voeg het volgende toe om systeemupdates te installeren bij de eerste opstart:
[ruby]
#cloud-config
apt_update: true
apt_upgrade: true
[/ruby]
Je zult misschien ook merken dat er een vergelijkbare optie is genaamd ‘package_update,’ wat een distributieneutraal alias is voor ‘apt_update’ op Ubuntu.
Ook wordt ‘apt_update’ standaard op true ingesteld als ‘packages’ (hieronder) is ingesteld, maar ik heb het hierboven toegevoegd om het explicieter te maken.
Pakketten installeren met CloudInit
Een fundamenteel onderdeel voor het bootstrappen van systemen is het kunnen installeren van pakketten tijdens het opstarten. Gelukkig maakt CloudInit dit ook eenvoudig. Het enige wat we hoeven te doen is een lijst met de pakketten die we willen installeren op te geven onder ‘packages.’ Als we bijvoorbeeld ‘python-pip,’ ‘fail2ban’ en ‘vim’ willen installeren, ziet dat er als volgt uit:
[ruby]
#cloud-config
packages:
- python-pip
- fail2ban
- vim
[/ruby]
Let op, nogmaals dat spaties belangrijk zijn. Er staan twee spaties voor de ‘-‘.
De hostnaam instellen met CloudInit
Wanneer je een nieuwe server provisiont, wil je wellicht ook de hostnaam ervoor instellen.
[ruby]
#cloud-config
hostname: mynode
fqdn: mynode.example.com
manage_etc_hosts: true
[/ruby]
Opdrachten uitvoeren bij de eerste start met CloudInit
Als we ervan uitgaan dat je iets geavanceerders doet met je servers, is de kans groot dat je een opdracht hebt die je bij de eerste start moet uitvoeren.
Dit is waar ‘runcmd’ en ‘bootcmd’ om de hoek komen kijken. Beide stellen je in staat om opdrachten uit te voeren bij de eerste start. Het verschil is dat ‘bootcmd’ eerder in het opstartproces wordt uitgevoerd dan ‘runcmd.’
Om een van deze opdrachten te gebruiken, voeg je het volgende toe aan je CloudInit:
[ruby]
#cloud-config
runcmd:
- ls -l /root
- [wget, "https://news.ycombinator.com", -O, /tmp/index.html]
[/ruby]
CloudInit gebruiken met een configuratiemanager
Tot slot, als je een meer geavanceerde cloudgebruiker bent, gebruik je waarschijnlijk een configuratiemanager. Gelukkig is CloudInit hierop voorbereid. Het is echter een vrij complex onderwerp om te behandelen, gezien de vele variabelen.
Hier zijn dus enkele voorbeelden die je in de juiste richting zouden moeten wijzen:
Hoe je meerdere elementen aan elkaar koppelt
Voor degenen die niet bekend zijn met bestanden in YAML-stijl, is het misschien niet meteen duidelijk hoe je meerdere CloudInit-elementen aan elkaar koppelt. Het is echter heel eenvoudig. Op de eerste regel heb je nodig: ‘#cloud-config‘. Daarna voeg je gewoon je configuratie toe.
Als we bijvoorbeeld alle bovenstaande voorbeelden combineren in één configuratie, ziet dat er als volgt uit:
[ruby]
#cloud-config
ssh_authorized_keys:
- ssh-rsa AAA[...] user1@host
- ssh-rsa AAA[...] user2@host
hostname: mynode
fqdn: mynode.example.com
manage_etc_hosts: true
apt_update: true
apt_upgrade: true
packages:
- python-pip
- fail2ban
- vim
runcmd:
- ls -l /root
- [wget, "https://news.ycombinator.com", -O, /tmp/index.html]
[/ruby]
Aanvullende bronnen
We hebben in dit artikel echt nog maar het topje van de ijsberg gezien van wat CloudInit kan doen. Er zijn nog tal van andere dingen die je kunt leren, zoals het aanmaken van gebruikers en groepen, het wegschrijven van bestanden naar de schijf en het aanroepen van URL's wanneer voltooid (om andere systemen op de hoogte te stellen).
Als je meer wilt weten over CloudInit, raad ik de volgende bronnen aan:
- Officiële CloudInit-documentatie
- Ubuntu's CloudInit-handleiding
- RedHat's CloudInit-documentatie
- Ubuntu's CloudInit-voorbeeldbibliotheek
Reacties
Nog geen reacties. Wees de eerste.