Modéliser, configurer et gérer des services dans Azure avec Juju 2.x – comment connecter et utiliser Juju avec Azure
[Mise à jour le 24/12/2016]
Juju est un outil Open Source de modélisation, de configuration et de gestion de services développé par Canonical Ltd. (la société derrière Ubuntu). Juju permet de déployer (et de faire “scaler”) rapidement des logiciels / services sur différents types de serveurs / clouds. Parmi les solutions de cloud public fonctionnant avec Juju, il y a bien entendu Azure.
Juju fait clairement parti des solutions d’orchestration Cloud qui méritent d’y passer un peu de temps car son approche basée sur la modélisation de services et l’automatisation du déploiement est clairement un vrai pas en avant pour les IT / DevOps. L’objectif est d’accélérer la mise à disposition de workload applicatifs (sur des machines physiques, virtuelles ou dans des conteneurs) sans nécessiter des connaissances poussées dans chacun des composants utilisés. Pour cela, Juju fait appel à des Charms (une collection de fichiers YAML de configuration et une sélection de “hooks”) ou des Bundle. Les fonctionnalités intégrées permettant de faire scaler (up & down) sont également un aspect fondamental de la solution.
L’objectif de cet article est de détailler la configuration à faire pour utiliser et débuter l’utilisation d’Azure avec Juju 2.x
Je précise ici que je vais utiliser Juju 2.x avec des machines Linux car c’est à partir de cette version que le modèle ARM (Azure Ressource Manager) est supporté, les versions antérieures de Juju fonctionnant avec Azure ASM (Azure Service Manager) qui n’a aujourd’hui plus d’avenir.
A noter : Juju est disponible sur Linux, Mac OS X et Windows –> https://jujucharms.com/docs/devel/reference-releases (bien aller en bas de la page pour prendre la version 2.x et non la 1.25.x)
Pré-requis nécessaires :
- Avoir un abonnement Microsoft Azure (une version d’évaluation avec 170€ de crédits est disponible ici)
- Avoir un Azure Active Directory (si ce n’est pas le cas, j’ai montré la procédure de création d’un Azure AD dans la vidéo suivante à partir de la 14ème minute)
Etape 1 : Création et préparation d’une machine virtuelle Linux Ubuntu dans Azure
Se connecter au portal Azure et créer une VM Ubuntu (prendre la dernière version).
Une fois la VM déployée et en cours d’exécution, s’y connecter en SSH.
Créer une paire de clé SSH dans la VM :
ssh-keygen -t rsa -b 2048
Etape 2 : Installation de Juju 2.x
sudo add-apt-repository ppa:juju/devel
sudo apt update
sudo apt install juju
Etape 3 : Ajout d’un abonnement et de credentials Azure à Juju
Lister les fournisseurs de Cloud utilisables avec Juju
juju list-clouds
A noter au passage : les régions en Chine sont considérées comme un type de Cloud différent.
Lister les régions Azure et les endpoints associés
juju show-cloud azure
Si la liste des régions Azure n’est pas à jour (ce qui est possible car des nouvelles régions comme UK, Canada ou la Corée du Sud seront disponibles prochainement), il est possible de mettre à jour cette liste via la commande :
juju update-clouds
Pour lister les informations de sécurité (credentials) que Juju va utiliser pour parler avec des clouds tels que Azure, utiliser la commande suivante :
juju list-credentials
Pour l’instant, il n’y a pas de credentials disponibles pour Azure. La suite des opérations consiste donc à connecter Juju à au moins un abonnement Azure.
Pour cela, il faut au préalable installer l’outil de gestion en ligne de commande “AzureCLI”. Celui-ci s’appuie sur et nécessite nodeJS.
sudo apt-get install -y nodejs-legacy npm
sudo npm install -g azure-cli
Basculer le mode de gestion d’AzureCLI en mode ARM (Azure Resource Manager). Ceci est nécessaire pour pouvoir utiliser les commandes liées à Azure Active Directory.
azure config mode arm
Se connecter à l’abonnement Azure
azure login
Ouvrir un navigateur et aller à l’adresse https://aka.ms/devicelogin copier le code donné par la commande et se connecter avec son compte d’administration de l’abonnement Azure.
Cliquer sur Continue et saisir ses identifiants (Compte Microsoft, Compte Azure AD ou compte fédéré via ADFS).
Lister les resource providers déclarés sur l’abonnement Azure
azure provider list
Bien vérifier que les providers Compute, Network et Storage d’Azure ARM sont déclarés (Registered) pour l’abonnement Azure. Si ils sont en Unregistrered, alors les déclarer avec les commandes suivantes (Merci à Nicolas de Canonical pour cette information éliminant un problème que je n’avais pas eu mais qui peut arriver).
azure provider register Microsoft.Compute
azure provider register Microsoft.Network
azure provider register Microsoft.Storage
Lister les abonnements associés à l’administrateur Azure
azure account list
Noter l’identifiant de l’abonnement et le mettre dans une variable
SUB_ID=f885b031-4059-xxxx-xxxx-eb77ae16cc26
Choisir un mot de passe fort et le mettre dans une variable
APP_PASSWORD=Monmotdepasse2016
Créer dans l’Azure Active Directory associé à l’abonnement une application (ici l’URL saisie n’a pas vraiment d’importance)
azure ad app create –name “stan3ubuntu.example.com” –home-page “http://stan3ubuntu.example.com” –identifier-uris “http://stan3ubuntu.example.com” –password $APP_PASSWORD
Noter l’identifiant de l’application générée et l’affecter à une variable :
APP_ID=0ed3dc9c-eaf6-4912-a5a7-a74673ad5034
Création d’un Service Principal pour l’application (=en gros un compte de service)
azure ad sp create -a $APP_ID
Noter l’identifiant de l’objet créé et l’affecter dans une variable
OBJ_ID=15126205-7d3c-4143-9973-ad9999a8c314
Assigner un rôle de propriétaire
azure role assignment create –objectId $OBJ_ID -o Owner -c /subscriptions/$SUB_ID/
Lister les comptes Azure
azure account show
Noter l’identifiant du Tenant (1 Tenant peut avoir plusieurs abonnement) et l’affecter dans une variable
TENANT_ID=72f988bf-86f1-41af-91ab-2d7cd011db47
Tester que l’authentification faite avec le SPN créé au préalable fonctionne
azure login -u “$APP_ID” -p “$APP_PASSWORD” –service-principal –tenant “$TENANT_ID”
juju add-credential azure
Lister les credentials disponibles dans Juju
juju list-credentials
Sélectionner le credential à utiliser par défaut dans Juju
juju set-default-credential azure squasta@microsoft.com
Etape 4 : Créer un nouveau controlleur Juju dans une région Azure
juju bootstrap mycloud azure/northeurope
(Note : il semblerait que la commande ait changé : juju bootstrap azure mycloud)
Une fois le déploiement terminé (cela prend entre 10 et 15 minutes sur des instances de type A2 ou D2), il est possible de lister les contrôleurs Juju :
juju list-controllers
Pour l’instant, aucun applicatif n’a été déployé :
juju status
Il est intéressant d’aller dans la console Azure pour visualiser les ressources créées par le bootstrap de ce contrôleur Juju 2.x. On peut voir qu’il y a eu la création de 2 groupes de ressources (1 par modèle) avec une convention de nom du type :
juju-admin-model-xxxxxxxxxxxxxxxx ou juju-controller-model-xxxxxxxxxxxx: c’est le groupe de ressources Azure contenant les ressources de la VM JUJU controller
juju-default-model-xxxxxxxxxxxxxxxx : c’est le groupe de ressources Azure contenant les ressources des VM de applicatifs déployés
Note : il est possible de créé des modèles Juju additionnels, ce qui créera dans Azure des groupes de ressources avec des noms du type juju-nomdumodele-xxxxxxxxxxxxxxx
Dans cet exemple, on peut voir les 2 groupes de ressources Azure créés dans la région North Europe
Le groupe de ressource juju-controller-model-xxxx contient les ressources nécessaire à la VM Juju Controller.
Le groupe de ressource juju-default-model-xxxx contient pour l’instant uniquement : un compte de stockage Azure, un VNet Azure et un Network Security Group.
Etape 5 : déploiement d’une application avec Juju 2.x
Ici, comme exemple simple, je vais prendre le même que Canonical dans sa documentation : un Mediawiki (modèle basé sur 2 machines : A mediawiki et un MySQL)
juju deploy mediawiki-single
Pour vérifier le status d’avancement du déploiement :
juju status
Attendre un peu que tout soit opérationnel (vérifier régulièrement avec juju status)
juju gui –show-credentials
Pour voir la GUI de Jujun se connecter à la page Web
Retourner dans la console Azure pour voir les ressources créées. Regarder les Network Security Group du groupe de ressources où à été déployé le service –> nornalement, seul SSH est autorisé en entrée.
Ouvrir le port TCP 80 via une entrée supplémentaire à la table des NSG via la commande :
juju expose mediawiki
Voir l’adresse IP publique du mediawiki
Se connecter au mediawiki
Voilà maintenant, il ne reste plus qu’à continuer sur Juju avec des services plus complexes.
Pour aller plus loin avec Juju:
Deploying applications : https://jujucharms.com/docs/devel/charms-deploying
Lire aussi : https://jujucharms.com/docs/2.0/help-azure#manually-adding-credentials
karim benahmed
On peut faire plus simple sur les credentials :
$juju add-credential azure
– prendre un nom de credential de son choix
Puis laisser la section “interactive” avec un simple retour chariot
On est alors prié d’ouvrir la page https://login.windows.net/common/oauth2/deviceauth avec entrée du code affiché sur son terminal dans celle-çi
Il y a alors la configuration automatique de l’application “JuJu CLI” et on peut procéder à un “juju bootstrap”
Plus d’infos à : https://jujucharms.com/docs/2.0/help-azure
squastana
Merci pour ce complément d’informations 🙂