Deploying awx into kubernetes
Intro
AWX provides a web-based user interface, REST API, and task engine built on top of Ansible. This article will summarise steps of installing AWX into Kubernetes using Operator
Pre-Reqs
- Familiarity with Kubernetes (k8s)
- Bit powerful node machine of 4vCPU & 8GB RAM
- AWX is exposed on port 9080, so enable firewall accordingly (As default port 80 will have collision mostly in a Kubernetes environment)
Build Operator from code (Optional Step)
Unfortunately at the time of writing, the official repository doesn't give a operator yaml directly, but suggests to build from code. But we use a pre-built operator yaml and hence below step of creating from source-code is optional
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
creationTimestamp: null
labels:
io.kompose.service: n8n-claim0
name: n8n-claim0
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2Gi
status: {}
Package components
The deployment is split into following
- awx-operator.yaml - Pre-built operator file
- awx-pvc0.yaml - PersistentVolumeClaim To mount directory awx
- awx-deployment.yaml - Actual deployment definitions
- awx-svc.yaml - Service To expose awx for UI access
awx-operator.yaml
kubectl create ns awx
kubectl apply -f https://raw.githubusercontent.com/getkub/k8s_kubernetes/main/modules/awx/built_operator/awx-operator.yml
awx-pvc0.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: static-data-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-path
resources:
requests:
storage: 2Gi
awx-deployment.yaml
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
name: awx
spec:
service_type: LoadBalancer
loadbalancer_port: 9080
projects_persistence: true
projects_storage_access_mode: ReadWriteOnce
web_extra_volume_mounts: |
- name: static-data
mountPath: /var/lib/awx/public
extra_volumes: |
- name: static-data
persistentVolumeClaim:
claimName: static-data-pvc
awx-svc.yaml
apiVersion: v1
kind: Service
metadata:
name: awx-svc1
spec:
ports:
- port: 5432
targetPort: 5432
protocol: TCP
name: awx-port
selector:
app: awx
type: LoadBalancer
---
Apply in following order
kubectl create ns awx # Might be already created
kubectl -n awx apply -f <operator> # Might be already done
kubectl -n awx apply -f awx-pvc0.yaml
kubectl -n awx apply -f awx-deployment.yaml
kubectl -n awx apply -f awx-svc.yaml
kubectl -n awx get all # To see all components
curl http://<cluster_ip>:9080