XinCTO/premiers pas avec cloud foundry

Ecrit le Sat, 21 October 2017 15:30:01 +0000
1708 mots 9 minutes

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