Continuous Deployment: Automate your Deploy Pipeline with Singularity

37
CONTINUOUS DEPLOYMENT WITH SINGULARITY Large Scale Mission-Critical Service and Job Deployment Gregory Chomatas @gchomatas

description

Use Singularity, a mesos framework, to automate the deployment of microservices, scheduled jobs, workers and on-demand processes in mesos clusters.

Transcript of Continuous Deployment: Automate your Deploy Pipeline with Singularity

Page 1: Continuous Deployment: Automate your Deploy Pipeline with Singularity

CONTINUOUSDEPLOYMENTWITHSINGULARITY

LargeScaleMission-CriticalServiceandJobDeployment

GregoryChomatas@gchomatas

Page 2: Continuous Deployment: Automate your Deploy Pipeline with Singularity

PAASTEAMImplement&maintain:

thedeploy&buildtools

thePAASplatform(mesosclusters)

loadbalancertools

logginginfrastructure

Boston:WhitneySorenson,TomPetr,TimFinley

Dublin:GregoryChomatas,KieranManning

Page 3: Continuous Deployment: Automate your Deploy Pipeline with Singularity

ANESSENTIALSINGULARITYEXP(1/Z)

Page 4: Continuous Deployment: Automate your Deploy Pipeline with Singularity

HUBSPOTSINGULARITY

Page 5: Continuous Deployment: Automate your Deploy Pipeline with Singularity

THEWAYTOMESOSSpeedwins->SpeedProductDevelopment

Increasechangerate->RemoveFriction+Reducesize,cost,riskofchange:

smallteams,hightrust,lowprocessfreedomandresponsibilityculture

microserviceslibs&crosscuttingAPIstosimplifycoding

automatedeploymentbytooling

Page 6: Continuous Deployment: Automate your Deploy Pipeline with Singularity

SOMEFACTS&NUMBERS3-4personteams

severalmicro-services&jobsperteam(fulloperation)1ormoreservicesperdev

AllQAinMESOS/PRODmigrationongoingnow

400+deploys/day-843DeployableItems:(longrunningwithanAPI)

(longrunningnoAPI)(CRONschedule)

Page 7: Continuous Deployment: Automate your Deploy Pipeline with Singularity

SOMEFACTS&NUMBERSQAEnvironment

pre-mesos:400small&mediumsizeservers(c1.xlarge)

post-mesos:20bigservers(c3.8xlarge)

Page 8: Continuous Deployment: Automate your Deploy Pipeline with Singularity

WHYSINGULARITY

providebestpossibleuserexperiencefor100+HubSpotproductdevelopers

deployentireHubSpotplatformontoSingularity

Page 9: Continuous Deployment: Automate your Deploy Pipeline with Singularity

WHYSINGULARITYearlyadopter(2012)/immatureframeworks

unifiedAPIforalldeployables

missioncritical/strategictool:priorityanddeliveryofbugfixes

featuresandintegrationstheoverallroadmap

havetheresourcestoimplement&maintainahighlycomplexpieceofsoftware

Page 10: Continuous Deployment: Automate your Deploy Pipeline with Singularity

DEPLOYWITHHUBSPOTPAAS

Page 11: Continuous Deployment: Automate your Deploy Pipeline with Singularity

SINGULARITYCOMPONENTS

Page 12: Continuous Deployment: Automate your Deploy Pipeline with Singularity

SINGULARITYSCHEDULER

ADEPLOY-CENTRICRESTAPITO:

registerdeployableitemsexecutetheirdeploysviewsandboxfilesgetmetadata/historicaldata

Page 13: Continuous Deployment: Automate your Deploy Pipeline with Singularity

SINGULARITYUI

Page 14: Continuous Deployment: Automate your Deploy Pipeline with Singularity

SINGULARITYUI-DEPLOYABLEITEMLIST

Page 15: Continuous Deployment: Automate your Deploy Pipeline with Singularity

SINGULARITYUI-DEPLOYABLEITEM

Page 16: Continuous Deployment: Automate your Deploy Pipeline with Singularity

SINGULARITYUI-HISTORICALTASK

Page 17: Continuous Deployment: Automate your Deploy Pipeline with Singularity

SINGULARITYSCHEDULER

HealthCheckingattheprocessandtheserviceendpointlevel

Automaticcool-downofrepeatedlyfailingservices

Loadbalancingofserviceinstances(LBAPI)

AutomaticRollbackoffaileddeploys

DecommissioningofSlaves&Racks

Emailstoserviceownersonfailures

Page 18: Continuous Deployment: Automate your Deploy Pipeline with Singularity

SINGULARITYEXECUTORLogRotation

TaskSandboxCleanup

GracefulTaskKillingwithconfigurabletimeout

EnvironmentSetup

TaskRunnerScript

Page 19: Continuous Deployment: Automate your Deploy Pipeline with Singularity

ADVANCEDSLAVESERVICESLogWatcher:Forward/StreamLogs

S3uploader:ArchivelogswithAWSS3Service

ExecutorCleanup:Cleanfailedexecutortasks

Page 20: Continuous Deployment: Automate your Deploy Pipeline with Singularity

DEVELOPWITHSINGULARITYjava7guice

dropwizard(jersey,jackson,liquibase)

maven

backbonenodejsbrunch

Page 21: Continuous Deployment: Automate your Deploy Pipeline with Singularity

ROADMAP/NEWFEATURESPhaseddeployment

Auto-scaling/resourceusagemonitoringandalerting

Enhancejobscheduler

SupportdeployofDockercontainers

OpensourceHubSpotDeployerandDeployRegistry

Page 22: Continuous Deployment: Automate your Deploy Pipeline with Singularity

USEFULLINKS

