[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 :

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

Juju 2 - 28

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

Stanislas Quastana

  1. 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

Leave a Reply to squastana Cancel reply