Installer Ansible AWX sur un cluster k8s
Publié le :
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.gitcd 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=awxexport 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=$NAMESPACEgit checkout $RELEASE_TAG
Passons au déploiement de l’opérateur Kubernetes :
make deploycd 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 createdcustomresourcedefinition.apiextensions.k8s.io/awxbackups.awx.ansible.com createdcustomresourcedefinition.apiextensions.k8s.io/awxrestores.awx.ansible.com createdcustomresourcedefinition.apiextensions.k8s.io/awxs.awx.ansible.com createdserviceaccount/awx-operator-controller-manager createdrole.rbac.authorization.k8s.io/awx-operator-leader-election-role createdrole.rbac.authorization.k8s.io/awx-operator-manager-role createdclusterrole.rbac.authorization.k8s.io/awx-operator-metrics-reader createdclusterrole.rbac.authorization.k8s.io/awx-operator-proxy-role createdrolebinding.rbac.authorization.k8s.io/awx-operator-leader-election-rolebinding createdrolebinding.rbac.authorization.k8s.io/awx-operator-manager-rolebinding createdclusterrolebinding.rbac.authorization.k8s.io/awx-operator-proxy-rolebinding createdconfigmap/awx-operator-manager-config createdservice/awx-operator-controller-manager-metrics-service createddeployment.apps/awx-operator-controller-manager created
On vérifie que l’installation s’est correctement terminée. Vous devriez retrouver un pod :
kubectl get podNAME READY STATUS RESTARTS AGEawx-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 persistante l’installation, nous allons définir un Persistent Volume Claim :
tee awx-pvc.yml <<EOF---apiVersion: v1kind: PersistentVolumeClaimmetadata: name: awx-projects-claimspec: accessModes: - ReadWriteOnce volumeMode: Filesystem resources: requests: storage: 2Gi storageClassName: local-pathEOF
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: v1kind: PersistentVolumemetadata: name: awx-postgres-13-volumespec: accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain capacity: storage: 8Gi storageClassName: local-path hostPath: path: /data/postgres-13
---apiVersion: v1kind: PersistentVolumemetadata: name: awx-projects-volumespec: accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain capacity: storage: 2Gi storageClassName: local-path hostPath: path: /data/projectsEOF
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/v1beta1kind: AWXmetadata: name: awxspec: # 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: traefikEOF
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 AGEawx-postgres-0 1/1 Running 0 80mawx-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) AGEawx-postgres-13 ClusterIP None <none> 5432/TCP 29mawx-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-managerkubectl logs -f awx-6cf754b44b-zmlcj awx-webkubectl logs -f awx-6cf754b44b-zmlcj awx-taskskubectl logs -f awx-6cf754b44b-zmlcj awx-eekubectl logs -f awx-postgres-13-0kubectl get events
Accès à l’interface d’AWX depuis votre navigateur
Vous pouvez vous connecter à l’interface web via l’url **http://<votre-domaine>**
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
Voilà, vous avez Ansible AWX installé. La suite pour faire nos premiers pas sur AWX
Pour ceux qui veulent utiliser une BDD externe, j’ai publié une autre version de ce tuto : c’est par là