Transcript
Page 1: Devops@Kelkoo - Agile Grenoble 2012

DevOps@Kelkoo

Alain Delafosse / Nicolas Capponi / Octobre 2012

Page 2: Devops@Kelkoo - Agile Grenoble 2012

2Introduction

Présentation d’une intégrationd’outils dans le contexte Kelkoo

Zooms techniques

= +

@AlainDelafosse @ncapponi Vous ?

Page 3: Devops@Kelkoo - Agile Grenoble 2012

3Kelkoo « Shopping Engine »

220 personnes en Europe

dont 90 informaticiens à Grenoble

80M appels APIs / moisPic à 1600 req/S

10M UU / mois

20 000 Produits

300 Catégories par pays5000 revues

100M offres avec un turn-over quotidien de 15%

5000 marchands

13 Pays

Page 4: Devops@Kelkoo - Agile Grenoble 2012

4DevOps

Business Development OperationsOperationsAgile

Methodologies DevOps

Le mouvement devops casse le mur entre les dev et les ops

DéploiementChangement

Monitoring

Détection d’incident

Correction et analyse

Gestion de problème

Tests Release

Correction et analyse

Développement

Page 5: Devops@Kelkoo - Agile Grenoble 2012

5DevOps

PEOPLEFaciliter la communication entre les équipes

PROCESSIndustrialisation du

processus de développement OUTILS

Industrialisation déploiement et gestion Infrastructure

« devministration »

DEVOPSLes 3 piliers du mouvement

Accompagner le changement et gérer le risque en construisant une intense culture de collaboration et d'automatisation

Page 6: Devops@Kelkoo - Agile Grenoble 2012

6Contexte Kelkoo

1999 Création

2001 Split systè

mes

2004 Rachat par Y

ahoo

2008 Indépendance

10 serveurs10+ DB1 composant

400 serveurs70+ DB200 composants

TGZ + fichiers clefs valeurs

Solution YAHOO

Solution maison

Page 7: Devops@Kelkoo - Agile Grenoble 2012

7Conception du projet

BesoinsIdées

Outillage du dév. au déploiementBO de configuration

Gén.de composants installables

Multi -instanciation des composantsRéutiliser outils Open Source

Automatisation Déploiements standardisés

Commandes et interfaces simplesOutils Open Source

Page 8: Devops@Kelkoo - Agile Grenoble 2012

8Notre solution: étapes

CLONER CONFIGURER

DEVELOPPER

PACKAGER

CONFIGURER DEPLOYER

Infrastructure / OS Applications

Page 9: Devops@Kelkoo - Agile Grenoble 2012

9Zoom 1: Pourquoi Puppet

COMMUNAUTE ++ + +++OUTILLAGEEXTENSIONS ++ - +SIMPLICITE + - -

Gérer des serveurs

Fournit un langage pour décrire la configuration du serveur

Modifie le serveur pour atteindre l’état décrit

1

2

Page 10: Devops@Kelkoo - Agile Grenoble 2012

10CLONER / CONFIGURER

CLONER

CONFIGUR

ER

DEVELOPP

ER

PACKAGER

CONFIGUR

ER

DEPLOYER

Provisionning: industrialiser l’installation et la configuration initiale des serveurs

OS: kickstart ConfigRéseau

PartitionsConfig UsersRepos YUM

Drivers Linux

Gestion centralisée des configurations systèmes et modification par exécution de classes Puppet

UsersDNS

RéseauSNMP

Repos SSH

Page 11: Devops@Kelkoo - Agile Grenoble 2012

11DEVELOPPER / PACKAGER

CLONER

CONFIGUR

ER

DEVELOPP

ER

PACKAGER

CONFIGUR

ER

DEPLOYER

COMPOSANT

DEPLOIEMENT

Types de Composants- Processing- Webapp- Schema DB- Plugin monitoring- Web services

Génération d’archetypes Génération de deux RPMs par composantUtilisation des dépendances RPMs OS

Page 12: Devops@Kelkoo - Agile Grenoble 2012

12Zoom 2: Plugin Maven RPM

POM.XMLBinaires

RépertoiresScripts

Librairies

TemplatesValeurs par défaut

Manifest Puppet

RPM COMPOSANT

RPM DEPLOIEMENT

