Files
PFVCluster/awx/README.md
T
mrcharles 153cfc2bd6 feat(awx): deploy AWX 24.6.1 on tsys-awx via k3s + AWX Operator
AWX (Ansible automation controller) deployed on tsys-awx.knel.net (VMID 600
on pfv-tsys6). Accessible at http://tsys-awx.knel.net:80 (admin/Gransyan1!).

Deployment details:
- k3s v1.36.2 single-node (no Traefik) on Debian 13 trixie
- AWX Operator 2.19.1 + AWX CR (LoadBalancer service via k3s ServiceLB)
- PostgreSQL 15 bundled (8 GiB PVC on local-path provisioner)
- VM disk resized 32->60 GB; swap partition converted to swapfile
- Fixed kube-rbac-proxy image (gcr.io removed -> quay.io/brancz replacement)
- Fixed AWX CR field names (postgres_data_volume_size ->
  postgres_storage_requirements)

Scripts: awx/install-k3s.sh, awx/deploy-awx.sh, awx/verify-awx.sh
Manifests: awx/awx-instance.yaml, awx/namespace.yaml
Docs: awx/README.md

All pods running: operator 2/2, postgres 1/1, web 3/3, task 4/4.

💘 Generated with Crush

Assisted-by: Crush:glm-5.2
2026-07-29 19:12:03 -05:00

3.0 KiB
Raw Blame History

AWX — tsys-awx.knel.net

Ansible AWX deployment on a dedicated k3s single-node VM.

→ Deployment Plan · → Status

Access

URL http://tsys-awx.knel.net (LAN) or http://100.91.39.53 (Tailscale)
Port 80 (LoadBalancer via k3s ServiceLB)
User admin
Password Gransyan1! (fleet standard)

Architecture

tsys-awx (VMID 600 on pfv-tsys6)
├── k3s v1.36.2+k3s1 (single-node, no Traefik)
├── AWX Operator 2.19.1 (manages the AWX lifecycle)
└── AWX instance "tsys-awx"
    ├── AWX web (UI/API)
    ├── AWX task (Celery workers)
    ├── PostgreSQL 15 (bundled, 8 GiB PVC on local-path)
    ├── Redis (ephemeral)
    └── ServiceLB (binds port 80 to host IP)

VM Resources

Resource Value
Host pfv-tsys6 (2× Xeon E5530, 126 GB RAM)
vCPU 4 (2 sockets × 2 cores)
RAM 12 GB
Disk 60 GB (D5 on tsys4 NFS)
OS Debian 13 trixie
Network 192.168.3.200 (LAN), 100.91.39.53 (Tailscale)

Files

File Purpose
install-k3s.sh Install k3s single-node (no Traefik)
deploy-awx.sh Deploy AWX Operator 2.19.1 + AWX instance
verify-awx.sh Verify deployment status + access
namespace.yaml Kubernetes namespace manifest
awx-instance.yaml AWX Custom Resource (CR) manifest

Deployment (from scratch)

# 1. Push scripts to VM
for f in awx/install-k3s.sh awx/deploy-awx.sh awx/verify-awx.sh \
         awx/namespace.yaml awx/awx-instance.yaml; do
    VM_IP=100.91.39.53 VM_USER=localuser bash tests/remote.sh vm \
        "sudo tee /tmp/awx/$(basename $f) > /dev/null" < "$f"
done

# 2. Install k3s
VM_IP=100.91.39.53 VM_USER=localuser bash tests/remote.sh vm \
    "sudo bash /tmp/awx/install-k3s.sh"

# 3. Deploy AWX
VM_IP=100.91.39.53 VM_USER=localuser bash tests/remote.sh vm \
    "sudo bash /tmp/awx/deploy-awx.sh"

# 4. Verify
VM_IP=100.91.39.53 VM_USER=localuser bash tests/remote.sh vm \
    "bash /tmp/awx/verify-awx.sh"

Operating

# kubectl access
sudo k3s kubectl -n awx get pods
sudo k3s kubectl -n awx logs -f deployment/awx-operator-controller-manager

# Restart AWX instance
sudo k3s kubectl -n awx delete awx tsys-awx  # operator will recreate

# Get admin password
sudo k3s kubectl -n awx get secret awx-admin-password -o jsonpath='{.data.password}' | base64 -d

Known Issues

  1. kube-rbac-proxy image: The AWX Operator 2.19.1 references gcr.io/kubebuilder/kube-rbac-proxy:v0.15.0 which was removed from GCR. The deploy script patches this to quay.io/brancz/kube-rbac-proxy:v0.15.0.
  2. Image pulls are slow: First deployment pulls ~2 GB of container images. Postgres image alone is ~400 MB and takes several minutes.
  3. Disk space: AWX + k3s uses ~10 GB of the 60 GB disk. PostgreSQL data grows over time — monitor df -h /.