## Déployer des applications Python dans un cluster OpenShift ### Capitole du Libre 2018 ![](https://i.imgur.com/OuMt8zg.png) #### Arthur Lutz (Logilab) ![](https://www.logilab.fr/file/2831/raw/logo-logilab.svg =100x) --- ## Introduction /me * Arthur Lutz * [![](https://social.logilab.org/system/custom_emojis/images/000/002/815/original/d91b01cc6bc88981.png =30x)<!-- .element style="border:0;margin:0" --> @arthurlutz](https://twitter.com/arthurlutz) * ![](https://social.logilab.org/system/custom_emojis/images/000/002/814/original/63c72d3387d84738.png =30x)<!-- .element style="border:0;margin:0" --> [@arthur@social.logilab.org ](https://social.logilab.org/@arthurlutz) * [Logilab](https://www.logilab.fr) * [Python Nantes](http://nantes.afpy.org/) ![](https://www.logilab.fr/file/2830/raw/20180109-_DSC3976.circle.png =100x) <!-- .element style="border:0;background:rgb(34,34,34)" --> --- ## Avertissement Ne brûlez pas les étapes * docker * docker-compose * coreos/rancher/docker swarm * openshift * kubernetes ? --- ## OpenShift Origin / OKD https://www.openshift.org/ ![](https://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/OpenShift-LogoType.svg/1200px-OpenShift-LogoType.svg.png =100x)<!-- .element style="border:0;margin:0" --> https://www.okd.io/ ``` OKD is a distribution of Kubernetes optimized for continuous application development and multi-tenant deployment. OKD adds developer and operations-centric tools on top of Kubernetes to enable rapid application development, easy deployment and scaling, and long-term lifecycle maintenance for small and large teams. ``` ![](https://www.okd.io/img/okd_logo.svg =200x)<!-- .element style="border:0;margin:0" --> --- ## OpenShift - fonctionnalités * interface web devant Kubernetes * outils pour les developpeurs * mécanismes de sécurité supplémentaires * déploiements sans coupure de service (plusieurs strategies: `Rolling`, `Recreate`, `A/B`) * healthchecks ! * [readyness probe](https://docs.okd.io/latest/dev_guide/application_health.html#dev-guide-application-health) : le conteneur tourne * [liveness probe](https://docs.okd.io/latest/dev_guide/application_health.html#dev-guide-application-health) : le service répond * ... et toutes les fonctionnalités de Kubernetes --- ## minishift https://github.com/MiniShift/minishift Un "cluster" openshift, d'un noeud dans une machine virtuelle ! --- ## *Nice to have* *Souvent possible aussi en docker/kubernetes mais facilité dans openshift* * Terminal dans le navigateur * Console de debug quand un conteneur ne démarre pas * Logs des builds partageables par URL --- ## s2image * repose sur un `requirements.txt` * repose sur une configuration `wsgi` (par défaut `gunicorn`) * configurable au `build` et au `run` (`ENV`) * [Documentation pour Python](https://docs.okd.io/latest/using_images/s2i_images/python.html), [source](https://github.com/openshift/source-to-image) * Python `3.5`, `3.4`, `3.3`, et `2.7` --- ## Django on openshift Comment livrer du django avec Postgresql https://github.com/sclorg/django-ex https://blog.openshift.com/migrating-django-applications-openshift-3/ --- ## s2image - Django * Quelques options spécifiques aux particularités de Django * `DISABLE_COLLECTSTATIC` * `DISABLE_MIGRATE` --- ## CubicWeb sur OpenShift Comment livrer une application CubicWeb ![](https://upload.wikimedia.org/wikipedia/commons/c/c5/CubicWeb_Logo_Spaced.svg)<!-- .element style="border:0;margin:0;background-color:white" --> ``` .s2i/environment APP_MODULE=cubicweb.pyramid:wsgi_application .s2i/bin/run script bash avec `cubicweb-ctl create` et `cubicweb-ctl db-init` (backporté depuis nos déploiements cubicweb dans docker) ``` --- ## REX - en dehors des demos/POC * Optimisations des `build` (eg. `numpy`) * ajout de `devpi` local, utilisation des `wheel` * Rollback if fails - OK pour logiciel, que faire pour les données ? * Courbe d'apprentissage `docker` / conteneurs --- ## Sécurité & OpenShift * metadonnées ajoutées aux images `docker` * user inexistant dans le conteneur (attention à `getpass.getuser()`) * possibilité de désactiver (mais pas forcément trivial) --- ## Self Service URLS * Les URL automatiques pour tester des contributions * S'inspirer de workflow type [netifly](https://www.netlify.com/) ou [funkwhale]() ([merge request](https://code.eliotberriot.com/funkwhale/funkwhale/merge_requests/435) et [site](http://docs-funkwhale-funkwhale-549-music-federation-documentation.preview.funkwhale.audio/federation/index.html)) --- ## Parallèles avec `jupyter` * inspirés des approches `PAAS` type `Heroku` * [repo2docker](https://github.com/jupyter/repo2docker) * "Turn git repositories into Jupyter enabled Docker Images" * voir [binder](https://mybinder.readthedocs.io/en/latest/using.html) --- [![](https://imgs.xkcd.com/comics/universal_install_script.png)](https://www.xkcd.com/1654/) --- ## Avantages OpenShift * Livraison continue * UI / UX pour appréhender des concepts nouveaux * Ecosystème d'exemples de deploiement dont on peut s'inspirer (comme [helm ](https://www.helm.sh/) coté kubernetes) --- ## Avantages OpenShift * Python first-class citizen * Healthchecks & maintien du service (SRE) * Couplage automatique avec `prometheus`, `istio`, `grafana` * Commencer avec l'interface web, continuer avec les outils en ligne de commande --- ## Inconvénients OpenShift * OpenShift difficile à installer et à administrer * Fortement orienté RedHat / CentOS / *IBM* * Documentation éparpillée et sur plusieurs versions * Ecosystème payant d'images RedHat (eg. [postgis](https://access.redhat.com/containers/?tab=overview#/registry.connect.redhat.com/crunchydata/crunchy-postgres-gis)) * Potentiellement des *gros* template en yaml --- ## Logilab recrute ! ![](https://www.logilab.fr/file/2622/raw) --- ## Fin * Merci de votre attention * Des questions ? Des compléments ? * Slides : [html](https://hackmd.logilab.org/p/H1Bi9Wn67#/) [pdf](http://slides.logilab.fr/2018/cdl2018_openshift.pdf) ![](https://www.logilab.fr/file/2831/raw/logo-logilab.svg =100x)<!-- .element style="border:0" -->
{}