Kubernetes erkunden mit microk8s
Von Michael Krieg am 2. Januar 2021
Ein Kubernetes für devs, cloud, clusters, workstations, Edge und IoT
Alle reden von Containern. Alle reden auch von Kubernetes. Neugierig geworden fragt man sich vielleicht:
“Was kann ich mit Kubernetes anstellen? Wie gelingt mir ein erfolgversprechender Einstieg?"
Um es gleich vorweg zu bestätigen: ja, bei Kubernetes handelt es sich um ein komplexes Container-Orchestrierungs-Ökosystem. Mal eben nebenbei gelingt der Einstieg sicher nur wenigen DevOps oder Entwicklern. Einige Hürden, die zu nehmen wären:
- komplexe Infrastruktur: Netzwerke, Storage, Routing, Hochverfügbarkeit, Linux, Kernel
- Skills: Docker-Wissen ist ein Muss
- Cloud-Affinität: Google, AWS, Azure …. und andere
- Anwendungsbereitstellung: Helm Charts, Rolling Updates und Registries
Puh! Wäre es nicht gut, wenn man während der eigenen ersten Schritte ein wenig von der Komplexität vernachlässigen könnte?
Wir bei Centrias setzen microk8s gern in folgenden Szenarien ein:
- Workshops & Trainings (intern und gemeinsam mit unseren Kunden)
- neue Kubernetes Versionen vorab testen
- Features lokal ausprobieren
- RBAC als zentrales Rollen- und Zugriffskonzept verstehen und anwenden
- Anwendungsbereitstellungen ("Deployments") von Webapplikationen testen
Auf die Plätze! Fertig! Los!
Mit wenigen Kommandos stellen wir auf einem Ubuntu 20 (LTS) System microk8s zur Verfügung und können sogleich das bekannte Kubernetes Dashboard installieren:
Anmerkung
microk8s lässt sich ebenso einfach unter OSX, Windows 10 oder auf Deinem Raspberry PI installieren!
sudo snap install microk8s --classic --channel=latest/stable
sudo snap install helm --classic
sudo usermod -a -G microk8s ubuntu
sudo chown -f -R ubuntu ~/.kube
echo "alias kubectl='microk8s kubectl'" >> .bash_aliases
In einer zweiten Shell starten wir nun unser Single-Node-Kubernetes-Cluster und aktivieren einige nützliche Addons:
microk8s status --wait-ready
microk8s enable dns storage
Kubernetes via Browser erkunden
microk8s liefert das Kubernetes Dashboard gleich mit. Und so einfach ist der Zugriff:
microk8s dashboard-proxy
Checking if Dashboard is running.
Dashboard will be available at https://192.168.64.2:10443
Use the following token to login:
eyJhbGciOiJSUzI1NiIsImtpZCI6InFWZ3I2TTFYdjVnMl9lVXdHcWF0blpmaW5SLTlhSnI1MDlxLW0tcGNUaXMifQ.eyJpc3MiOiJrdWJlcm5ldGVzL3NlcnZpY2VhY2NvdW50Iiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9uYW1lc3BhY2UiOiJrdWJlLXN5c3RlbSIsImt1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvc2VjcmV0Lm5hbWUiOiJkZWZhdWx0LXRva2VuLXh0ejZzIiwia3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9zZXJ2aWNlLWFjY291bnQubmFtZSI6ImRlZmF1bHQiLCJrdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3NlcnZpY2UtYWNjb3VudC51aWQiOiIwOTVkYTM2YS1jNjQ2LTQxMDEtOGUzYy0zNzU5N2ZhN2QxMjQiLCJzdWIiOiJzeXN0ZW06c2VydmljZWFjY291bnQ6a3ViZS1zeXN0ZW06ZGVmYXVsdCJ9.sYtp2PA3IdP5F4scpfiAUd3Lt0QOco35JLWDTRloos050VbIyhZ83fDZlMcXusHspyqwMLupV5V36hCd9YGgdPCQ5_doZXnrKfCmNt_8vKgmL0Qm7gQIQvNhLUf0I_zjV6HNyLm3vTo3l86wUKlTK0n8YR9Wf09jA32B-Z1P-oPlddxuy2t5hseG_n_ZRJvovde9fKATPCKdOHtXkdcDwXH8YyvVNvOTfV01XksXbpnl43SyCwgRPP501GoGd9UWrOSQGEG5jnMoRvU1JIVj7oo3wXiaJGp7HzU6yjYEeVHRlqA86uz650OqI_KIPmjA_VvvL0naCW0r8VoiGVf9hg
Am besten öffnet man die https URL im Firefox, da Google Chrome mit dem self-signed-certificate Probleme hat.
Warnung
Sofern man bereits RBAC aktiviert hat, muss man sich das Admin Token auf anderem Wege besorgen:
microk8s config
gibt dies am Ende aus.
Wie geht es nun weiter?
Der Einstieg ist auf einfache Weise geglückt. Viel ist aber noch nicht passiert in unserem Cluster. In den folgenden Blogbeiträgen widmen wir uns weiteren Grundlagen zu Kubernetes und werden konkret eine Webapplikation bereitstellen.
“Ich bin neugierig und möchte ungern länger warten!"
Kein Problem! Sprich uns gern an - wir bieten individuelle Kubernetes Workshops (remote) an!
Bonus: Packer Konfiguration
Wer Packer nutzt, kann folgendes Template verwenden, um automatisiert Amazon Machine Images (AMIs) bereitzustellen. Auch hier kommt Ubuntu 20 (LTS) als Basissystem zum Einsatz und wird über das weiter unten gezeigte Shellskript betankt.
Datei: microk8s.json
Hinweis
In diesem Beispiel nutzen wir Spot Instances als kostengünstige Packer Builder Variante! (siehe Zeilen 22 bis 28)
1{
2 "_comment": "Packer Template using Ubuntu Focal 20 LTS",
3 "builders": [
4 {
5 "name": "microk8s",
6 "type": "amazon-ebs",
7 "region": "eu-central-1",
8 "ssh_username": "ubuntu",
9 "ssh_interface": "public_ip",
10 "ssh_pty": "false",
11 "skip_region_validation": "true",
12 "skip_metadata_api_check": "true",
13 "source_ami_filter": {
14 "filters": {
15 "virtualization-type": "hvm",
16 "name": "ubuntu/images/hvm-ssd/ubuntu-focal-20.04-amd64-server-*",
17 "root-device-type": "ebs"
18 },
19 "owners": ["099720109477"],
20 "most_recent": true
21 },
22 "spot_price": "auto",
23 "spot_instance_types": [
24 "t3a.medium",
25 "t3.medium",
26 "t3a.large",
27 "t3.large"
28 ],
29 "ami_name": "microk8s-{{timestamp}}",
30 "tags": {
31 "Name": "microk8s",
32 "Description": "Canonical, Ubuntu, 20.04 LTS with latest stable 'microk8s' version"
33 }
34 }
35 ],
36 "provisioners": [
37 {
38 "type": "shell",
39 "script": "provision/microk8s.sh"
40 }
41 ]
42}
Datei: provision/microk8s.sh
#!/usr/bin/env bash
echo 'export PS1="[\u@\h] \W\[\033[32m\] |microk8s|\[\033[00m\] \$ "' | \
sudo tee /etc/profile.d/prompt.sh
echo -e '#\n# Welcome to microk8s.\n# You can enable useful addons like so:\n# microk8s enable rbac dns dashboard registry\n#\n' | \
sudo tee /etc/issue.net
echo 'Banner /etc/issue.net' | \
sudo tee --append /etc/ssh/sshd_config
sudo snap install microk8s --color=never --unicode=never --classic --channel=latest/stable
sudo snap install helm --color=never --unicode=never --classic
sudo usermod -a -G microk8s ubuntu
sudo chown -f -R ubuntu ~/.kube
echo "alias kubectl='microk8s kubectl'" >> .bash_aliases
# Die temporäre Packer IP Adresse gibt es nach dem Starten des Image nicht mehr:
# ergo: weg damit!
sudo microk8s kubectl delete node "$(hostname)"