Backup work.
This commit is contained in:
parent
5e8cb0a2aa
commit
51bc75cf9e
118
demo.md
118
demo.md
|
@ -1,3 +1,12 @@
|
||||||
|
# Inhoud van de demo
|
||||||
|
* Mini-omschrijving XS4ALL voice platform
|
||||||
|
* Waarom LXD?
|
||||||
|
* Installatie VM's voor de demo
|
||||||
|
* Netwerktopologie
|
||||||
|
* LXD clustering
|
||||||
|
* De Ansible container
|
||||||
|
|
||||||
|
|
||||||
# Mini-omschrijving XS4ALL voice platform
|
# Mini-omschrijving XS4ALL voice platform
|
||||||
|
|
||||||
* een aantal hardware LXD hosts, met tig geheugen en tig CPU
|
* een aantal hardware LXD hosts, met tig geheugen en tig CPU
|
||||||
|
@ -48,13 +57,6 @@ Jammer? Nee! Met LXD en Ansible hebben we een mooi evenwicht bereikt tussen de
|
||||||
bekende cattle en pets analogie. Het voice platform heeft diverse pets in zich,
|
bekende cattle en pets analogie. Het voice platform heeft diverse pets in zich,
|
||||||
maar die kunnen zonder blikken of blozen naar de slachtbank.
|
maar die kunnen zonder blikken of blozen naar de slachtbank.
|
||||||
|
|
||||||
# Inhoud van de demo
|
|
||||||
* Twee VM's in KVM, die dienst doen als LXD host
|
|
||||||
* Netwerktopologie
|
|
||||||
* LXD clustering
|
|
||||||
* Inrichten van een Ansible container
|
|
||||||
*
|
|
||||||
|
|
||||||
# Installatie VM's voor de demo
|
# Installatie VM's voor de demo
|
||||||
* 2 VM's: sidn-demo-01, sidn-demo-02
|
* 2 VM's: sidn-demo-01, sidn-demo-02
|
||||||
* virtual machine met NAT netwerk: 192.168.56.0/24, gateway/DNS 192.168.56.1
|
* virtual machine met NAT netwerk: 192.168.56.0/24, gateway/DNS 192.168.56.1
|
||||||
|
@ -387,6 +389,7 @@ gepusht met de cloud-init configuratie. En zelfs de netwerkconfguratie slechts
|
||||||
deels, omdat deze met de cloud-init van Ubuntu 14.04 nog niet mogelijk was.
|
deels, omdat deze met de cloud-init van Ubuntu 14.04 nog niet mogelijk was.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# LXD clustering
|
# LXD clustering
|
||||||
Of beter gezegd: __geen__ LXD clustering.
|
Of beter gezegd: __geen__ LXD clustering.
|
||||||
|
|
||||||
|
@ -459,14 +462,15 @@ die container.
|
||||||
|
|
||||||
|
|
||||||
# De Ansible container
|
# De Ansible container
|
||||||
|
|
||||||
De Ansible management host is een container op het voice platform zelf. Vanwege de
|
De Ansible management host is een container op het voice platform zelf. Vanwege de
|
||||||
kip/ei problematiek en het feit dat deze container niet steeds opnieuw gebouwd
|
kip/ei problematiek en het feit dat deze container toch niet steeds opnieuw gebouwd
|
||||||
gaat worden, bootstrappen we deze container met de hand.
|
gaat worden, bootstrappen we deze container met de hand. Hier kan natuurlijk ook een
|
||||||
|
playbook van worden gemaakt, maar vooralsnog is het minder werk om het zo te doen.
|
||||||
|
|
||||||
De handigste manier voor de netwerkconfiguratie van deze container is gebruik
|
De handigste manier voor het leveren van de netwerkconfiguratie van deze container,
|
||||||
maken van een user.network-config.
|
is gebruikmaken van een `user.network-config` in de container configuratie.
|
||||||
|
|
||||||
|
```text
|
||||||
sidn-demo-01# vi /tmp/config
|
sidn-demo-01# vi /tmp/config
|
||||||
|
|
||||||
version: 1
|
version: 1
|
||||||
|
@ -478,14 +482,16 @@ maken van een user.network-config.
|
||||||
address: 192.168.56.160
|
address: 192.168.56.160
|
||||||
netmask: 255.255.255.0
|
netmask: 255.255.255.0
|
||||||
gateway: 192.168.56.1
|
gateway: 192.168.56.1
|
||||||
dns_nameservers: [192.168.56.1] # zodat dezelfde resolving als de KVM host wordt gebruikt
|
dns_nameservers: [192.168.56.1]
|
||||||
|
```
|
||||||
|
|
||||||
Bouw de container op en start hem:
|
Bouw de container op en start hem:
|
||||||
|
|
||||||
|
```text
|
||||||
sidn-demo-01# H=ansible
|
sidn-demo-01# H=ansible
|
||||||
sidn-demo-01# lxc init --storage default --no-profiles ubuntu:18.04 $H
|
sidn-demo-01# lxc init --storage default --no-profiles ubuntu:18.04 $H
|
||||||
sidn-demo-01# lxc config device add $H if-demo nic name=if-demo nictype=bridged parent=br-demo
|
sidn-demo-01# lxc config device add $H if-demo nic name=if-demo nictype=bridged parent=br-demo
|
||||||
sidn-demo-01# lxc config set $H volatile.if-demo.hwaddr 00:16:3e:00:00:a0 # mainly for VirtualBox
|
sidn-demo-01# lxc config set $H volatile.if-demo.hwaddr 00:16:3e:00:00:a0
|
||||||
sidn-demo-01# lxc config set $H user.network-config - < /tmp/config
|
sidn-demo-01# lxc config set $H user.network-config - < /tmp/config
|
||||||
|
|
||||||
sidn-demo-01# lxc config show $H
|
sidn-demo-01# lxc config show $H
|
||||||
|
@ -493,57 +499,82 @@ Bouw de container op en start hem:
|
||||||
sidn-demo-01# lxc exec $H bash
|
sidn-demo-01# lxc exec $H bash
|
||||||
|
|
||||||
ansible# apt update && apt upgrade -y && apt autoclean -y && apt autoremove -y
|
ansible# apt update && apt upgrade -y && apt autoclean -y && apt autoremove -y
|
||||||
|
```
|
||||||
|
|
||||||
Noot:
|
Opmerkingen:
|
||||||
Voor deze setup zou ook het eerder aangemaakte "demo" profiel gebruikt kunnen
|
|
||||||
|
* Voor deze setup zou ook het eerder aangemaakte "demo" profiel gebruikt kunnen
|
||||||
worden. Echter, op het voice platform doen we het op deze manier, omdat we
|
worden. Echter, op het voice platform doen we het op deze manier, omdat we
|
||||||
de profielen vanuit Ansible opzetten en het benodigde profiel daarom niet
|
de profielen vanuit Ansible opzetten en het benodigde profiel daarom niet
|
||||||
noodzakelijkerwijs al bestaat op de LXD host.
|
noodzakelijkerwijs al bestaat op de LXD host.
|
||||||
|
|
||||||
Op de container is nu te zien dat het layer 2 netwerk bereikbaar is
|
* Er wordt een hard MAC-adres gezet. Dat is vooral nodig als je gebruik maakt
|
||||||
vanuit de container:
|
van VirtualBox voor het maken van de VM's. De bridge in VirtualBox kan
|
||||||
|
problemen geven wanneer je eenzelfde host met hetzelfde IP-adres maar een
|
||||||
|
nieuw MAC-adres opnieuw optrekt. In andere omgeving zou dat MAC-adres
|
||||||
|
ook weggelaten kunnen worden.
|
||||||
|
|
||||||
|
|
||||||
|
Op de container is nu te zien dat het layer 2 netwerk via de netwerk bridge
|
||||||
|
ontsloten is vanuit de container:
|
||||||
|
|
||||||
|
```
|
||||||
ansible# ip a (laat zien dat er nu een if-demo interface bestaat)
|
ansible# ip a (laat zien dat er nu een if-demo interface bestaat)
|
||||||
ansible# ping 192.168.56.150 (een ping naar de eigen LXD host)
|
ansible# ping 192.168.56.150 (een ping naar de eigen LXD host)
|
||||||
ansible# ping 192.168.56.151 (een ping naar de andere LXD host)
|
ansible# ping 192.168.56.151 (een ping naar de andere LXD host)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Connectie Ansible -> managed hosts
|
||||||
Connectie Ansible -> managed hosts
|
|
||||||
==================================
|
|
||||||
|
|
||||||
Even een uitstapje naar de manier waarop we vanuit Ansible verbinding
|
Even een uitstapje naar de manier waarop we vanuit Ansible verbinding
|
||||||
gaan maken naar de LXD hosts en de LXD containers, voor het uitvoeren
|
gaan maken naar de LXD hosts en de LXD containers, voor het uitvoeren
|
||||||
van de nodige commando's.
|
van de nodige commando's.
|
||||||
|
|
||||||
|
__Cool, lxc support binnen Ansible!__
|
||||||
|
|
||||||
In Ansible zit support voor het gebruik van lxc in plaats van ssh voor
|
In Ansible zit support voor het gebruik van lxc in plaats van ssh voor
|
||||||
het verbinden met de te configureren hosts. Aanvankelijk zijn we daar
|
het verbinden met de te configureren hosts. Aanvankelijk zijn we daar
|
||||||
100% voor gegaan, maar helaas bleek dat dit een behoorlijke impact op
|
100% voor gegaan, door op de Ansible host alle LXD hosts als remotes
|
||||||
de snelheid heeft. Met een SSH koppeling, kan de SSH verbinding open
|
toe te voegen en Ansible voor elk uit te voeren commando o een container
|
||||||
worden gehouden en kunnen commando's in rap tempo's naar een host worden
|
lxc te laten gebruken.
|
||||||
gestuurd. De lxc connector _doet dit helemaal niet_. Voor elk commando
|
|
||||||
wordt een nieuwe connectie opgezet.
|
|
||||||
|
|
||||||
Om de zaken te versnellen, gebruiken we nu een hybride setup:
|
__meh__
|
||||||
|
|
||||||
- Management van de LXD hosts wordt volledig met SSH gedaan vanuit
|
Helaas bleek dat dit een behoorlijke impact op de snelheid had. Met een
|
||||||
de Ansible container.
|
SSH koppeling, kan de SSH verbinding open worden gehouden en kunnen
|
||||||
|
commando's in rap tempo's naar een host worden gestuurd. De lxc connector
|
||||||
|
_doet dit helemaal niet_. Voor elk commando wordt een nieuwe connectie opgezet.
|
||||||
|
|
||||||
- Het bootstrappen van nieuwe containers wordt gedaan door met SSH
|
Om de zaken te versnellen, gebruiken we daarom inmiddels een hybride setup:
|
||||||
naar een LXD host te gaan (delegate), en vervolgens worden van
|
|
||||||
daaruit (met de hierboven geconfigureerde remotes) met lxc
|
|
||||||
connecties de containers opgetrokken en geconfigureerd tot het
|
|
||||||
niveau dat de Ansible container er met SSH bij kan.
|
|
||||||
|
|
||||||
- Het verder configureren van containers wordt volledig met SSH
|
* Management van de LXD hosts wordt volledig met SSH gedaan vanuit
|
||||||
gedaan, direct vanuit de Ansible container.
|
de Ansible container (dit is de standaard methode voor Ansible).
|
||||||
|
|
||||||
|
* Het bootstrappen van nieuwe containers en het configureren van het
|
||||||
|
netwerk van containers worden gedaan door met SSH naar een LXD host
|
||||||
|
te gaan (middels Ansible delegate). Vervolgens worden van daaruit met
|
||||||
|
lxc commando's (met name `lxc exec` en `lxc file`) de containers
|
||||||
|
opgetrokken en geconfigureerd tot het niveau dat de Ansible container
|
||||||
|
er met SSH bij kan.
|
||||||
|
|
||||||
|
* Het verder configureren van containers wordt volledig met de standaard
|
||||||
|
SSH methode gedaan, direct vanuit de Ansible container.
|
||||||
|
|
||||||
|
Het mooie aan deze opzet, is dat we:
|
||||||
|
|
||||||
|
* Containers uit het niet automatisch kunnen bootstrappen.
|
||||||
|
* Kapotte netwerkconfiguratie ook altijd weer kunnen repareren, omdat
|
||||||
|
de `lxc` commando's geen containernetwerk nodig hebben.
|
||||||
|
* Missende SSH keys voor Ansible toegang kunnen plaatsen.
|
||||||
|
* Voor de bulk van de configuratie commando's snel via SSH kunnen versturen.
|
||||||
|
|
||||||
|
|
||||||
Ansible SSH toegang Ansible -> LXD hosts
|
#### Ansible SSH toegang Ansible -> LXD hosts
|
||||||
============================================
|
|
||||||
|
|
||||||
Om de LXD hosts te kunnen beheren met SSH, is het nodig dat er een SSH key
|
Om de LXD hosts te kunnen beheren met SSH, is het nodig dat er een SSH key
|
||||||
wordt gegenereerd en dat deze naar de hosts wordt gekopieerd.
|
wordt gegenereerd en dat deze naar de LXD hosts wordt gekopieerd.
|
||||||
|
|
||||||
|
```text
|
||||||
ansible# ssh-keygen -b 2048 -N '' -f /root/.ssh/id_rsa
|
ansible# ssh-keygen -b 2048 -N '' -f /root/.ssh/id_rsa
|
||||||
|
|
||||||
sidn-demo-0X# mkdir -p /root/.ssh
|
sidn-demo-0X# mkdir -p /root/.ssh
|
||||||
|
@ -551,15 +582,16 @@ wordt gegenereerd en dat deze naar de hosts wordt gekopieerd.
|
||||||
sidn-demo-0X# touch /root/.ssh/authorized_keys
|
sidn-demo-0X# touch /root/.ssh/authorized_keys
|
||||||
sidn-demo-0X# chmod 600 /root/.ssh/authorized_keys
|
sidn-demo-0X# chmod 600 /root/.ssh/authorized_keys
|
||||||
sidn-demo-0X# lxc exec sidn-demo-01:ansible cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
|
sidn-demo-0X# lxc exec sidn-demo-01:ansible cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
|
||||||
|
```
|
||||||
|
|
||||||
Hierna moet het volgende werken:
|
Hierna moet het volgende werken:
|
||||||
|
|
||||||
|
```bash
|
||||||
ansible# ssh 192.168.56.150 touch .hushlogin
|
ansible# ssh 192.168.56.150 touch .hushlogin
|
||||||
ansible# ssh 192.168.56.151 touch .hushlogin
|
ansible# ssh 192.168.56.151 touch .hushlogin
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Installatie van de Ansible software
|
||||||
Installatie van de Ansible software
|
|
||||||
===================================
|
|
||||||
|
|
||||||
De basis infrastructuur staat. Nu kan de benodigde software op de
|
De basis infrastructuur staat. Nu kan de benodigde software op de
|
||||||
Ansible host worden geïnstalleerd.
|
Ansible host worden geïnstalleerd.
|
||||||
|
@ -568,7 +600,7 @@ Op het voiceplatform wordt overal gebruik gemaakt van Python3 voor Ansible.
|
||||||
ansible# apt install -y python3 python3-pip
|
ansible# apt install -y python3 python3-pip
|
||||||
ansible# pip3 install ansible
|
ansible# pip3 install ansible
|
||||||
|
|
||||||
The Ansible configuration is managed in a git repository. Go get!
|
De Ansible configuratie staat in een git repository. Go get!
|
||||||
|
|
||||||
ansible# apt install -y git
|
ansible# apt install -y git
|
||||||
ansible# REPO=https://git.makaay.nl/mauricem/sidn-lxd-ansible-demo.git
|
ansible# REPO=https://git.makaay.nl/mauricem/sidn-lxd-ansible-demo.git
|
||||||
|
|
Loading…
Reference in New Issue