Overview
In order to use AWX, aka the upstream product of Ansible Automation Hub, formerly Ansible Tower, we need to have a working cluster. This article provides instructions in how to install and use AWX.
Installation
The installation process for AWX is pretty simple. You’ll install the awx-operator per the instructions (see link below).
Persistent Volumes
The one issue I had was the persistent volume claim (PVC) failed to find appropriate storage.
$ kubectl describe pvc postgres-13-awx-demo-postgres-13-0 -n awx
Name: postgres-13-awx-demo-postgres-13-0
Namespace: awx
StorageClass:
Status: Pending
Volume:
Labels: app.kubernetes.io/component=database
app.kubernetes.io/instance=postgres-13-awx-demo
app.kubernetes.io/managed-by=awx-operator
app.kubernetes.io/name=postgres-13
Annotations: <none>
Finalizers: [kubernetes.io/pvc-protection]
Capacity:
Access Modes:
VolumeMode: Filesystem
Used By: awx-demo-postgres-13-0
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal FailedBinding 3m17s (x14344 over 2d11h) persistentvolume-controller no persistent volumes available for this claim and no storage class is set
However I have a persistent volume.
$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
storage-pv 100Gi RWX Retain Available 165d
It took just a little digging but I figured out the problem.
$ kubectl get pvc postgres-13-awx-demo-postgres-13-0 -n awx -o yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: "2023-09-11T02:03:34Z"
finalizers:
- kubernetes.io/pvc-protection
labels:
app.kubernetes.io/component: database
app.kubernetes.io/instance: postgres-13-awx-demo
app.kubernetes.io/managed-by: awx-operator
app.kubernetes.io/name: postgres-13
name: postgres-13-awx-demo-postgres-13-0
namespace: awx
resourceVersion: "54733870"
uid: 1574b79e-1e17-4825-bc25-d70ac4021af7
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
volumeMode: Filesystem
status:
phase: Pending
Note the spec.accessModes setting is ReadWriteOnce however the storage-pv persistent volume is configured as ReadWriteMany (RWX). I created a new PV called registry-pv and configured the Access Mode as ReadWriteOnce.
apiVersion: v1
kind: PersistentVolume
metadata:
name: registry-pv
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 20Gi
nfs:
path: /srv/nfs4/registry
server: 192.168.101.170
persistentVolumeReclaimPolicy: Retain
volumeMode: Filesystem
And it worked. The PVC was allocated and the pods started.
$ kubectl get pods -n awx
NAME READY STATUS RESTARTS AGE
awx-demo-postgres-13-0 1/1 Running 0 24m
awx-demo-task-857c895bf9-rt2h8 4/4 Running 0 23m
awx-demo-web-6c4df77799-6mn9p 3/3 Running 0 21m
awx-operator-controller-manager-6544864fcd-tbpbm 2/2 Running 0 2d13h
Postgres Database and Storage
The postgres container has a default configuration that uses attached storage (PV and PVC) for the database information. This is an 8g slice. The problem is it creates a [share]/data/pgdata directory with the postgres database. This means you have to ensure you have a unique PV for each postgres container.
Of course if you’re using an external postgres server, make sure you make the appropriate updates to the configmap.
Ingress Access
In addition to the pods, we need to create a DNS entry plus an ingress route.
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: awx-demo
namespace: awx
annotations:
kubernetes.io/ingress.class: haproxy
spec:
rules:
- host: awx.dev.internal.pri
http:
paths:
- backend:
service:
name: awx-demo-service
port:
number: 80
path: /
pathType: Prefix
tls:
- hosts:
- awx.dev.internal.pri
You’ll have to get the admin password, run the following command to retrieve it. Once retrieved, log in to https://awx.dev.internal.pri (or whatever you’re using) as admin and use the password. When you log in, the password is cleared so make sure you save it somewhere.
$ kubectl get secret awx-demo-admin-password -o jsonpath="{.data.password}" -n awx | base64 --decode; echo
G4XfwRsfk9MycbxnS9cE8CDfqSKIuNMW
Troubleshooting
If you forget the admin password or simply want to reset it, you would log into the web container and reset it there.
$ kubectl exec awx-demo-web-6c4df77799-6mn9p -n awx --stdin --tty -- /bin/bash
bash-5.1$ awx-manage changepassword admin
Changing password for user 'admin'
Password:
Password (again):
Password changed successfully for user 'admin'
bash-5.1$
Conclusion
When you get to the website and log in, you’re done!
Pingback: Kubernetes Index | Motorcycle Touring