Seit der Version 18 von AWX ist eine Installation nicht mehr auf einem “lokalen” Docker Host unterstützt. Stattdessen soll AWX über den AWX Operator auf Kubernetes installiert werden. Da jetzt nicht jeder einen Kubernetes Cluster sein Eigen nennt, habe ich die Installation von AWX 19.2.2 auf einem K3s Host durchgeführt.
Im Gegensatz zu Kubernetes bildet K3s viele Funktionalitäten von Kubernetes auf einer einzelnen Maschine ab. In meinem Fall läuft K3s auf einer Ubuntu 20.04 VM in meinem Homelab. Folgend zeige ich euch, wie ihr K3s und AWX 19.2.2 installiert.
Zunächst installieren wir Curl und im Anschluss laden wir uns damit K3s herunter und installieren es.
sudo apt install curl
curl -sfL https://get.k3s.io | sudo bash -
Den Status des Kubernetes / K3s Clusters prüfen wir nach der Installation.
root@vmkubernetes:~# kubectl get nodes
NAME STATUS ROLES AGE VERSION
vmkubernetes Ready control-plane,master 142m v1.21.2+k3s1
root@vmkubernetes:~# kubectl version --short
Client Version: v1.21.2+k3s1
Server Version: v1.21.2+k3s1
Um das Deployment des AWX-Operators in den Kubernetes Cluster durchzuführen, führen wir folgenden Befehl aus. In meinem Fall ist die aktuelleste Version des AWX-Operators 0.12.0. Welches die aktuellste Version ist, könnt ihr hier erfahren.
kubectl apply -f https://raw.githubusercontent.com/ansible/awx-operator/0.12.0/deploy/awx-operator.yaml
Nach wenigen Minuten sollte die Abfrage der Kubernetes Pods folgende Ausgabe anzeigen:
root@vmkubernetes:~# kubectl get pods
NAME READY STATUS RESTARTS AGE
awx-operator-545497f7d5-qmwtq 1/1 Running 0 21s
Jetzt nutzen wir ein Manifest um dem AWX-Operator mitzuteilen, in welcher Konfiguration wir AWX installiert haben möchten. In meinem Beispiel sieht das Manifest awx_19.yml
so aus. Weitere Optionen die ihr im Manifest angeben könnt (z.B. ein Passwort des Admin Benutzers) könnt ihr in der offiziellen Dokumentation nachlesen.
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
name: awx
spec:
service_type: nodeport
projects_persistence: true
projects_storage_access_mode: ReadWriteOnce
Nun wenden wir die Manifest Datei mit kubectl
an.
kubectl apply -f awx_19.yml
Nun heißt es wieder einige Minuten warten. Irgendwann sollte eure Ausgabe dann so aussehen.
root@vmkubernetes:~# kubectl get pods -l "app.kubernetes.io/managed-by=awx-operator"
NAME READY STATUS RESTARTS AGE
awx-postgres-0 1/1 Running 0 24s
awx-84bf6b6c4f-xhc2t 4/4 Running 0 12s
Abschließend lassen wir uns noch die URL zum AWX Container und das Password des admin Benutzers anzeigen.
root@vmkubernetes:~# kubectl get svc -l "app.kubernetes.io/managed-by=awx-operator"
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
awx-postgres ClusterIP None 5432/TCP 2m
awx-service NodePort 10.43.153.151 80:32032/TCP 2m
root@vmkubernetes:~# kubectl get secret awx-admin-password -o jsonpath="{.data.password}" | base64 --decode
VdJC1YiXKm8OGPNOpWVojUamKQBZmwfd
Also greifen wir auf die IP Adresse des K3s Hosts mit dem in der oberen Ausgabe angegebenem Port 32032
zu. In meinem Fall ist das http://192.168.2.113:32032
Mit dem Benuzter admin und dem Passwort von Oben können wir uns anmelden.
Wen nun noch den dynamischen Port ändern möchte, kann den Kubernetes Service mit folgendem Kommando editieren.
kubectl edit svc awx-service
...
ports:
- name: http
nodePort: 32000
port: 80
protocol: TCP
targetPort: 8052
...
Philip
Update 06.07.2021: Leider musste ich feststellen, dass ich nach dem Neustart der Kubernetes VM die AWX Seite nicht mehr aufrufen konnte. Ich bekomme auf der Webseite keinen Fehler angezeigt. Schaue ich jedoch in das Logfile des Deployments, kann ich sehen, dass der Webseiten Container keine Dateien (Bilder, Seiten usw.) mehr finden kann.
kubectl logs -f deployments/awx awx-web ... 2021/07/05 22:58:16 [error] 25#0: *3 open() "/var/lib/awx/public/static/js/2.53c634ac.chunk.js" failed (2: No such file or directory), client: 10.42.0.1, server: , request: "GET /static/js/2.53c634ac.chunk.js HTTP/1.1", host: "vmkubernetes.home.lab:32032", referrer: "http://vmkubernetes.home.lab:32032/" 10.42.0.1 - - [05/Jul/2021:22:58:16 +0000] "GET /static/js/main.6ab990a9.chunk.js HTTP/1.1" 404 564 "http://vmkubernetes.home.lab:32032/" "Mozilla/5.0 (X11; CrOS armv7l 13597.84.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.187 Safari/537.36" "-" 2021/07/05 22:58:16 [error] 25#0: *1 open() "/var/lib/awx/public/static/js/main.6ab990a9.chunk.js" failed (2: No such file or directory), client: 10.42.0.1, server: , request: "GET /static/js/main.6ab990a9.chunk.js HTTP/1.1", host: "vmkubernetes.home.lab:32032", referrer: "http://vmkubernetes.home.lab:32032/"
Interessanterweise passiert das nur, wenn ich die VM tatsächlich reboote. Wenn ich sie herunterfahre und neu starte, funktioniert alles ohne Probleme.
Update 20.08.2021: Nach dem Update von AWX auf 19.3.0 und einem Update von K3S auf 1.21.3+k3s1 ist das Problem der nicht verfügbaren AWX Seite nach einem Reboot nicht mehr vorhanden.