http://getsingularity.com/https://github.com/HubSpot/Singularity

https://github.com/HubSpot/Singularity/blob/master/Docs/Singularity_API_Reference.md

https://github.com/HubSpot/Singularity/blob/master/Docs/Singularity_Local_Setup_For_Testing.md

https://mesosphere.io/resources/mesos-case-study-hubspot/

Page 23: Continuous Deployment: Automate your Deploy Pipeline with Singularity

APPENDIX

Page 24: Continuous Deployment: Automate your Deploy Pipeline with Singularity

DEPLOYCONFIGURATION

name:MDS_All_Item_Types_In_One_ConfigbuildName:MesosDeployIntegrationTestsProjecttype:procfile

owners:[email protected]

appRoot:/mesos-deploy-test-srv1/v1loadBalancers:-test

env:all:JOB_JAR:TestJob.jar

procfile:webService:cmd:java$JVM_DEFAULT_OPTS-jarTestService.jarserver$CONFIG_YAMLinstances:2cpus:2memory:1024numRetriesOnFailure:5scheduledJob:cmd:java$JVM_DEFAULT_OPTS-jar$JOB_JAR-testjobschedule:'*/3****'numRetriesOnFailure:5healthcheckIntervalSeconds:40healthcheckTimeoutSeconds:40worker:

Page 25: Continuous Deployment: Automate your Deploy Pipeline with Singularity

KEYSINGULARITYABSTRACTIONS

SINGULARITYREQUESTOBJECT

{"id":"TestService","owners":["[email protected]","[email protected]"],"daemon":true,"instances":3,"rackSensitive":true,"loadBalanced":true}

Page 26: Continuous Deployment: Automate your Deploy Pipeline with Singularity

KEYSINGULARITYABSTRACTIONS

SINGULARITYDEPLOYOBJECT

RESOURCES:Memory,CPUs,networkportsHEALTHCHECKS:TimeoutsandURLsLOADBALANCINGofwebserviceinstances(LBgroups,apibasepath)EXECUTORINFORMATION:executionenvironment,executableartifacts,configurationfiles,commandtoexecute,executortouse,etc.

Page 27: Continuous Deployment: Automate your Deploy Pipeline with Singularity

{"requestId":"MDS_TestService","id":"71_7","customExecutorCmd":".../singularity-executor","resources":{"cpus":1,"memoryMb":896,"numPorts":3},"env":{"DEPLOY_MEM":"768","JVM_MAX_HEAP":"384m",},

Page 28: Continuous Deployment: Automate your Deploy Pipeline with Singularity

"executorData":{"cmd":"java-Xmx$JVM_MAX_HEAP-jar.../TestService.jarserver$CONFIG_YAML""embeddedArtifacts":[{"name":"rawDeployConfig","filename":"TestService.yaml","content":"bmFtZT..."}],"externalArtifacts":[],"s3Artifacts":[{"name":"executableSlug","filename":"TestService.tar.gz","md5sum":"313be85c5979a1c652ec93e305eb25e9","filesize":81055833,"s3Bucket":"hubspot.com","s3ObjectKey":"build_artifacts/.../TestService.tar.gz"}],

Page 29: Continuous Deployment: Automate your Deploy Pipeline with Singularity

SINGULARITYAPI

MANAGEDEPLOYABLEITEMS

ENDPOINT:/requests

register/update/unregisteranitem

getinfoaboutanitem

listitemsinactive|paused|cool-downstate

run/restart/pause/un-pauseanitem

Page 30: Continuous Deployment: Automate your Deploy Pipeline with Singularity

SINGULARITYAPI

DEPLOYTHEDEPLOYABLEITEMS

ENDPOINT:/deploys

deployanalreadyregistereditem

cancelapendingdeploy

Page 31: Continuous Deployment: Automate your Deploy Pipeline with Singularity

SINGULARITYAPI

MANAGEDEPLOYABLEITEMINSTANCES(TASKS)ENDPOINT:/tasks

getthelistofallscheduledtasks(notyetactive)

getscheduledtasksforaspecificitem

listtasksin state

infoaboutaspecifictask

activetasksinaslave

Killatask

Page 32: Continuous Deployment: Automate your Deploy Pipeline with Singularity

SINGULARITYAPI

HistoricalInformationaboutdeployableitems&theirtasks

ENDPOINT:/history

asingletaskhistory

tasksthathaveruninthepast

allpreviousitemupdates

searchforhistoricalitemsbyitemid

allitemdeploys

aspecificitemdeploy

Page 33: Continuous Deployment: Automate your Deploy Pipeline with Singularity

SINGULARITYAPI

LIST&DOWNLOADFILESINACTIVETASKSANDBOX

ENDPOINT:/sandbox

listalltaskfiles

readfilechunks

downloadafile

Page 34: Continuous Deployment: Automate your Deploy Pipeline with Singularity

SINGULARITYAPIClusterSTATEInformation

ENDPOINT:/state

{activeTasks:567,activeRequests:843,cooldownRequests:1,scheduledTasks:142,pendingRequests:0,lbCleanupTasks:1,activeSlaves:21,deadSlaves:0,decomissioningSlaves:0,activeRacks:3,deadRacks:0,futureTasks:142,maxTaskLag:0,overProvisionedRequests:0,underProvisionedRequests:0,allRequests:844}

Page 35: Continuous Deployment: Automate your Deploy Pipeline with Singularity

SINGULARITYUI-DEPLOYABLEITEMTASK

Page 36: Continuous Deployment: Automate your Deploy Pipeline with Singularity

SINGULARITYUI-DASHBOARD

Page 37: Continuous Deployment: Automate your Deploy Pipeline with Singularity

SINGULARITYUI-RACKS&SLAVES