· df · 2 min read

Deploying awx into kubernetes

kubernetesawxautomationansible

 

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