M3s, das Kubernetes Framework für Apache Mesos



Mit M3s schaffen wir die Möglichkeit, sehr schnell und einfach Kubernetes Cluster auf Apache Mesos zu betreiben. Die Cluster sind jeweils von einander getrennt und können somit je Mandant bezogen betrieben werden.

In nur wenigen Schritten läßt sich Kubernetes auf einen bestehenden Apache Mesos Stack starten.

1) In diesem Beispiel nutzen wir die vor kompilierte Binary Version von M3s. Die aktuellste Entwickler Version findet man in unserem Github Repository als Artifact unter dem jeweiligen “Binary Build”. Es lohnt sich für Tests diese zu verwenden.

2) M3s benötigt einige Parameter damit sich M3s mit Mesos verbinden kann. Die Nachfolgenden dienen nur als Beispiel.

export MESOS_SSL=falseexport DOCKER_CNI=mini
❯ export LOGLEVEL=DEBUG
❯ export AUTH_USERNAME=user
❯ export AUTH_PASSWORD=password
❯ export VOLUME_K3S_SERVER=local_k3sserver
❯ export K3S_TOKEN=df54383b5659b9280aa1e73e60ef78fc
❯ export DOMAIN=.mini
❯ export BOOTSTRAP_URL=https://raw.githubusercontent.com/AVENTER-UG/mesos-m3s/master/bootstrap/bootstrap.sh
❯ export K3S_AGENT_LABELS=[{"key":"traefik.enable","value":"true"},{"key":"traefik.http.routers.m3s.entrypoints","value":"web"},{"key":"traefik.http.routers.m3s.service","value":"m3s-http"},{"key":"traefik.http.routers.m3s.rule","value":"HostRegexp(`example.com`, `{subdomain:[a-z]+}.example.com`)"}]

Die Variable K3S_AGENT_LABELS gibt die Möglichkeit, Labels für Traefik oder andere an Mesos verbundene Loadbalancer zu erstellen. In dem hier aufgeführten Beispiel sind es Labels für unseren Traefik Provider.

3) Bevor wir M3s starten, erstellen wir in Docker in dediziertes Netzwerk.

docker network create --subnet 10.40.0.0/24 mini

4) Nun kann M3s gestartet werden:

❯ ./mesos-m3s

Nach kurzer Zeit tauchen in der Mesos GUI die entsprechenden M3s Tasks auf:

5) Mit dem M3s Mesos CLI Plugin können wir uns die die benötigte Kubernetes Konfiguration exportieren:

❯ mesos m3s list

ID                                         Active  WebUI                    Name
2f0fc78c-bf81-4fe0-8720-e27ba217adae-0004  True    http://andreas-pc:10000  m3s

❯ mesos m3s kubeconfig m3s > ~/.kube/config

Wie das Plugin zu installieren ist, kann hier nachgelesen werden.

Steht uns die mesos cli nicht zur Verfügung, behelfen wir uns mit dem API Call:

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

Anschließend stehen alle kubectl Kommandos zur Verfügung

❯ kubectl get nodes

NAME                             STATUS   ROLES                  AGE    VERSION
k3sagent0.weave.local-170d0b36   Ready    <none>                 4m5s   v1.21.1+k3s1
k3sserver.weave.local            Ready    control-plane,master   5m7s   v1.21.1+k3s1

Steht eine funktionierende mesos cli nicht zur verfügung, können wir die kubeconfig auch mithilfe von curl exportieren:

❯ curl -X GET http://127.0.0.1:10000/v0/server/config

Als IP Adresse wird die vom Framework angegeben. Wurde die Variable AUTH_USERNAME/PASSWORD gesetzt, sind diese curl mit zuteilen.

6) Zugriff auf das Kubernetes Dashboard:

❯ kubectl -n kubernetes-dashboard describe secret admin-user-token | grep '^token'
❯ kubectl proxy