Instalar awx-operator en k3s

Esto es una pequeña guía de cómo instalar awx utilizando awx-operator en k3s.

Los pasos los adapté de esta guía de linuxtechi

El requisito previo es tener k3s y helm instalado en nuestra máquina, si no sabes como, me preguntas por X

Como primer paso agregamos el repositorio de awx-operator a helm:

helm repo add awx-operator https://ansible.github.io/awx-operator/

Luego, instalamos el operador en nuestro cluster k3s, utilizando helm

helm install ansible-awx-operator awx-operator/awx-operator -n awx --create-namespace

Validamos que el pod del operador (que luego nos instalará los componentes que necesitemos) se encuentre en estado Running:

pulpo@pop-os:~$ kubectl get pods -n awx | grep opera
awx-operator-controller-manager-6569d67f4c-x5dbp   2/2     Running   5 (72m ago)   24h

Dado que k3s ya viene con un storage class por defecto para crear volúmenes dentro de la máquina donde se esté ejecutando, el siguiente paso es simplemente definir un volume claim, y un custom resource definition (si queremos explorar la lista completa de los crds de awx instalados podemos ejecutar kubectl get crds awxs.awx.ansible.com -o yaml; para nuestro caso de uso vamos a crear un archivo yaml con el siguiente contenido:

---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: postgres-13-ansible-awx-postgres-13-0
  namespace: awx
spec:
  storageClassName: local-path
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: ansible-awx
  namespace: awx
spec:
  service_type: nodeport
  postgres_storage_class: local-path

En mi caso le di un nombre al yaml, y luego lo apliqué contra el cluster ejecutando kubectl apply -f awx_manifest_for_operator.yaml

Después de unos momentos, el namespace awx deberá tener los pods en ejecución:

pulpo@pop-os:~$ kubectl get pods -n awx
NAME                                               READY   STATUS    RESTARTS      AGE
awx-operator-controller-manager-6569d67f4c-x5dbp   2/2     Running   5 (79m ago)   24h
ansible-awx-postgres-13-0                          1/1     Running   0             55m
ansible-awx-task-6b4b565686-cbdg5                  4/4     Running   0             54m
ansible-awx-web-799c7f78b5-dwr7k                   3/3     Running   0             52m

Finalmente, exponemos el deployment de awx

kubectl expose deployment ansible-awx-web --name ansible-awx-web-svc --type NodePort -n awx

Obtenemos la password de admin que está guardada en un secreto de kubernetes:

kubectl get secret ansible-awx-admin-password -o jsonpath="{.data.password}" -n awx | base64 --decode ; echo

Y accedemos al puerto que haya creado el deployment (si no lo sabemos, lo obtenemos listando los svc):

pulpo@pop-os:~$ kubectl get svc -n awx ansible-awx-web-svc
NAME                  TYPE       CLUSTER-IP    EXTERNAL-IP   PORT(S)          AGE
ansible-awx-web-svc   NodePort   10.43.66.87   <none>        8052:30087/TCP   53m