Page 13: Devops@Kelkoo - Agile Grenoble 2012

13CONFIGURER

CLONER

CONFIGURER

DEVELOPP

ER

PACKAGE

R

CONFIGURER

DEPLOYER

CONFIGURATION DES COMPOSANTS PAR SERVEUR

+

Un rôle regroupe et abstrait un déploiement de composants et la configuration associée

CONFIGURATION PAR ROLE

Serv1.comp1.clef1=AServ1.comp2.clef1=CServ2.comp1.clef1=AEtc…

Serv1.comp1.clef1=AServ1.comp2.clef1=CServ2.comp1.clef1=AEtc…

Role1.clef1=AServ1=Role1Serv2=Role1Etc…

Role1.clef1=AServ1=Role1Serv2=Role1Etc…

Page 14: Devops@Kelkoo - Agile Grenoble 2012

14Zoom 3: Geppetto*

Serveur 1Serveur 1 Serveur 3Serveur 3Serveur 2Serveur 2

BaseMonitoring

BaseMonitoring

WS platformTomcat

WS platformTomcat

Monitoringwebapp

Monitoringwebapp

nagiosTomcatIsAlive-2.1.0cle1=val1

tomcat-6.2cle2=val2

CategoriesCategories ReviewsReviewsreviews-1.2.0cle4=val4

categories-3.0.0cle3=val3

cpu-1.2.0cle5=val5

cle1=valAcle4=valBcle6=valC

*home made <Puppet Gepetto>

Page 15: Devops@Kelkoo - Agile Grenoble 2012

15DEPLOYER

Outil en ligne de commande PUNCHréalisant l’assemblage des

CLONER

CONFIGURER

DEVELOPP

ER

PACKAGE

R

CONFIGURER

DEPLOYER

APPLYAPPLY

RESTORERESTORE

LISTLIST

GETGET

RPM DEPLOIEMENT RPM COMPOSANT VALEURS DE CONFIG

Déployer et configureravec les données du BO

Récupérer les valeurs de config

Lister les composants déployésAppliquer une configuration

Page 16: Devops@Kelkoo - Agile Grenoble 2012

16Zoom 4: Punch

Récupération configuration du serveur

Installation RPM déploiement

Calcul des changements

Puppet : désinstaller RPM composants

Puppet : installerRPM composants

searchFeeder-2.1.0searchFeederInterval=100searchCleaner-1.5.2 searchCleanerMode=3

searchFeeder-2.1.0searchFeederInterval=100searchCleaner-1.5.2 searchCleanerMode=3

Page 17: Devops@Kelkoo - Agile Grenoble 2012

17Etapes

GEPPETTOPUNCHPUNCH

SERVER

11

11

22

33

4455

OPS

MVNMVN

JENKINS

24

3

5

SVNDEV

1

Page 18: Devops@Kelkoo - Agile Grenoble 2012

Processus: Déploiement chez Kelkoo

SCRUM

INFRA TEAM

DEVTEAM

DEVTEAM

OPS TEAM

DEVTEAM

DEVTEAM

DEVTEAM

Service Architect Service Architect

Développe, déploie, teste dans les

environnements QA,DEV parfois

PROD

Développe, déploie, teste dans les

environnements QA,DEV parfois

PROD

Développe plugins de monitoring,

déploie dans tous les environnements

Développe plugins de monitoring,

déploie dans tous les environnements

Déploient dans tous les environnementsDéploient dans tous les environnements

Clone et configure tous les serveurs

Clone et configure tous les serveurs

Comm

unauté PACK/CON

F(gestion collective de l’outillage)

Page 19: Devops@Kelkoo - Agile Grenoble 2012

19Résultat

Nombre de releases en production par semaine

Change management dashboard

Page 20: Devops@Kelkoo - Agile Grenoble 2012

20DevOps@Kelkoo

Faciliter la communication entre les équipes

Industrialisation du processus de développement

Industrialisation de l’infrastructure

Reproductible, scalable, maitriséMême processus quel que soit la

plateforme

Backlog et support communsPas de connaissance « tribale »

Inventaire, Visibilité

Bonne gestion des configurations et du déploiementAméliorations sur gestion de l’infrastructure et

l’orchestration

Page 21: Devops@Kelkoo - Agile Grenoble 2012

