Mini Mesos 1.9.x und Kubernetes

22. March 2022 Andreas Peters

Eine auf Docker Container basierende Mini Mesos Umgebung ist aus vielen Gründen hilfreich. Zum einen um sich mit Mesos zu beschäftigen und zu lernen wie es funktioniert und für Software Entwickler um Mesos Frameworks ohne grosse Mesos Umgebungen schnell und einfach lokal auf dem Arbeitsrechner zu testen.

Aus diesem Grund haben wir das bestehende Mini Mesos von Apache noch etwas optimiert und stellen es in unserem Docker Hub Repository zur Verfügung.

Mit einem Befehl zu Apache Mesos

❯ docker run  --rm --name mesos --privileged=true --net host -it avhost/mesos-mini:1.9.x /sbin/init

systemd 219 running in system mode. (+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT
    +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN)
Detected virtualization docker.
Detected architecture x86-64.

Welcome to CentOS Linux 7 (Core)!

Set hostname to <HOSTNAME>.
Initializing machine ID from random generator.
Cannot add dependency job for unit dbus.socket, ignoring: Unit is masked.
[  OK  ] Reached target Network.
[  OK  ] Created slice Root Slice.
[  OK  ] Created slice System Slice.
[  OK  ] Reached target Slices.
[  OK  ] Listening on Delayed Shutdown Socket.
[  OK  ] Reached target Swap.
[  OK  ] Reached target Local File Systems.
[  OK  ] Listening on Journal Socket.
[  OK  ] Reached target Sockets.
[  OK  ] Reached target Paths.
Starting Create Volatile Files and Directories...
Starting Journal Service...
[  OK  ] Started Create Volatile Files and Directories.
[ INFO ] Update UTMP about System Boot/Shutdown is not active.
[DEPEND] Dependency failed for Update UTMP about System Runlevel Changes.
Job systemd-update-utmp-runlevel.service/start failed with result 'dependency'.
[  OK  ] Started Journal Service.
[  OK  ] Reached target System Initialization.
[  OK  ] Reached target Basic System.
[  OK  ] Started Mesos Master.
[  OK  ] Started Mesos Agent.
Starting Docker Application Container Engine...
[  OK  ] Started Create Docker Network.
[  OK  ] Started Daily Cleanup of Temporary Directories.
[  OK  ] Reached target Timers.
Starting Cleanup of Temporary Directories...
[  OK  ] Started Cleanup of Temporary Directories.
[  OK  ] Started Docker Application Container Engine.
[  OK  ] Reached target Multi-User System.

Nun haben wir über die URL “http://localhost:5050” Zugriff auf die Mesos UI welcher auch zugleich der Mesos Master endpoint für Frameworks ist.

mesos-ui

Mini Mesos mit Kubernetes

Mit dem obigen Schritt, haben wir nun eine lokale Apache Mesos Umgebung um z.B. Frameworks zu testen. Am Beispiel unseres Kubernetes Frameworks namens M3s, wollen wir kurz aufzeigen wie das weitere Vorgehen ist.

❯ git clone https://github.com/AVENTER-UG/mesos-m3s.git
❯ git checkout dev

Das Kubernetes Framework M3s benötigt Redis als Datenbank.

❯ docker run --rm --name m3s-redis -d -p 6379:6379 redis

Als nächstes setzen wir für M3s einige Umgebungsvariablen. Alle weiteren, wie z.B. der Mesos Master Hostname, wird aus den default werden verwendet.

export MESOS_SSL=falseexport DOCKER_CNI=mini
❯ export LOGLEVEL=DEBUG
❯ export K3S_MANAGER_MEM=1200
❯ export AUTH_USERNAME=user
❯ export AUTH_PASSWORD=password
❯ export VOLUME_K3S_SERVER=local_k3sserver
❯ export K3S_TOKEN=df54383b5659b9280aa1e73e60ef78fc
❯ export DOMAIN=.mini
❯ export K3S_DOCKER=false

❯ go run .

In der Mesos UI erscheinen nach einigen Minuten der ETCD, sowie der Kubernetes Manager und Agent.

mesos_ui_m3s

Über den folgenden API Call, können wir uns vom M3s Framework die Kubernetes config herunterladen:

❯ curl -k -X GET -u user:password http://127.0.0.1:10000/api/m3s/v0/server/config  > ~/.kube/confi

Haben wir bereits eine kubectl installiert, können wir nun auf Kubernetes unter Mesos zugreifen.

❯ kubectl get nodes
NAME                     STATUS   ROLES                  AGE    VERSION
m3sagent.mini-cf544d5c   Ready    <none>                 8m6s   v1.21.1+k3s1
m3sserver.mini           Ready    control-plane,master   10m    v1.21.1+k3s1