Installer Ansible AWX
AWX est la version Open-Source d'Ansible Automation Platform plus connue sous le nom d'Ansible Tower. AWX fournit une interface web ainsi q’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 notification, …
Nous allons voir ici comment installer AWX sur un cluster Kubernetes. Ca 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 persistent l’installation nous allons définir un Persistent Volume Claim :
tee awx-pvc.yml <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: static-data-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: local-path
resources:
requests:
storage: 5Gi
EOF
kubectl apply -f awx-pvc.yml
Maintenant créons la déclaration de notre serveur AWX. J’ai inclus quelques paramètres pour que cela passe dans un cluster limité en ressource. Si vous avez suffisamment de mémoire commenter les lignes *resource_requirements avant de l’appliquer
Vous pouvez aussi modifier le type de service pour que cela corresponde à votre besoin, si vous un load balancer par exemple.
tee awx-deployment.yml<<EOF
---
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
name: awx
spec:
web_resource_requirements:
requests:
cpu: 250m
memory: 128M
task_resource_requirements:
requests:
cpu: 250m
memory: 128M
ee_resource_requirements:
requests:
cpu: 200m
memory: 64M
service_type: nodeport
projects_persistence: true
projects_storage_access_mode: ReadWriteOnce
web_extra_volume_mounts: |
- name: static-data
mountPath: /var/lib/projects
extra_volumes: |
- name: static-data
persistentVolumeClaim:
claimName: static-data-pvc
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 ClusterIP None <none> 5432/TCP 82m
awx-service NodePort 10.43.67.122 <none> 80:30932/TCP 81m
Notez le port du service awx-service
(la seconde valeur) c’est elle que nous
allons utiliser pour accéder à l’interface web d’AWX.
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 get events
Accès à l’interface d’AWX depuis votre navigateur
Vous pouvez vous connecter à l’interface web via l’url http://IP-node:nodeport
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