This is step by step in the detailed installation guide of Ansible AWX operator (Automation controller Tower). On this channel earlier I had written 2 articles on how to install Ansible AWX operator but they are no longer valid as the installation instruction has been changed. For any new changes you can check the article. https://github.com/ansible/awx-operator.
Before starting you need Kubernetes cluster to be setup. You can find below simple one node Kubernetes cluster installation guide for development. I have two ways first is using K3s and another is Minikube. For this instructions I am using K3s installation method to configure my Kubernetes cluster as I find it very easy and almost one liner.
Install and Setup your own Kubernetes Cluster with K3s
How to Install Minikube on Ubuntu - Step by Step
I have installed K3s cluster on my Ubuntu server. Update and upgrade Ubuntu system before starting configuration of Ansible AWX. Install necessary curl and vim application packages on the server, they will be required later.
Check this for K3s error: Rancher k3s.yaml permission denied when using kubectl - Kubernetes
root@AnsibleAWX:~# root@AnsibleAWX:~# apt-get update Hit:1 http://us.archive.ubuntu.com/ubuntu focal InRelease Hit:2 http://us.archive.ubuntu.com/ubuntu focal-updates InRelease Hit:3 http://us.archive.ubuntu.com/ubuntu focal-backports InRelease Hit:4 http://security.ubuntu.com/ubuntu focal-security InRelease Reading package lists... Done root@AnsibleAWX:~# root@AnsibleAWX:~# apt-get upgrade -y Reading package lists... Done Building dependency tree Reading state information... Done Calculating upgrade... Done The following packages have been kept back: fwupd gir1.2-javascriptcoregtk-4.0 gir1.2-webkit2-4.0 gnome-shell-extension-desktop-icons gvfs gvfs-backends gvfs-bin gvfs-common gvfs-daemons gvfs-fuse gvfs-libs libegl-mesa0 libfwupd2 libfwupdplugin1 libgbm1 libgl1-mesa-dri libglapi-mesa libglx-mesa0 libjavascriptcoregtk-4.0-18 libsmbclient libwbclient0 libwebkit2gtk-4.0-37 libxatracker2 linux-generic-hwe-20.04 linux-headers-generic-hwe-20.04 linux-image-generic-hwe-20.04 mesa-vulkan-drivers samba-libs ubuntu-advantage-tools 0 upgraded, 0 newly installed, 0 to remove and 29 not upgraded. root@AnsibleAWX:~# root@AnsibleAWX:~# apt-get install curl vim Reading package lists... Done Building dependency tree Reading state information... Done curl is already the newest version (7.68.0-1ubuntu2.14). vim is already the newest version (2:8.1.2269-1ubuntu5.9). 0 upgraded, 0 newly installed, 0 to remove and 29 not upgraded. root@AnsibleAWX:~#
Next install git application one of the prerequisites, if this package is missing you will end up with an error Can not execute kustomize build issue installing Ansible AWX Operator while installation.
ubuntu@AnsibleAWX:~$ ubuntu@AnsibleAWX:~$ sudo apt-get install git Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: git-man liberror-perl Suggested packages: git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-cvs git-mediawiki git-svn The following NEW packages will be installed: git git-man liberror-perl 0 upgraded, 3 newly installed, 0 to remove and 29 not upgraded. Need to get 5,443 kB of archives. After this operation, 38.5 MB of additional disk space will be used. Do you want to continue? [Y/n] Y Get:1 http://us.archive.ubuntu.com/ubuntu focal/main amd64 liberror-perl all 0.17029-1 [26.5 kB] Get:2 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 git-man all 1:2.25.1-1ubuntu3.6 [887 kB] Get:3 http://us.archive.ubuntu.com/ubuntu focal-updates/main amd64 git amd64 1:2.25.1-1ubuntu3.6 [4,529 kB] Fetched 5,443 kB in 1s (7,310 kB/s) Selecting previously unselected package liberror-perl. (Reading database ... 185929 files and directories currently installed.) Preparing to unpack .../liberror-perl_0.17029-1_all.deb ... Unpacking liberror-perl (0.17029-1) ... Selecting previously unselected package git-man. Preparing to unpack .../git-man_1%3a2.25.1-1ubuntu3.6_all.deb ... Unpacking git-man (1:2.25.1-1ubuntu3.6) ... Selecting previously unselected package git. Preparing to unpack .../git_1%3a2.25.1-1ubuntu3.6_amd64.deb ... Unpacking git (1:2.25.1-1ubuntu3.6) ... Setting up liberror-perl (0.17029-1) ... Setting up git-man (1:2.25.1-1ubuntu3.6) ... Setting up git (1:2.25.1-1ubuntu3.6) ... Processing triggers for man-db (2.9.1-1) ... ubuntu@AnsibleAWX:~$
For this part you will need to install an application package named kustomize, which is downloaded from https://kubectl.docs.kubernetes.io/installation/kustomize/. Kustomize is a command-line configuration manager for Kubernetes objects. it lets you do declarative changes to your configurations without affecting or modifying a template.
Download kustomize application using shell curl command and move it to /usr/local/bin folder with correct execution permissions.
ubuntu@AnsibleAWX:~$ ubuntu@AnsibleAWX:~$ curl -s "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" | bash {Version:kustomize/v4.5.7 GitCommit:56d82a8378dfc8dc3b3b1085e5a6e67b82966bd7 BuildDate:2022-08-02T16:35:54Z GoOs:linux GoArch:amd64} kustomize installed to /home/ubuntu/kustomize ubuntu@AnsibleAWX:~$ ubuntu@AnsibleAWX:~$ chmod 755 kustomize ubuntu@AnsibleAWX:~$ ubuntu@AnsibleAWX:~$ sudo mv kustomize /usr/local/bin ubuntu@AnsibleAWX:~$ ubuntu@AnsibleAWX:~$ which kustomize /usr/local/bin/kustomize ubuntu@AnsibleAWX:~$
Next grab a latest tag version number for Ansible AWX Operator from https://github.com/ansible/awx-operator/releases.
Required packages are installed, following create a new file kustomization.yaml and add below light red/yellow highlighted content in the file. Replace latest tag number to 1.1.1 in the file as shown below.
ubuntu@AnsibleAWX:~$ ubuntu@AnsibleAWX:~$ vim kustomization.yaml ubuntu@AnsibleAWX:~$ ubuntu@AnsibleAWX:~$ cat kustomization.yaml apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: # Find the latest tag here: https://github.com/ansible/awx-operator/releases - github.com/ansible/awx-operator/config/default?ref=1.1.1 # Set the image tags to match the git version from above images: - name: quay.io/ansible/awx-operator newTag: 1.1.1 # Specify a custom namespace in which to install AWX namespace: awx ubuntu@AnsibleAWX:~$
Deploy Kubernetes CRDs and resources using kustomize tool with the help of kubectl tool. In the console I see required custom resource definitions, service account, cluster role, cluster role bindings, configmap, services, and deployments are created successfully. Verify Pods with containers are up and ready running.
ubuntu@AnsibleAWX:~$ ubuntu@AnsibleAWX:~$ kustomize build . | kubectl apply -f - namespace/awx created customresourcedefinition.apiextensions.k8s.io/awxbackups.awx.ansible.com created customresourcedefinition.apiextensions.k8s.io/awxrestores.awx.ansible.com created customresourcedefinition.apiextensions.k8s.io/awxs.awx.ansible.com created serviceaccount/awx-operator-controller-manager created role.rbac.authorization.k8s.io/awx-operator-awx-manager-role created role.rbac.authorization.k8s.io/awx-operator-leader-election-role created clusterrole.rbac.authorization.k8s.io/awx-operator-metrics-reader created clusterrole.rbac.authorization.k8s.io/awx-operator-proxy-role created rolebinding.rbac.authorization.k8s.io/awx-operator-awx-manager-rolebinding created rolebinding.rbac.authorization.k8s.io/awx-operator-leader-election-rolebinding created clusterrolebinding.rbac.authorization.k8s.io/awx-operator-proxy-rolebinding created configmap/awx-operator-awx-manager-config created service/awx-operator-controller-manager-metrics-service created deployment.apps/awx-operator-controller-manager created ubuntu@AnsibleAWX:~$ ubuntu@AnsibleAWX:~$ kubectl get all --namespace=awx NAME READY STATUS RESTARTS AGE pod/awx-operator-controller-manager-65897dbf99-86tqr 2/2 Running 0 4m2s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/awx-operator-controller-manager-metrics-service ClusterIP 10.43.4.105 <none> 8443/TCP 4m2s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/awx-operator-controller-manager 1/1 1 1 4m2s NAME DESIRED CURRENT READY AGE replicaset.apps/awx-operator-controller-manager-65897dbf99 1 1 1 4m2s ubuntu@AnsibleAWX:~$
Create a new file awx-demo.yaml and add below nodeport service resource manifest yaml content. I have chosen 30080 port number to communicate with the outside world. Modify kustomization.yaml file and add - awx-demo.yaml under resources. Deploy it with a combination of kustomize and kubectl tools. K8s Deployment is configured and a new nodeport service is added.
ubuntu@AnsibleAWX:~$ ubuntu@AnsibleAWX:~$ vim awx-demo.yaml ubuntu@AnsibleAWX:~$ ubuntu@AnsibleAWX:~$ cat awx-demo.yaml --- apiVersion: awx.ansible.com/v1beta1 kind: AWX metadata: name: awx-demo spec: service_type: nodeport # default nodeport_port is 30080 nodeport_port: 30080 ubuntu@AnsibleAWX:~$ ubuntu@AnsibleAWX:~$ vim kustomization.yaml ubuntu@AnsibleAWX:~$ ubuntu@AnsibleAWX:~$ cat kustomization.yaml apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: # Find the latest tag here: https://github.com/ansible/awx-operator/releases - github.com/ansible/awx-operator/config/default?ref=1.1.1 # Add this extra line: - awx-demo.yaml # Set the image tags to match the git version from above images: - name: quay.io/ansible/awx-operator newTag: 1.1.1 # Specify a custom namespace in which to install AWX namespace: awx ubuntu@AnsibleAWX:~$ ubuntu@AnsibleAWX:~$ kustomize build . | kubectl apply -f - namespace/awx unchanged customresourcedefinition.apiextensions.k8s.io/awxbackups.awx.ansible.com unchanged customresourcedefinition.apiextensions.k8s.io/awxrestores.awx.ansible.com unchanged customresourcedefinition.apiextensions.k8s.io/awxs.awx.ansible.com unchanged serviceaccount/awx-operator-controller-manager unchanged role.rbac.authorization.k8s.io/awx-operator-awx-manager-role configured role.rbac.authorization.k8s.io/awx-operator-leader-election-role unchanged clusterrole.rbac.authorization.k8s.io/awx-operator-metrics-reader unchanged clusterrole.rbac.authorization.k8s.io/awx-operator-proxy-role unchanged rolebinding.rbac.authorization.k8s.io/awx-operator-awx-manager-rolebinding unchanged rolebinding.rbac.authorization.k8s.io/awx-operator-leader-election-rolebinding unchanged clusterrolebinding.rbac.authorization.k8s.io/awx-operator-proxy-rolebinding unchanged configmap/awx-operator-awx-manager-config unchanged service/awx-operator-controller-manager-metrics-service unchanged deployment.apps/awx-operator-controller-manager configured awx.awx.ansible.com/awx-demo created ubuntu@AnsibleAWX:~$
Verify the status of new resources again under namespace awx. All Pods are ready. Check the service awx-demo-service nodeport port number 30080, which I will use to access the AWX url. To know the admin user password of AWX use jsonpath query to get it from Kubernetes secret.
ubuntu@AnsibleAWX:~$ ubuntu@AnsibleAWX:~$ kubectl get all -n awx NAME READY STATUS RESTARTS AGE pod/awx-operator-controller-manager-65897dbf99-9tmc7 2/2 Running 0 10m pod/awx-demo-postgres-13-0 1/1 Running 0 4m59s pod/awx-demo-d9b84d689-b9prn 4/4 Running 0 4m1s NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE service/awx-operator-controller-manager-metrics-service ClusterIP 10.43.231.216 8443/TCP 10m service/awx-demo-postgres-13 ClusterIP None 5432/TCP 4m59s service/awx-demo-service NodePort 10.43.21.198 80:30080/TCP 4m4s NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/awx-operator-controller-manager 1/1 1 1 10m deployment.apps/awx-demo 1/1 1 1 4m1s NAME DESIRED CURRENT READY AGE replicaset.apps/awx-operator-controller-manager-65897dbf99 1 1 1 10m replicaset.apps/awx-demo-d9b84d689 1 1 1 4m1s NAME READY AGE statefulset.apps/awx-demo-postgres-13 1/1 4m59s ubuntu@AnsibleAWX:~$ ubuntu@AnsibleAWX:~$ kubectl get service awx-demo-service -n awx NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE awx-demo-service NodePort 10.43.21.198 80:30080/TCP 16m ubuntu@AnsibleAWX:~$ ubuntu@AnsibleAWX:~$ kubectl get secret awx-demo-admin-password -o jsonpath="{.data.password}" -n awx | base64 --decode ; echo ld1pOAaKKD8ruarR7Od9o1ZmTE1A505o ubuntu@AnsibleAWX:~$
Use the Ubuntu server's IP or FQDN where Ansible AWX pods are deployed on the Kubernetes cluster. Use port number 30080 to access AWX server. Provide username as admin and password. After successful login you will land up on the dashboard portal.
UseFul Articles
Find and use Azure Marketplace VM images with Azure PowerShell
How to install and configure Ansible on Ubuntu
Get Started: Configure Ansible for Azure Cloud Infrastructure
Install the Microsoft Azure CLI on Ubuntu Linux
Deploy create Virtual Network vNET in Azure cloud using Ansible
Quickstart How to authenticate Ansible with Microsoft Azure
Ansible authenticate to Microsoft Azure using credential profiles Part 1
Ansible authenticate to Microsoft Azure using credential profiles Part 2
Ansible authenticate to Microsoft Azure using credential inside yaml file
How to install kubernetes master control-plane on ubuntu Part 1
How to install kubernetes worker node on ubuntu Part 2
Configure Nginx Load Balancer for the Kubernetes API Server - Part 1
Install and configure Kubernetes cluster master nodes using kubeadm - Part 2
Install and configure Kubernetes cluster worker nodes using kubeadm - Part 3