Loading search data...

Ansible - Installer AWX sur un cluster Kubernetes

Publié le : 2 février 2022 | Mis à jour le : 22 septembre 2022

logo ansible

AWX est la version Open-Source d'Ansible Automation Platform plus connue sous le nom d'Ansible Tower. AWX fournit une interface web ainsi qu’une API REST et un scheduler pour Ansible. L’interface Web permet gérer tous les objets Ansible comme les projets, les inventaires, les hôtes, les utilisateurs et groupes, les environnements d’exécution, les taches de planification, l’envoi de notifications…,

Nous allons voir ici comment installer AWX sur un cluster Kubernetes. Ça simplifie énormément l’installation puisque tout est géré par un Opérateur Kubernetes.

Installation d’Ansible AWX sur un cluster Kubernetes

Bien sûr, vous devez avoir à disposition un Cluster Kubernetes. Vous pouvez utiliser kind ou minikube ou k3s. Ansible AWX par défaut a besoin au minimum de 4 CPU et 6Go de mémoire, mais nous allons voir comment restreindre ces besoins.

Récupérer le projet AWX Operator

Un simple git clone dans un répertoire va suffire :

git clone https://github.com/ansible/awx-operator.git
cd awx-operator

Installer l’Opérateur kubernetes AWX

Vous allez voir c’est très simple. On va dans un premier temps retrouver la dernière version disponible et créer le namespace AWX :

export NAMESPACE=awx
export RELEASE_TAG=`curl -s https://api.github.com/repos/ansible/awx-operator/releases/latest | grep tag_name | cut -d '"' -f 4`
kubectl create ns ${NAMESPACE}
kubectl config set-context --current --namespace=$NAMESPACE
git checkout $RELEASE_TAG

Passons au déploiement de l’opérateur Kubernetes :

make deploy
cd config/manager && /home/user/awx-operator/bin/kustomize edit set image controller=quay.io/ansible/awx-operator:0.14.0
/home/user/awx-operator/bin/kustomize build config/default | kubectl apply -f -
namespace/my-namespace 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-leader-election-role created
role.rbac.authorization.k8s.io/awx-operator-manager-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-leader-election-rolebinding created
rolebinding.rbac.authorization.k8s.io/awx-operator-manager-rolebinding created
clusterrolebinding.rbac.authorization.k8s.io/awx-operator-proxy-rolebinding created
configmap/awx-operator-manager-config created
service/awx-operator-controller-manager-metrics-service created
deployment.apps/awx-operator-controller-manager created

On vérifie que l’installation s’est correctement terminée. Vous devriez retrouver un pod :

kubectl get pod
NAME                                               READY   STATUS    RESTARTS   AGE
awx-operator-controller-manager-6d959bd7dd-gxkh5   2/2     Running   0          3m

C’est ce pod qui est chargé d’installer AWX à partir d’une configuration que nous allons lui indiquer.

Configurer l’installation d’Ansible AWX

Dans un premier pour rendre persistente l’installation, nous allons définir un Persistent Volume Claim :

tee awx-pvc.yml <<EOF
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: awx-projects-claim
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 2Gi
  storageClassName: local-path
EOF

kubectl apply -f awx-pvc.yml

Idem, nous créons deux Persistent Volume (changer les répertoires au besoin):

tee awx-pv.yml <<EOF
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: awx-postgres-13-volume
spec:
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  capacity:
    storage: 8Gi
  storageClassName: local-path
  hostPath:
    path: /data/postgres-13

---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: awx-projects-volume
spec:
  accessModes:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Retain
  capacity:
    storage: 2Gi
  storageClassName: local-path
  hostPath:
    path: /data/projects
EOF

kubectl apply -f awx-pv.yml

Maintenant créons la déclaration de notre serveur AWX. L’operator se charge de créer l’ingress, donc modifier avec votre nom de domaine (hostname).

tee awx-deployment.yml<<EOF
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
  name: awx
spec:
  # These parameters are designed for use with AWX Operator 0.29.0
  # and AWX 21.6.0
  postgres_configuration_secret: awx-postgres-configuration
  postgres_storage_class: local-path
  postgres_storage_requirements:
    requests:
      storage: 8Gi
  projects_persistence: true
  garbage_collect_secrets: false
  projects_existing_claim: awx-projects-claim
  postgres_init_container_resource_requirements: {}
  postgres_resource_requirements: {}
  web_resource_requirements: {}
  task_resource_requirements: {}
  ee_resource_requirements: {}
  service_type: ClusterIP
  ingress_type: ingress
  hostname: awx.robert.local
  ingress_annotations: |
    kubernetes.io/ingress.class: traefik
EOF

kubectl apply -f awx-deployment.yml

Maintenant, vous allez devoir patienter que l’installation se termine, cela peut être long (plusieurs minutes). Vous pouvez vérifier que tout se passe bien.

Les pods sont ils en running :

kubectl get pods -l "app.kubernetes.io/managed-by=awx-operator"
NAME                   READY   STATUS    RESTARTS   AGE
awx-postgres-0         1/1     Running   0          80m
awx-685c7cd8f7-8dcz8   4/4     Running   0          79m

Les services sont ils déclarés :

kubectl get svc -l "app.kubernetes.io/managed-by=awx-operator"
NAME              TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
awx-postgres-13   ClusterIP   None            <none>        5432/TCP   29m
awx-service       ClusterIP   10.43.246.213   <none>        80/TCP     29m

Si vous avez des problèmes vous pouvez vérifier les logs des containers ou les événements :

kubectl logs -f deployments/awx-operator-controller-manager -c awx-manager
kubectl logs -f awx-6cf754b44b-zmlcj awx-web
kubectl logs -f awx-6cf754b44b-zmlcj awx-tasks
kubectl logs -f awx-6cf754b44b-zmlcj awx-ee
kubectl logs -f awx-postgres-13-0
kubectl get events

Accès à l’interface d’AWX depuis votre navigateur

Vous pouvez vous connecter à l’interface web via l’url http://'

Le user est admin et le mot de passe est stocké dans les secrets :

kubectl get secret awx-admin-password -o go-template='{{range $k,$v := .data}}{{printf "%s: " $k}}{{if not $v}}{{$v}}{{else}}{{$v | base64decode}}{{end}}{{"\n"}}{{end}}'

password: 4QZfWjot1JkrleSXvGnLZDXjr6oXWeoF

architecture kubernetes

Voilà vous avez Ansible AWX installé. La suite pour faire nos premiers pas sur AWX


Si vous avez apprécié cet article de blog, vous pouvez m'encourager à produire plus de contenu en m'offrant un café sur   Ko-Fi  . Vous pouvez aussi passer votre prochaine commande sur amazon, sans que cela ne nous coûte plus cher, via   ce lien  . Vous pouvez aussi partager le lien sur twitter ou linkedin via les boutons ci-dessous. Je vous remercie de votre soutien


Mots clés :

devops kubernetes tutorials ansible

Autres Articles


Commentaires: