Backup work.

This commit is contained in:
Maurice Makaay 2020-02-06 22:30:44 +00:00
parent 5e8cb0a2aa
commit 51bc75cf9e
1 changed files with 112 additions and 80 deletions

192
demo.md
View File

@ -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,107 +462,136 @@ 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.
sidn-demo-01# vi /tmp/config ```text
sidn-demo-01# vi /tmp/config
version: 1
config: version: 1
- type: physical config:
name: if-demo - type: physical
subnets: name: if-demo
- type: static subnets:
address: 192.168.56.160 - type: static
netmask: 255.255.255.0 address: 192.168.56.160
gateway: 192.168.56.1 netmask: 255.255.255.0
dns_nameservers: [192.168.56.1] # zodat dezelfde resolving als de KVM host wordt gebruikt gateway: 192.168.56.1
dns_nameservers: [192.168.56.1]
```
Bouw de container op en start hem: Bouw de container op en start hem:
sidn-demo-01# H=ansible
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 set $H volatile.if-demo.hwaddr 00:16:3e:00:00:a0 # mainly for VirtualBox
sidn-demo-01# lxc config set $H user.network-config - < /tmp/config
sidn-demo-01# lxc config show $H
sidn-demo-01# lxc start $H
sidn-demo-01# lxc exec $H bash
ansible# apt update && apt upgrade -y && apt autoclean -y && apt autoremove -y
Noot:
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
de profielen vanuit Ansible opzetten en het benodigde profiel daarom niet
noodzakelijkerwijs al bestaat op de LXD host.
Op de container is nu te zien dat het layer 2 netwerk bereikbaar is ```text
vanuit de container: sidn-demo-01# H=ansible
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 set $H volatile.if-demo.hwaddr 00:16:3e:00:00:a0
sidn-demo-01# lxc config set $H user.network-config - < /tmp/config
ansible# ip a (laat zien dat er nu een if-demo interface bestaat) sidn-demo-01# lxc config show $H
ansible# ping 192.168.56.150 (een ping naar de eigen LXD host) sidn-demo-01# lxc start $H
ansible# ping 192.168.56.151 (een ping naar de andere LXD host) sidn-demo-01# lxc exec $H bash
ansible# apt update && apt upgrade -y && apt autoclean -y && apt autoremove -y
```
Opmerkingen:
* 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
de profielen vanuit Ansible opzetten en het benodigde profiel daarom niet
noodzakelijkerwijs al bestaat op de LXD host.
* Er wordt een hard MAC-adres gezet. Dat is vooral nodig als je gebruik maakt
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.
Connectie Ansible -> managed hosts 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# 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)
```
#### 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.
Om de zaken te versnellen, gebruiken we daarom inmiddels een hybride setup:
* Management van de LXD hosts wordt volledig met SSH gedaan vanuit
de Ansible container (dit is de standaard methode voor Ansible).
- Het bootstrappen van nieuwe containers wordt gedaan door met SSH * Het bootstrappen van nieuwe containers en het configureren van het
naar een LXD host te gaan (delegate), en vervolgens worden van netwerk van containers worden gedaan door met SSH naar een LXD host
daaruit (met de hierboven geconfigureerde remotes) met lxc te gaan (middels Ansible delegate). Vervolgens worden van daaruit met
connecties de containers opgetrokken en geconfigureerd tot het lxc commando's (met name `lxc exec` en `lxc file`) de containers
niveau dat de Ansible container er met SSH bij kan. opgetrokken en geconfigureerd tot het niveau dat de Ansible container
er met SSH bij kan.
- Het verder configureren van containers wordt volledig met SSH * Het verder configureren van containers wordt volledig met de standaard
gedaan, direct vanuit de Ansible container. 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.
ansible# ssh-keygen -b 2048 -N '' -f /root/.ssh/id_rsa ```text
ansible# ssh-keygen -b 2048 -N '' -f /root/.ssh/id_rsa
sidn-demo-0X# mkdir -p /root/.ssh
sidn-demo-0X# chmod 700 /root/.ssh sidn-demo-0X# mkdir -p /root/.ssh
sidn-demo-0X# touch /root/.ssh/authorized_keys sidn-demo-0X# chmod 700 /root/.ssh
sidn-demo-0X# chmod 600 /root/.ssh/authorized_keys sidn-demo-0X# touch /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# 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
```
Hierna moet het volgende werken: Hierna moet het volgende werken:
ansible# ssh 192.168.56.150 touch .hushlogin ```bash
ansible# ssh 192.168.56.151 touch .hushlogin ansible# ssh 192.168.56.150 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