Kubernetes unter Apache Mesos (M3s)

02. October 2021 Andreas Peters

M3s ist unser Apache Mesos Framework um multiple Kubernetes Clusters sehr schnell, einfach und flexibel zu betreiben.

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:

export MESOS_USERNAME=
export MESOS_PASSWORD=
export MESOS_MASTER=
export MESOS_SSL=true
export LOGLEVEL=DEBUG
export AUTH_USERNAME=<HIER EINEN USERNAMEN FUER DAS FRAMEWORK AUSDENKEN>
export AUTH_PASSWORD=<HIER EIN PASSWORT FUER DAS FRAMEWORK AUSDENKEN>
export K3S_TOKEN=<EIN TOKEN: Z.B: GENERIEREN MIT pwgen 33 1 >
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) Nun kann M3s gestartet werden:

./mesos-m3s

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

4) 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 2f0fc78c-bf81-4fe0-8720-e27ba217adae-0004 > ~/.kube/config

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.

5) Zugriff auf das Kubernetes Dashboard:

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