Backup work.
This commit is contained in:
parent
5e8cb0a2aa
commit
51bc75cf9e
192
demo.md
192
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
|
||||
|
||||
* 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,
|
||||
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
|
||||
* 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
|
||||
|
@ -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.
|
||||
|
||||
|
||||
|
||||
# LXD clustering
|
||||
Of beter gezegd: __geen__ LXD clustering.
|
||||
|
||||
|
@ -459,107 +462,136 @@ die container.
|
|||
|
||||
|
||||
# De Ansible container
|
||||
|
||||
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
|
||||
gaat worden, bootstrappen we deze container met de hand.
|
||||
kip/ei problematiek en het feit dat deze container toch niet steeds opnieuw gebouwd
|
||||
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
|
||||
maken van een user.network-config.
|
||||
De handigste manier voor het leveren van de netwerkconfiguratie van deze container,
|
||||
is gebruikmaken van een `user.network-config` in de container configuratie.
|
||||
|
||||
sidn-demo-01# vi /tmp/config
|
||||
|
||||
version: 1
|
||||
config:
|
||||
- type: physical
|
||||
name: if-demo
|
||||
subnets:
|
||||
- type: static
|
||||
address: 192.168.56.160
|
||||
netmask: 255.255.255.0
|
||||
gateway: 192.168.56.1
|
||||
dns_nameservers: [192.168.56.1] # zodat dezelfde resolving als de KVM host wordt gebruikt
|
||||
```text
|
||||
sidn-demo-01# vi /tmp/config
|
||||
|
||||
version: 1
|
||||
config:
|
||||
- type: physical
|
||||
name: if-demo
|
||||
subnets:
|
||||
- type: static
|
||||
address: 192.168.56.160
|
||||
netmask: 255.255.255.0
|
||||
gateway: 192.168.56.1
|
||||
dns_nameservers: [192.168.56.1]
|
||||
```
|
||||
|
||||
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
|
||||
vanuit de container:
|
||||
```text
|
||||
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)
|
||||
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)
|
||||
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
|
||||
```
|
||||
|
||||
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
|
||||
gaan maken naar de LXD hosts en de LXD containers, voor het uitvoeren
|
||||
van de nodige commando's.
|
||||
|
||||
__Cool, lxc support binnen Ansible!__
|
||||
|
||||
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
|
||||
100% voor gegaan, maar helaas bleek dat dit een behoorlijke impact op
|
||||
de snelheid heeft. Met een 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.
|
||||
100% voor gegaan, door op de Ansible host alle LXD hosts als remotes
|
||||
toe te voegen en Ansible voor elk uit te voeren commando o een container
|
||||
lxc te laten gebruken.
|
||||
|
||||
Om de zaken te versnellen, gebruiken we nu een hybride setup:
|
||||
__meh__
|
||||
|
||||
- Management van de LXD hosts wordt volledig met SSH gedaan vanuit
|
||||
de Ansible container.
|
||||
Helaas bleek dat dit een behoorlijke impact op de snelheid had. Met een
|
||||
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
|
||||
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 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 SSH
|
||||
gedaan, direct vanuit de Ansible container.
|
||||
* 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
|
||||
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
|
||||
|
||||
sidn-demo-0X# mkdir -p /root/.ssh
|
||||
sidn-demo-0X# chmod 700 /root/.ssh
|
||||
sidn-demo-0X# touch /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
|
||||
```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# touch /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:
|
||||
|
||||
ansible# ssh 192.168.56.150 touch .hushlogin
|
||||
ansible# ssh 192.168.56.151 touch .hushlogin
|
||||
```bash
|
||||
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
|
||||
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# 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# REPO=https://git.makaay.nl/mauricem/sidn-lxd-ansible-demo.git
|
||||
|
|
Loading…
Reference in New Issue