premiers pas avec cloud foundry
Le cloud ne se résume pas à des applications toute faites et de l’IAAS, non, il faut aller vers du service notamment pour le développement logiciel. Je vous propose dans ce billet de mettre en place une petite infrastructure cloud à base de Cloud Foundry pour faire quelques travaux de développement en python.
Un bon moyen pour accélère la transformation digitale de l’entreprise est de laisser les développeurs avec le maximum de liberté pour faire leur expérimentation et travailler. Certes il faudra pour la production revenir à des standards d’exploitabilité et de maintien en conditions opérationnelles, mais pour les phases amont, laissons-leur de l’air.
Cloud Foundry
Si vous ne connaissez pas déjà cette solution, il faut absolument y jeter un oeil. Un moyen simple d’utiliser un cloud de développement, recette et de production avec comme mot d’ordre l’autonomie laissée aux utilisateurs. Quelle que soit votre plate-forme d’hébergement de coeur, Cloud Foundry vous propose un moyen agnostique de l’utiliser afin d’y héberger vos applications modulaires. Il se charge de vous proposer la gestion des applications, du réseau, du partage de charge, mais aussi d’un certain nombre de solutions middle comme la base de données SQL, les systèmes clé/valeur ou les systèmes d’indexation et recherche.
Préliminaires
Afin de démarrer votre cloud interne, je vous propose d’utiliser la solution de Pivotal qui propose un VM clé en main à déployer sur Virtualbox et le client cf
(de chez Cloud Foundry).
Créez un compte chez Pivotal, il vous sera utile par la suite pour installer l’environnement contenu dans la VM.
Munissez-vous au préalable d’une version récente de Virtualbox et installez là.
L’interface ligne de commande
L’interface est disponible sur le github de Cloud Foundry pour votre OS préféré, dans le cas de cet article, je l’ai installé sur mon Windows 10. Le fichier porte un nom du style : cf-cli-installer_6.32.0_winx64.zip
.
Un fois installé, vous devez avoir accès via une commande (ne pas utiliser d’autre émulateur que celui de l’OS) :
1C:\>cf -v
2cf version 6.32.0+0191c33d9.2017-09-26
Installation de la VM Cloud Foundry de Pivotal
Pour simplifier notre usage nous allons utiliser la solution PCF de Pivotal. On commence par installer le PCF Dev directement à partir du site Pivotal. L’installation de ce module surcharge la commande cf
et va permettre le téléchargement et l’import de la VM dans Virtualbox précédemment installé.
1C:\>cf dev version
2PCF Dev version 0.28.0 (CLI: 5cda315, OVA: 0.547.0)
Il est maintenant temps d’installer la VM, pour cela il va falloir un peu de patience puisque l’ensemble du fichier OVA va être téléchargé et installé, ainsi que l’ensemble de la configuration de la machine virtuelle dans Virtualbox. L’authentification demandée est celle de votre compte Pivotal crée précédemment :
La VM dans Virtualbox se nomme pcfdev-v0.547.0
(cf version de l’OVA dans cf dev version
), 1 vCPU, 4G de RAM (sur les 8 de mon PC), 60G de disque, 2 interfaces réseau dont une sur le réseau 192.168.11.0/24 dont les adresses seront automatiquement résolues dans le domaine local.pcfdev.io
. Si votre réseau local utilise ce subnet, il faudra prendre un peu de temps pour contourner ce point. Le système d’exploitation est Ubuntu, il sera possible une fois installée et démarrée d’y avoir accès.
Le fichier OVA de description de la VM fait environ 8G, il faudra un peu de patience pour son téléchargement et l’installation.
Une fois la VM créée, elle devrait démarrer et finaliser son installation, plusieurs redémarrages peuvent être observés. Le démarrage de l’ensemble des services peut être assez long, soyez patients.
1C:\>cf dev start
2Using existing image.
3Allocating 4056 MB out of 8112 MB total system memory (4250 MB free).
4Importing VM...
5Starting VM...
6Provisioning VM...
7Waiting for services to start...
87 out of 58 running
97 out of 58 running
107 out of 58 running
117 out of 58 running
1247 out of 58 running
1358 out of 58 running
14 _______ _______ _______ ______ _______ __ __
15| || || | | | | || | | |
16| _ || || ___| | _ || ___|| |_| |
17| |_| || || |___ | | | || |___ | |
18| ___|| _|| ___| | |_| || ___|| |
19| | | |_ | | | || |___ | |
20|___| |_______||___| |______| |_______| |___|
21is now running.
22To begin using PCF Dev, please run:
23 cf login -a https://api.local.pcfdev.io --skip-ssl-validation
24Apps Manager URL: https://apps.local.pcfdev.io
25Admin user => Email: admin / Password: admin
26Regular user => Email: user / Password: pass
Sur mon PC, tout en faisant d’autres choses en attendant, ce processus d’installation a pris environ 40 minutes. Un redémarrage prendra ensuite environ 10 minutes, en ayant passé également le nombre de vCPU à 2 pour améliorer la fluidité de l’ensemble.
Connectons nous
Le cloud est opérationnel, mais nous ne sommes pour l’instant par en mesure d’échanger avec lui, une connexion est nécessaire, nous utiliserons le compte standard (user
) donc les caractéristiques sont récupérables avec la commande cf dev status
:
1C:\>cf dev status
2Running
3CLI Login: cf login -a https://api.local.pcfdev.io --skip-ssl-validation
4Apps Manager URL: https://apps.local.pcfdev.io
5Admin user => Email: admin / Password: admin
6Regular user => Email: user / Password: pass
La connexion s’effectue avec cf login
1C:\>cf login -a https://api.local.pcfdev.io --skip-ssl-validation
2API endpoint: https://api.local.pcfdev.io
3
4Email> user
5Password> pass
6Authenticating...
7OK
8
9Targeted org pcfdev-org
10
11Targeted space pcfdev-space
12
13API endpoint: https://api.local.pcfdev.io (API version: 2.82.0)
14User: user
15Org: pcfdev-org
16Space: pcfdev-space
Première application
Maintenant que notre cloud est disponible, en avant pour y publier une application. J’ai choisi pour la simplicité de lecture un code en python utilisant le moteur Flask de publication web, mais vous trouverez plein d’exemples différents sur la toile.
Code de l’application
Le source de l’application (helloworld.py
) retourne simplement un message lors de l’interrogation de la page de garde du site, présente également le port TCP utilisé en interne, le numéro de processus et un compteur qui s’incrémente à chaque appel de la page.
1from flask import Flask, make_response
2import os
3
4app = Flask(__name__)
5
6iPort = int(os.getenv("PORT"))
7iPid = int(os.getpid())
8iCount = 0
9
10@app.route('/')
11def hello_world():
12 global iCount
13 iCount+=1
14 _s = 'Hello World! I am running on port {} and pid {}, count={}'
15 return make_response(_s.format(str(iPort), str(iPid), str(iCount)), 200)
16
17if __name__ == '__main__':
18 app.run(host='0.0.0.0', port=iPort)
En complément et pour que l’installation sur le cloud se passe bien, nous ajoutons le fichier requirements.txt
qui conditionne l’installation de Flask et de son écosystème :
Enfin, nous ajoutons la commande conditionnant le démarrage de notre application :
1web: python helloworld.py
Ces 3 fichiers sont à déposer dans un répertoire sur votre poste de travail.
Installation de l’application
Maintenance que nous avons le code de notre première application, installons la sur le cloud :
1C:\hello-world>cf push hello-world --no-start
2Creating app hello-world in org pcfdev-org / space pcfdev-space as user...
3OK
4
5Using route hello-world.local.pcfdev.io
6Binding hello-world.local.pcfdev.io to hello-world...
7OK
8
9Uploading hello-world...
10Uploading app files from: C:\Users\achau\Desktop\python-test
11Uploading 846B, 3 files
12Done uploading
13OK
Notre application est désormais installée, dans un état stoppé et dispose des ressources par défaut de 256M de RAM et 512M de disque.
1C:\hello-world>cf apps
2Getting apps in org pcfdev-org / space pcfdev-space as user...
3OK
4
5name requested state instances memory disk urls
6hello-world stopped 0/1 256M 512M hello-world.local.pcfdev.io
Demarrage
Il est temps d’instancier notre application afin de pouvoir l’utiliser. Cette première action peut nécessiter un peu de temps car les build pack seront installés pour l’ensemble des languages (ruby, go, python, java, nodejs, …), les prochaines fois ce sera plus rapide.
1C:\hello-world>cf start hello-world
2[...]
3 state since cpu memory disk details
4#0 running 2017-10-21 05:54:18 PM 0.0% 19.3M of 256M 114.2M of 512M
En ouvrant dans un navigateur http://hello-world.local.pcfdev.io
, on récupère le résultat de notre programme, à chaque rechargement de la page le compteur doit présenter une valeur s’incrémentant.
Ajustements des capacités
On peut constater que l’utilisation des ressources n’est pas adaptée, ni en mémoire, ni en disque. Ajustons cela un peu plus bas (200M de disque et 32M de mémoire).
1C:\hello-world>cf scale hello-world -k 200M -m 32M
2[...]
3 state since cpu memory disk details
4#0 running 2017-10-21 06:00:15 PM 0.1% 19.3M of 32M 114.2M of 200M
Après un redémarrage de l’application, le nouvelles valeurs sont appliquées.
Un peu de log
L’accès aux logs des applications dans le cloud est toujours une question importante, pourtant c’est très pratique pour les développeurs et les exploitants. La commande cf logs hello-world
vous permet d’accéder au fil de log, il propose par défaut les logs du moteur web et les erreurs de votre code s’il y en avait.
Elasticité horizontale
Et oui, on peut et assez simplement ajouter ou diminuer le nombre de moteur de notre application, pour peu que le code produit soit compatible avec ce pattern d’architecture. La commande scale va nous permettre d’effectuer cet ajustement. Par exemple en passant à 2 instance :
1C:\hello-world>cf scale hello-world -i 2
2Scaling app hello-world in org pcfdev-org / space pcfdev-space as user...
3OK
4
5C:\hello-world>cf app hello-world
6Showing health and status for app hello-world in org pcfdev-org / space pcfdev-space as user...
7
8name: hello-world
9requested state: started
10instances: 2/2
11usage: 32M x 2 instances
12routes: hello-world.local.pcfdev.io
13last uploaded: Sat 21 Oct 18:11:01 CEST 2017
14stack: cflinuxfs2
15buildpack: python 1.5.18
16
17 state since cpu memory disk details
18#0 running 2017-10-21T16:11:59Z 0.1% 26.6M of 32M 108.1M of 200M
19#1 running 2017-10-21T16:16:06Z 0.0% 20.4M of 32M 108M of 200M
Chaque rechargement de page vous fait passer d’une instance python à l’autre, les compteurs permettent de valider la balance. Le processus étant executé dans un container, l’id du processus peut être identique sur les deux instances.
Interface d’administration
Pour finir cette petite introduction à Cloud Foundry, allez faire un tour sur l’interface web d’administration à partir de votre navigateur sur le portal, vous retrouverez sur un format un peu différent les informations que vous pouvez manipuler avec les commandes en ligne, cela peut être rassurant et propose une vue consolidée assez pratique.
Vous pourrez constater qu’il y a encore beaucoup de choses à explorer, parmi celles-ci j’ai noté pour les prochaines fois : la gestion des spaces (pour des environnements par exemple) avec les droits associés pour chaque utilisateurs, l’utilisation de docker, les certificats de sécurité.
A suivre donc…
Photo Johny Goerend