premiers pas avec cloud foundry

DIY
durée du labo : 25 min
  1. 1. Cloud Foundry
  2. 2. Préliminaires
  3. 3. L’interface ligne de commande
  4. 4. Installation de la VM Cloud Foundry de Pivotal
  5. 5. Connectons nous
  6. 6. Première application
    1. 6.1. Code de l’application
    2. 6.2. Installation de l’application
    3. 6.3. Demarrage
    4. 6.4. Ajustements des capacités
    5. 6.5. Un peu de log
    6. 6.6. Elasticité horizontale
  7. 7. Interface d’administration
  8. 8. à voir aussi

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

1
2
C:\>cf -v
cf 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é.

1
2
C:\>cf dev version
PCF 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.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
C:\>cf dev start
Using existing image.
Allocating 4056 MB out of 8112 MB total system memory (4250 MB free).
Importing VM...
Starting VM...
Provisioning VM...
Waiting for services to start...
7 out of 58 running
7 out of 58 running
7 out of 58 running
7 out of 58 running
47 out of 58 running
58 out of 58 running
_______ _______ _______ ______ _______ __ __
| || || | | | | || | | |
| _ || || ___| | _ || ___|| |_| |
| |_| || || |___ | | | || |___ | |
| ___|| _|| ___| | |_| || ___|| |
| | | |_ | | | || |___ | |
|___| |_______||___| |______| |_______| |___|
is now running.
To begin using PCF Dev, please run:
cf login -a https://api.local.pcfdev.io --skip-ssl-validation
Apps Manager URL: https://apps.local.pcfdev.io
Admin user => Email: admin / Password: admin
Regular 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 :

1
2
3
4
5
6
C:\>cf dev status
Running
CLI Login: cf login -a https://api.local.pcfdev.io --skip-ssl-validation
Apps Manager URL: https://apps.local.pcfdev.io
Admin user => Email: admin / Password: admin
Regular user => Email: user / Password: pass

La connexion s’effectue avec cf login

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
C:\>cf login -a https://api.local.pcfdev.io --skip-ssl-validation
API endpoint: https://api.local.pcfdev.io
Email> user
Password> pass
Authenticating...
OK
Targeted org pcfdev-org
Targeted space pcfdev-space
API endpoint: https://api.local.pcfdev.io (API version: 2.82.0)
User: user
Org: pcfdev-org
Space: 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.

helloworld.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from flask import Flask, make_response
import os
app = Flask(__name__)
iPort = int(os.getenv("PORT"))
iPid = int(os.getpid())
iCount = 0
@app.route('/')
def hello_world():
global iCount
iCount+=1
_s = 'Hello World! I am running on port {} and pid {}, count={}'
return make_response(_s.format(str(iPort), str(iPid), str(iCount)), 200)
if __name__ == '__main__':
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 :

requirements.txt
1
Flask

Enfin, nous ajoutons la commande conditionnant le démarrage de notre application :

Procfile
1
web: 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 :

1
2
3
4
5
6
7
8
9
10
11
12
13
C:\hello-world>cf push hello-world --no-start
Creating app hello-world in org pcfdev-org / space pcfdev-space as user...
OK
Using route hello-world.local.pcfdev.io
Binding hello-world.local.pcfdev.io to hello-world...
OK
Uploading hello-world...
Uploading app files from: C:\Users\achau\Desktop\python-test
Uploading 846B, 3 files
Done uploading
OK

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.

1
2
3
4
5
6
C:\hello-world>cf apps
Getting apps in org pcfdev-org / space pcfdev-space as user...
OK
name requested state instances memory disk urls
hello-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.

1
2
3
4
C:\hello-world>cf start hello-world
[...]
state since cpu memory disk details
#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).

1
2
3
4
C:\hello-world>cf scale hello-world -k 200M -m 32M
[...]
state since cpu memory disk details
#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 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
C:\hello-world>cf scale hello-world -i 2
Scaling app hello-world in org pcfdev-org / space pcfdev-space as user...
OK
C:\hello-world>cf app hello-world
Showing health and status for app hello-world in org pcfdev-org / space pcfdev-space as user...
name: hello-world
requested state: started
instances: 2/2
usage: 32M x 2 instances
routes: hello-world.local.pcfdev.io
last uploaded: Sat 21 Oct 18:11:01 CEST 2017
stack: cflinuxfs2
buildpack: python 1.5.18
state since cpu memory disk details
#0 running 2017-10-21T16:11:59Z 0.1% 26.6M of 32M 108.1M of 200M
#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

Alexandre Chauvin Hameau

2017-10-21T15:30:01