Quelle: MAAS How its works
MAAS / IAAS Umgebung um Cluster von VMs oder Kubernetes auszusetzen
MAAS steht für Self-Service-Remote-Installation von Windows, CentOS, ESXi und Ubuntu auf realen Servern. Es verwandelt das Rechenzentrum in eine Bare-Metal-Cloud.
- Ein Netzwerk mit direkter Verbindung ins Internet aber ohne DHCP Server. Informationen zu Gateway IP und DNS Servern.
- Ein handelsüblicher PC laut Anforderungen des MAAS Projektes, als Master.
- Eine oder mehrere PCs mit mindestens 32 GB RAM, 512 GB HD und wenn möglich mit BMC Unterstützung. Diese dienen als Virtualisierungs-Server.
- Alle Nodes sollten mit mindestens einem 1 GB LAN verbunden sein.
- Optional: ein Gateway Server im Internet um via VPN (WireGuard) auf die VMs von aussen zuzugreifen.
- MAAS Master und Worker Nodes
- Gateway Server
- Einbinden der Clients und Portweiterleitung.
- Virtualisierte Machinen in Virtualisierten Machinen
- Public Cloud und lernMAAS
- Proxmox und lernMAAS
- GNS3 und lernMAAS, siehe auch Projekt lerngns3.
- Terraform und lernMAAS, siehe Migration.
- Lokaler PC mit Vagrant und lernMAAS
- Hilfsscripts
Quelle: MAAS How its works
Jede von MAAS verwaltete Maschine durchläuft einen Lebenszyklus - von der Registrierung (New), der Inventarisierung und Einrichtung von Firmware (Ready) oder anderen hardwarespezifischen Elementen (Commissioning). Anschließend erfolgt die Bereitstellung (Deploy) um sie schliesslich zurück in den Ruhestand (Ready) zu entlassen.
Neue VMs lassen sich über die MAAS Weboberfläche oder via MAAS CLI erstellen.
Über die Weboberfläche ist Pods
(Bare Metal Maschinen mit KVM) und anschliessend Compose
aufzurufen.
Nach der Initialisierung der VM erscheinen diese als Ready
und es kann mittels Deploy
Ubuntu installiert werden.
Welche Software auf die VM installiert wird, bestimmt die Datei config.yaml anhand des Hostnamens.
Der Hostname ist wie folgt aufgebaut XXX-YY-Z
- XXX = Modul oder Kursname laut Eintrag in config.yaml
- YY = fortlaufende Nummer um mehrere VMs pro Modul zur Verfügung zu stellen
- Z = optionaler Suffix wird nicht ausgewertet. Kann z.B. die Klasse sein
Beispiele
- m100-02 - Daten charakterisieren, aufbereiten und auswerten (Inhalte von Thomas)
- m122-02-st17d - Modul 122, Maschine 01, Klasse st17d
- m122-02 - Modul 122, Maschine 01 nicht Klassengebunden
- m141-02-ap17a - Datenbanksystem in Betrieb nehmen (Beispiel mit Jupypter Notebooks)
- m183-02-wup18 - Applikationssicherheit implementieren (Kubernetes und Webgoat)
- m226-02 - Objektorientiert implementieren (Kubernetes mit 24 x BeakerX, in K8s Namespace, Umgebung)
- m239-02-st17a - Internet Server in Betrieb nehmen (VM mit Installiertem Apache Web Server und Samba Zugriff, Webseiten auf $HOME/data)
- m242-02-bistX - Mikroprozessoranwendung realisieren (Gruppenserver mit NodeRED, MQTT Server etc.)
- m254-02 - Geschäftsprozesse beschreiben (Kubernetes mit misegr/bpmn Umgebung, Frontend, Camunda, Backend) zu Demonstrationzwecken
- m300-02-vba - Plattformuebergreifende Dienste in ein Netzwerk integrieren. Kubernetes Umgebung um ohne Installation mit dem Modul beginnen zu können
- m426-02 - Software mit agilen Methoden entwickeln. Demonstration moderner DevOps Umgebung mit CI/CD, Kanboard, Git ...
- dukmaster-02, dukworker-12, dukworker-13 - Kubernetes Master und zwei Worker Nodes (manueller Join, Master - Worker)
- m000master-02, m000worker-03-m00master-02, ..., m000worker-05-m000master-02 - Kubernetes Master und fünf Worker Nodes mit TBZ Deployer. Der Join der Worker Nodes erfolgt automatisch. Sie auch Helper Script createk8svms
Hinweis: XXX-01 ist für den Gateway reserviert.
Konfigurationsdatei config.yaml
m242:
vm:
storage: 32
memory: 7680
cores: 4
services:
nfs: true
docker: true
k8s: master
wireguard: use
ssh: use
samba: false
firewall: false
scripts: modtec.sh
repositories: https://github.com/mc-b/duk,https://github.com/mc-b/mlg
Beispieleintrag aus config.yaml
config.yaml ist die zentrale Konfigurationsdatei für lernmaas.
In ihr stehen Defaulteinträge für VMs und welche Services und Software in die VMs installiert werden sollen.
Definiert Standardgrössen für die VM. Wird durch helper Scripts ausgewertet.
- storage - Disk in GB
- memory - RAM in MB
- cores - Anzahl der CPU Cores
Neben der Möglichkeit eigene Scripts oder Repositories, analog lernkube einzubinden, stehen eine Anzahl von Services zur Verfügung.
Die Services können pro VM in der Datei config.yaml aktiviert werden.
Es stehen folgende Services zur Verfügung:
- nfs -
true
= es werden $HOME/data, $HOME/template $HOME/config auf den MAAS Server weitergeleitet, bzw. gemountet. - wireguard -
use
= ist einen Datei $HOME/config/wireguard/$HOSTNAME vorhanden wird diese als Konfigurationsdatei für WireGuard verwendet. Statt der Konfigurationsdatei genügt neu die Zuordnung zu einer AZ und der Tagwireguard
. Bei Kubernetes wird zusätzlich als 1. IP nicht die interne IP sondern die von WireGuard verwendet. - ssh -
generate
= erstellt einen SSH-Key pro VM, fügt den Public Key.ssh/authorized_keys
an und kopiert den Private Key nach data/.ssh/. für den Zugriff von aussen. Zusätzlich wird ein Password mit pwgen erzeugt. Das Password steht in der Datei.ssh/passwd
unddata/.ssh/passwd
. - samba -
true
= installiert die CIFS Freigabe Samba und gibt $HOME/data allgemein frei. - firewall -
true
= installiertufw
als Firewall mit Standardeinstellungen - docker -
true
= installiert Docker in der VM.containerd
installiert containerD undcri-o
installiert cri-O als Container Runtime anstelle von Docker. Beicontainerd
undcri-o
können Tools (weave-scope) und Beispiele (docker in docker) evtl. nicht funktionieren. - k8s -
master
= installiert einen Kubernetes Master,worker
= installiert einen Kubernetes Worker und joint diesen mit dem Kubernetes Master.minimal
installiert nur die absolut notwendigen K8s Services.microk8s
Kubernetes basierend auf Ubuntu Linux,k3s
die k3s,rancher
die Rancher undopenshift
die OpenShift Variante von Kubernetes.
Details und die Services selber findet man im Verzeichnis services.
Definiert welche Scripts, getrennt durch ,
nach den Services ausgeführt werden sollen.
Ein Beispiel ist z.B. die Installation eines Proxy Servers proxy-server.sh. Weitere siehe Verzeichnis scripts.
Die Scripts werden als User ubuntu
in dessen HOME Verzeichnis ausgeführt.
Wie beim Projekt lernkube können weitere Repositories angegeben werden.
Diese werden in das Verzeichnis $HOME geklont und anschliessend, falls vorhanden, deren Script scripts/install.sh
ausgeführt.
Ein Beispiel ist z.B. das Modul 122 welche zusätzliche Software in die VM installiert.
Das install.sh Script wird im geklonten Verzeichnis als User ubuntu
ausgeführt.