Ce guide explique comment déployer AWX, une interface Web pour Ansible Tower, en utilisant Kind (Kubernetes in Docker) et Docker Compose. Nous allons utiliser un fichier Docker Compose pour orchestrer le déploiement et exécuter AWX à l’aide de l’AWX Operator.
Table of Contents
Arborescence des fichiers
Voici l’arborescence des fichiers utilisée pour ce projet :
/awx-kind-setup
|-- docker-compose.yml
|-- kind-config
|-- scripts
|-- setup-awx.sh
Étape 1 : Fichier Docker Compose
Le fichier docker-compose.yml
configure deux services :
- kind : Un conteneur Kind pour le cluster Kubernetes.
- setup-script : Un conteneur qui exécute un script pour configurer le cluster et installer AWX.
Créez un fichier nommé docker-compose.yml
avec le contenu suivant :
version: '3.8'
services:
kind:
image: kindest/node:v1.24.0
container_name: awx-kind-cluster
privileged: true
command: ["sh", "-c", "sleep infinity"]
volumes:
- ./kind-config:/root/.kube/kind-config
ports:
- "6443:6443"
setup-script:
image: bitnami/kubectl:latest
container_name: awx-setup
user: root
network_mode: host
depends_on:
- kind
volumes:
- ./scripts:/scripts
- ./kind-config:/root/.kube/kind-config
- /var/run/docker.sock:/var/run/docker.sock
entrypoint: ["/scripts/setup-awx.sh"]
Étape 2 : Fichier Kind Config
Le fichier de configuration Kind définit les paramètres du cluster, y compris les mappages de ports pour s’assurer que AWX est accessible via le port 80 de l’hôte.
Créez un fichier nommé kind-config
avec le contenu suivant :
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
extraPortMappings:
- containerPort: 30080
hostPort: 80
protocol: TCP
- role: worker
Étape 3 : Script de configuration de AWX
Le script setup-awx.sh
gère l’installation et la configuration d’AWX sur le cluster Kubernetes. Ce script s’exécute dans le conteneur setup-script
après que le cluster Kind a été démarré.
Créez un fichier nommé setup-awx.sh
dans le répertoire scripts
avec le contenu suivant :
#!/bin/bash
# Correction du problème d'apt : recréer le répertoire et réinitialiser le cache
echo "Réinitialisation du cache apt..."
mkdir -p /var/lib/apt/lists/partial
chmod 755 /var/lib/apt/lists/partial
rm -rf /var/lib/apt/lists/*
# Vérifier si apt-get est disponible et initialiser si nécessaire
if ! command -v apt-get &> /dev/null; then
echo "apt-get n'est pas disponible dans ce conteneur."
else
echo "Mise à jour de la liste des paquets et installation des dépendances nécessaires..."
apt-get update && apt-get install -y curl apt-transport-https ca-certificates lsb-release gnupg
fi
# Ajouter la clé publique Docker et configurer le dépôt
echo "Ajout de la clé publique Docker..."
mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
chmod a+r /etc/apt/keyrings/docker.asc
# Ajouter le dépôt Docker officiel pour Debian Bullseye
echo "Ajout du dépôt Docker pour Debian Bullseye..."
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
# Mettre à jour la liste des paquets et installer Docker CLI
echo "Mise à jour de la liste des paquets et installation de Docker CLI..."
apt-get update && apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Installer curl si ce n'est pas déjà présent
if ! command -v curl &> /dev/null; then
echo "curl n'est pas installé. Installation de curl..."
apt-get update && apt-get install -y curl
echo "curl a été installé avec succès."
else
echo "curl est déjà installé."
fi
# Vérifier si Kind est installé, sinon l'installer
if ! command -v kind &> /dev/null; then
echo "Kind n'est pas installé. Installation de Kind..."
curl -Lo /usr/local/bin/kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
chmod +x /usr/local/bin/kind
echo "Kind a été installé avec succès."
else
echo "Kind est déjà installé."
fi
# Créer un cluster Kind avec le fichier de configuration spécifié
kind create cluster --config=/root/.kube/kind-config
echo "Vérification de la disponibilité du cluster Kubernetes..."
until kubectl get nodes &>/dev/null; do
echo "Le cluster Kubernetes n'est pas encore prêt. Attente de 10 secondes..."
sleep 10
done
echo "Le cluster Kubernetes est prêt."
# Configurer le contexte du namespace pour AWX
echo "Configuration du contexte de namespace pour AWX..."
kubectl config set-context --current --namespace=awx
# Télécharger et configurer l'AWX Operator
echo "Téléchargement et configuration de l'AWX Operator..."
cat <<EOF > kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- github.com/ansible/awx-operator/config/default?ref=2.7.2
- awx-demo.yml
images:
- name: quay.io/ansible/awx-operator
newTag: 2.7.2
namespace: awx
EOF
# Appliquer la configuration de Kustomize
kubectl apply -k .
# Créer le fichier AWX CR pour déployer l'instance AWX
echo "Création du fichier de configuration AWX CR..."
cat <<EOF > awx-demo.yml
apiVersion: awx.ansible.com/v1beta1
kind: AWX
metadata:
name: awx-demo
spec:
service_type: nodeport
nodeport_port: 30080
EOF
# Déployer l'instance AWX
echo "Déploiement de l'instance AWX..."
kubectl apply -k .
echo "Déploiement d'AWX terminé. Vous pouvez accéder à AWX à l'adresse http://localhost"
Étape 4 : Exécution
Pour lancer le processus, exécutez la commande suivante dans le répertoire contenant le fichier docker-compose.yml
:
docker-compose up
Ce processus démarre les conteneurs définis dans le fichier Docker Compose, crée le cluster Kind, installe l’AWX Operator et déploie l’instance AWX.
Accéder à l’interface d’AWX et récupérer le mot de passe admin
Une fois le déploiement d’AWX terminé, vous pouvez accéder à l’interface web d’AWX en ouvrant votre navigateur et en allant à l’adresse suivante :
http://localhost
L’interface d’AWX devrait s’afficher, vous demandant de vous connecter.
Pour obtenir le mot de passe initial du compte admin, vous devez utiliser la commande kubectl
suivante. Cette commande lit les logs du pod de l’AWX Operator pour extraire le mot de passe généré automatiquement :
kubectl get secret awx-demo-admin-password -o jsonpath="{.data.password}" -n awx | base64 --decode
- Explication :
awx-demo-admin-password
est le secret généré par l’AWX Operator qui contient le mot de passe admin.base64 --decode
décode le mot de passe qui est stocké au format base64.
Cette commande vous retournera le mot de passe admin que vous pourrez utiliser pour vous connecter à l’interface web d’AWX.
Conclusion
Avec cette configuration, vous avez déployé avec succès AWX sur un cluster Kubernetes Kind à l’aide de Docker Compose et de scripts automatisés. Cette méthode fournit une solution modulaire et facile à reproduire pour le déploiement et les tests d’AWX.