Zum Inhalt

AWX auf K3s Single Node

Ich bin schon seit einiger Zeit ein großer FAN von Ansible. Ansible ist für mich das Tool der Wahl, wenn es um Installation und Konfiguration von Rechnern geht. Was aber noch fehlte, war eine GUI, einen Scheduler, um Task automatisiert auszuführen. Daher aber habe ich mir irgendwann AWX angesehen. AWX ist das OpenSource-Projekt zu Redhats Tower.

Vor Kurzem noch konnte man AWX sehr gut in Docker betreiben, ich möchte sogar sagen, es war die bevorzugte Methode. Da AWX auf MicroServices aufbaut, ist für Produktivumgebungen Kubernetes die Methode. Zwar kann nach wie vor AWX mit Docker betrieben werden, aber das ist eher für die Entwicklung gedacht.

Daher habe ich mir in meiner Umgebung einen AWX Service mit K3s (SingleNode) aufgebaut. K3s ist eine Kubernetes Distribution, die vor allem für IOT gedacht ist. Und relativ wenig Ressourcen benötigt.

In diesem Artikel möchte ich zunächst einen K3s Master (SingleNode) aufsetzen, auf welchem ich dann AWX deploye.

Für die Installation habe ich, wie bei vielen meiner Kunden üblich, als Unterbau SuSE SLES 15 SP2 gewählt. Die Installation sollte aber im Großen und Ganzen auf allen Distributionen funktionieren.

Installation K3s Single Node

Als Erstes benötigen wir K3s, die Installation von K3s geht schnell und einfach von der Hand.

Als root führen wir folgende Commandline aus:

curl -sfL https://get.k3s.io | sh -

Mittels Curl laden wir das aktuell Installationsskript direkt von der Homepage. Die Pipe führt dann das Skript in einer Shell direkt aus. Nach etwa 30 Sekunden sollte die Installation auch schon erledigt sein.

Als Nächstes prüfen wir, ob K3s bereit ist. Dazu führen wir folgendes Kommando aus:

kubectl get node

Dieses sollte Folgendes ausgeben:

NAME      STATUS   ROLES                  AGE   VERSION
blogawx   Ready    control-plane,master   15s   v1.21.4+k3s1

Da wir keinen Cluster betreiben wollen, ist die Konfiguration eines K3s Single Nodes hiermit abgeschlossen.

Ansible AWX

AWX setzt auf MicroServices, dass heißt es werden mehrer Container benötigt, eventuell werden Anbindungen an Storages usw. weiter benötigt. In Kubernetes gibt es sogenannte Operator, das sind anwendungsspezifische Controller, die die Kubernates API erweitern. Sinn dieser Erweiterung ist es, komplexe Anwendungen zu verwalten und zu deployen. Für unseren AWX Service benötigen wir also als Erstes einen Operator, um diesen zu bekommen depolyen wir diesen, indem wir direkt eine Ressourcen-Definition aus dem Internet laden.

kubectl apply -f https://raw.githubusercontent.com/ansible/awx-operator/0.13.0/deploy/awx-operator.yaml

Note

Bei mir hat das erste Deployment nicht funktioniert. Gute Hinweise liefert hier das Kommando:

kubectl describe pods
In meinem Fall musste ich das RPM apparmor-parser nachinstallieren, ein erneutes Aufrufen des Kommandos

kubectl apply -f https://raw.githubusercontent.com/ansible/awx-operator/0.13.0/deploy/awx-operator.yaml
funktioniert dann sofort.

Nach ein paar Minuten sollte der AWX Operator "ready" sein, dazu prüfen wir ob der Pod entsprechend läuft.

kubectl get pods
NAME                            READY   STATUS    RESTARTS   AGE
awx-operator-69c646c48f-lxtch   1/1     Running   0          4m8s

Damit der Operator AWX deployen kann, benötigt dieser ein Manifest. Ein Manifest ist eine YAML-Datei, in der beschrieben wird, wie unsere Applikation aussehen soll bzw. wie diese deployed werden soll.

Note

Detailliertere Information, wie der Operator konfiguriert werden kann, findet ihr im Git Repo zum AWX / Operator.

apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: awx
spec:
  hostname: awx.test.lan
  admin_user: admin
  admin_email: info@it-schmid.com
  image_version: 19.3.0

Jetzt müssen wir unser Manifest an den Controller schicken:

kubectl apply -f blogawx.yml

Note

Sehr hilfreich ist auch immer das Log des Operators.

kubectl logs -f deployments/awx-operator

Nach einer Weile sollten wir

kubectl describe pods

folgende Ausgabe sehen:

NAME                            READY   STATUS    RESTARTS   AGE
awx-operator-545497f7d5-r9rbl   1/1     Running   0          10m
awx-postgres-0                  1/1     Running   0          7m31s
awx-86c6dc6485-kk5hq            4/4     Running   0          7m16s

Wenn nun alles ordentlich durchgelaufen ist, sollten wir unseren AWX über den FQDN (siehe Hostname Manifest-Datei) im Browser ansprechen können.

FirefoxAWX

Unser Operater legt für uns auch einen Admin an, das dazugehörige Passwort bekommen wir mit folgendem Befehl raus:

kubectl get secret awx-admin-password -o jsonpath="{.data.password}" | base64 --decode

Jetzt können wir uns in den AWX einloggen.

AWX Dashboard