%TOC% ---+ La nouvelle infrastructure du JMMC La nouvelle infrastructure est basée sur un ensemble de vm, faisant tourner des services indépendants les uns des autres ---+ infos projet * *Wiki* : =http://www.jmmc.fr/twiki/bin/view/Jmmc/Software/JmmcInfra= * *Gestion code source* : GIT avec pour commencer le dépôt initialement créé par Raphael : =https://github.com/sxpert/jmmc= * *Tickets* : [[http://trac.jmmc.fr/jmmc-sw/report/29][trac]] ---+ acces et administration de l'infrastructure L'infrastructure repose sur les 3 catégories de machines: * [[#Controleur][1 controleur (administration centralisée)]] * 1 frontal (interface avec l'exterieur) extensible à plusieurs dans le futur si besoin * N noeuds de services * La configuration se fait uniquement à travers un ensemble de scripts ansible, qui reconfigurent entierement l'infrastructure, en fonction de ce qu'il est nécessaire de modifier. * pour reconfigurer les services, il suffit de lancer le script ansible qui effectuera toutes les taches nécessaires à partir de la machine controlleur<br/> ces scripts ansible réalisent les operations suivantes : * installation de la vm / container * configuration d'un compte de service avec la clé publique ssh du controlleur, ce compte a les acces sudo nécessaires, afin que le compte de service du controlleur puisse lancer des scripts sur la nouvelle machine * installation / compilation des logiciels a utiliser dans le container pour offir le service * configuration du service a proposer * ajout du service dans la configuration du frontal haproxy * afin d'assurer la cohérence de la configuration a tout moment, il est recommandé de ne pas modifier les configurations des machines ou containers portant les applications a la main. ---++ configuration de service supplémentaires * écrire les scripts ansible nécessaires au déploiement de la nouvelle application * des roles sont fournis (...) afin de permettre de générer les parties communes entre toutes les applis (notamment la génération automatique du conteneur de l'appli) * une fois testé le script ansible, mettre a jour le repository sur le compte de service du controlleur avec git pull * lancer le script ansible, l'application sera automatiquement déployée ---+ Méthodologie * Le developpement en équipe se fait par une étape d'étude qui passe par une revue de design avant l'implémentation * la documentation doit être la plus légère possible: * ne pas paraphraser le code * mentionner toute logique non explicite (par ex. justifier une configuration avec des valeurs de priorités différentes - pourquoi - ) * Les distributions linux sont à retenir en fonction des préférences des acteurs OSUG : debian * avec une version stable la plus récente possible * TBD indiquer comment on procéde dès que les configurations / versions ne suivent plus des exigences fonctionnelles * les paquets seront limités à ceux fournit en standard par la distribution * en cas de version non suffisante, une nouvelle version peut-être installée, mais la justification devra être mentionnée dans la documentation (au minimum un commentaire WARNING ou TODO ) Ce que l'on souhaite: * automatiser les deploiements suivant des conventions existantes * pouvoir créer des miroirs de l'infrastructure pour assurer une redondance géographique de certains services Ce que l'on craint: * perdre l'accès et le contrôle des services à comparer d'intervention plus manuelles sur des serveurs bien identifiés * limiter le champ d'intervention aux seuls experts des techniques employées (lecture d'un script vs d'une configuration style pom.xml) ---+ mise en oeuvre pratique dans le cadre de l'osugdc (préprod) en attendant que les services de l'osugdc soient en mesure de proposer une infrastructure suffisamment souple, un prototype a 3 machines virtuelles a été mis en place ---++ machines virtuelles * trois machines virtuelles ont été créées a la main * jmmc-ctrl-1.ujf-grenoble.fr<br/> machine virtuelle faisant office de controlleur * jmmc-fe-1.ujf-grenoble.fr<br/> machine virtuelle faisant office de front end * jmmc-host-1.ujf-grenoble.fr<br/> machine virtuelle faisant office d'hote pour les applications * des comptes de service "sysjmmc" ont été créés par l'équipe de l'osugdc. ces comptes de service ont l'acces sudo adéquat * une clé ssh a été créée sur le controlleur et installée sur le compte de service des deux autres machines. ---++ utilisation de l'infrastructure * pour effectuer le déploiement de nouvelles applications, ou la mise a jour d'une application existante, se connecter sur le compte de service controlleur , mettre a jour le repository git, et lancer le script adéquat --- ---++ Controleur * *host*: =jmmc-ctrl-1.jmmc.fr= * *accés*: =ssh= * *compte de service*: =sysjmmc= Remarque: chaque utilisateur ayant nécessité d'accès à cette machine doit fournir la partie publique de sa clé ssh à jmmc-tech-group (de préférence ed25519) ---++ Frontal * a base de HAProxy <br/> l'installation sur la debian wheezy nécessite l'ajout de la ligne <br/> deb http://ftp.fr.debian.org/debian wheezy-backports main<br/> deb http://ftp.fr.debian.org/debian wheezy-backports-sloppy main<br/> au fichier /etc/apt/sources.list * la configuration ---++ Les noeuds de services ---+++ Site Web * Rajouter ici le point d'entrée vers le code ansible... ---+++ à compléter... ---+ compilation des softs la compilation des logiciels java (pour l'instant seul OIFitsExplorer a été testé) se déroule de la maniere suivante : * configuration du front-end afin d'accéder au serveur web des apps [jmmc-frontend.yml] * (mettre en place une vm) [ role jmmc-vm ] * configurer le haproxy [ role fe-haproxy-srv ] * installer les packages haproxy * pour chaque service défini, générer un morceau de fichier de config * assembler tous les morceaux et relancer le service haproxy avec la nouvelle config * compilation de l'app [ jmmc-compile.yml - role jmmc-compile-app] * installer des dépendances * installer la configuration de maven (avec le certificat pour signer) * compiler les applis (pour l'instant, seules les apps basées sur java avec maven, une seule app/release a la fois pour l'instant) * installation du parent-pom * installation de jmcs * installation de testgui * compilation de l'app dans la bonne release * correction des url dans les jnlp * mise en oeuvre du serveur d'apps java [ jmmc-apps=test.yml ] * installation des dépendances pour docker et de docker [ role jmmc-docker ] * copie des fichiers de l'app depuis la machine sur laquelle on a compilé l'app * lancement du docker nginx:alpine avec les bons parametres normalement, apres cette étape l'application est disponible au lancement par le jnlp l'application est disponible a l'url http(s)://<serveur frontend>/apps/<release>/<app>/<app>.jnlp </verbatim> ---+ Références / tuto / documentation * [[https://sysadmincasts.com/episodes/43-19-minutes-with-ansible-part-1-4 ][Tutos vidéo + doc/code & links]] * Episode #43 - 19 Minutes With Ansible (Part 1/4) * Episode #45 - Learning Ansible with Vagrant (Part 2/4) * Episode #46 - Configuration Management with Ansible (Part 3/4) * Episode #47 - Zero-downtime Deployments with Ansible (Part 4/4) * [[http://debops.org/][Debobs]] de très nombreuses contributions ansibles * [[http://nathanleclaire.com/blog/2015/04/27/automating-docker-logging-elasticsearch-logstash-kibana-and-logspout/][un peu vieux, mais propose un agencement docker + ELK ]] -- Main.RaphaelJacquot - 01 Mar 2016
This topic: Jmmc/Software
>
WebHome
>
JmmcInfra
Topic revision: r15 - 2016-07-04 - GuillaumeMella
Copyright © 2008-2025 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki?
Send feedback