21Aller plus loin….

ServerProvisionning

ComponentDeployment & Configuration

OS Configuration

Cloud & VMProvisionning

Private Cloud

Infrastructure

Deployment & Configuration

Infrastructure

Deployment & Configuration

LoadBalancerFiler

NagiosChange Tool

OrchestrationOrchestration

Blue/greenContinous

deployment

Page 22: Devops@Kelkoo - Agile Grenoble 2012

22Vos Options

Gérer des images de déploiementImage OS (Usharesoft)

Prendre une solution du marchéDeployIT (Xebia labs)Nolio (Nolio)

Construire sa solutionUtilisation de paquets systèmesNombreux outils à disposition

S’adapter à une solution PAASGoogle App Engine, Cloudbees, Heroku

Page 23: Devops@Kelkoo - Agile Grenoble 2012

23

Zoom 5: Les outils pour construire sa solution

Configuration Management Orchestration

Command FW

CFEnginePuppet

Chef

FabricAnsible Capistrano

Control Tier

Salt

Glu

RunDeck

Func mCollective

Page 24: Devops@Kelkoo - Agile Grenoble 2012

24

MERCI……

@DEVOPS_BORAT

To make error is human. To propagate error to all

server in automatic way is #devops.

Page 25: Devops@Kelkoo - Agile Grenoble 2012

25Bonus

CHOIX• Utilisation des rôles sur une plateforme complexe• Approfondir évolution DevOps versus SCRUM chez Kelkoo

Page 26: Devops@Kelkoo - Agile Grenoble 2012

26Configuration puppet

class synonym_ws::synonym_ws_1_0_6 { $application_name = "synonymWS"

synonym_ws_1_0_6_type { "synonymWS" : template1 =>

template("synonym_ws/1.0.6/docBase/WEB-INF/classes/applicationContext.xml.erb") }

class instances { if $synonym_ws_instance_webapps {

synonym_ws::synonym_ws_1_0_6::instance_webapps{ $synonym_ws_instance_webapps: }}

if $synonym_ws_deinstall_instance_webapps {

synonym_ws::synonym_ws_1_0_6:disabled::instance_webapps{ $synonym_ws_deinstall_instance_webapps: }}

} include "instances"}

Page 27: Devops@Kelkoo - Agile Grenoble 2012

27Hosting models

Page 28: Devops@Kelkoo - Agile Grenoble 2012

28Synthèse

ETAPES-> CLONAGE OS CONFIG. DEV. PACKAGING APP CONFIG. DEPLOIEMENT

ARTEFACTS

OS KickstartsClasses puppet DNS, LDAP, etc

Classes Puppets DNS, LDAP, etc

Artefacts Maven

RPMsREPOS YUM

RPM de Déploiement RPMs

OUTILS CobblerPuppet

Puppet Kermit

MavenPlugin Maven maisonYUMJenkins

PuppetGepetto

PuppetPunch

ACTEURSINFRASADEVOPS

INFRASADEVOPS

DEVSA DEV

SADEVSAOPS

DEVSAOPS

SUPPORT COMMUNAUTE PACK/CONF

Page 29: Devops@Kelkoo - Agile Grenoble 2012

Différents modèles

Page 30: Devops@Kelkoo - Agile Grenoble 2012

Responsabilités

Embedded SA Embedded OPS

Embedded OPS + SA

Transversal SA Ops contact No integration

SCRUM SA part of the SCRUM

Ops part of the SCRUM

Both part of SCRUM

SA supporting SCRUM

Dedicated OPS contact

Release SA OPS Various Various Ops contact OPS

L1 / L2 /L3 support

L1 OPSL2/L3 SA

L1/L2 OPSL3 SCRUM

L1/L2 OPS+SAL3 SA+SCRUM

L1 OPSL2/L3 SA/SCRUM

L1/L2 OPSL3 SCRUM

L1 OPS/SCRUML2/L3 SCRUM

Changes SA OPS OPS / SA SA / OPS OPS OPS

Monitoring SA Producing plugins

SA/SCRUMProducing

plugins

OPS/SA/SCRUMProducing

plugins

SA/SCRUMProducing plugins

OPS/SCRUM

Problem mgt

Capacity mgt


Top Related