YAP(achimon)C::Asia Hachioji 2016 mid in Shinagawa での発表資料です。
https://github.com/hachiojipm/yapcasia-8oji-2016mid-timetable/issues/80
Paus: https://github.com/dtan4/paus
%PDLFS$PNQPTF1BB4ͷ ࡞Γํɺͦͯ͠ ࣾʹಋೖͨ͠2016-07-03YAP(achimon)C::Asia Hachioji 2016 mid in ShinagawaDaisuke Fujita (@dtan4)
View Slide
Daisuke Fujita / @dtan4Engineer, Infrastructure Team @ Wantedly, Inc.AWS, Terraform / Terraforming, Developer Productivity
Docker Compose PaaS ͷ࡞Γํɺ ͦͯࣾ͠ʹಋೖͨ͠Why private PaaS?Paus: Docker Compose PaaSIntroduce & FeedbacksLatest Updates & Future
Why private PaaS?Problems at Wantedly engineering
1ͭͷ QA ڥڞ༗ʹ ݶք͕དྷͨؾܰʹΞϓϦΛσϓϩΠ Ͱ͖Δڥ͕΄͍͠
Deployment environmentsProduction QA
Deployment environmentsProductionwww.wantedly.com ͦͷͷ࠷৽ͷ master Λ deploy ͢Δ
Deployment environmentsQAಈ࡞νΣοΫɾࣾ֬ೝ༻Production σϓϩΠલʹ ඞͣ QA ͰνΣοΫ͢ΔϞόΠϧΞϓϦͷςελʔ ಉ͡ QA ڥʹଓ
Problems of QAQAQA ॱ൪ͪϞόΠϧςετͷӨڹ
Problems of QAQAQA ॱ൪ͪΤϯδχΞ͕૿͖͑ͯͨͷͰɺ ෳਓ͕ಉ࣌ʹ QA ʹग़ͨ͘͠ͳΔ=> Production ͷϦϦʔε͕ ΕΔ
Problems of QAQAQA ॱ൪ͪ
Problems of QAQAϞόΠϧςετͷӨڹfeature branch σϓϩΠͯ͠ API ͷڍಈ͕มΘΔ=> ςετ݁ՌʹӨڹ͢Δ
Deploy apps easilyαʔϏεϦϦʔεʹ͋ͨͬͯɺΠϯϑϥߏஙʹ 2ਓ͘Β͍අ͞ΕΔ• Production... Kubernetes ೖΕΑ͏ͱͯ͠ΔͬͱؾܰʹΞϓϦΛσϓϩΠͰ͖Δڥ͕΄͍͠Heroku Έ͍ͨʹ؆୯ʹɺࣗͨͪͷ͖ͳߏͰ
Wantedly ❤ DockerWantedly ͷશαʔϏε Docker on CoreOS ͰՔಇ͍ͯ͠Δ• Web app, Elasticsearch, ը૾มαʔόɺ΄͔ॾʑ৽نαʔϏε Dockerfile ΛϦϙδτϦʹஔ͍ͯΒ͏ผίϯϙʔωϯτʹґଘ͢Δ߹ docker-compose.yml
Docker ComposeෳίϯςφͰߏ͞ΕΔΞϓϦέʔγϣϯΛ ؆୯ʹ্ཱͪ͛Δπʔϧdocker-compose.yml ͰαʔϏεఆٛͱ ґଘؔΛهड़docker-compose up Ͱίϯςφىಈ
Docker Composeʮdocker-compose.yml Ͱߏهड़ͨ͠Β ͦΕΛσϓϩΠͰ͖Δڥ͕΄͍͠…ʯʮdocker-compose up ͯ͘͠ΕΔ͚ͩͰ͍͍ʯ
PaaS Λಋೖ͠Α͏
Evaluate existing PaaSWhat we need for PaaS
طଘͷ PaaS ͩͱ զʑͷཁٻΛຬͨ͢ͷ͕ ͳ͔ͬͨ
PaaS in the world• Heroku • Heroku Private SpacesOSS PaaS• dokku / dokku-alt• Flynn• Deis• Tutum• DCHQ.io• Empire• Convox• pool• …
PaaS in the worldHeroku ͩͱ buildpack + addons ߏ ͳͷͰ Ͱ͖Δ͜ͱ੍͕ݶ͞ΕΔ• ΧελϚΠζͨ͠ϛυϧΣΞͱ͔Λ͑ͳ͍• e.g. ಠࣗࣙॻΛΈࠐΜͩ Elasticsearch Docker Image
PaaS in the world΄ͱΜͲͷ OSS PaaS Heroku Ϋϩʔϯ• ݁ہ buildpack ʹറΒΕΔ
PaaS Λ࡞Ζ͏
PausDocker Compose PaaS
Pausdocker-compose.yml ॻ͍ͯ git push ͢Δ͚ͩͰσϓϩΠطଘΠϝʔδ pull ͚ͩͰͳ͘ɺbuild ՄೳαϒυϝΠϯׂΓ͋ͯGitHub ΞΧϯτ࿈ܞfor Development / Testdtan4/paus
Paus dtan4/pausInspired by: Raspaashttp://www.slideshare.net/npsg/2-docker-paas-55540529tetsusat/raspaas
DEMO
Paushttps://ja.glosbe.com/ja/id/%E3%82%AF%E3%82%B8%E3%83%A9dtan4/paus
vs. Existing PaaS⭕ Pros• ֶशίετ͕গͳ͍• ߏ͕γϯϓϧ• σϓϩΠ͕खܰ❌ Cons• ػೳෆ
–Johnny Appleseed“Type a quote here.”OS CoreOSData store etcdClustering Docker SwarmHTTP Reverse Proxy Vulcandgit-push entrypointpaus-gitreceive w/ gitreceivePaus Components
CoreOSίϯςφલఏͷܰྔ Linux Distributionͯ͢ͷΞϓϦέʔγϣϯΛ Docker ίϯςφ্Ͱಈ͔͢Production in Wantedly, Inc.Update channel: beta Reboot strategy: nohttps://coreos.com/assets/images/media/Host-Diagram.png
etcdRaft Λ࠾༻ͨ͠ࢄ KVS CoreOS ͕։ൃ & CoreOS ωΠςΟϒαϙʔτApplication metadata, Deployments, Routing rules, Cluster discoverycoreos/etcdquay.io/coreos/etcdhttps://coreos.com/assets/images/media/5-Machine-Cluster.png
Docker SwarmDocker ͕։ൃ͢Δ Clustering Systemෳͷ Docker ϗετΛ·ͱΊͯ 1ͭͷڊେͳϦιʔεϓʔϧͱΈͳ͢Docker Compose ΠϯςάϨʔγϣϯDocker Engine 1.12 ʹ౷߹͞ΕΔdocker/swarmswarm
Vulcandetcd όοΫΤϯυͷ HTTP Reverse ProxyMailgun ͕։ൃαʔϏεϦελʔτͳ͠Ͱ มߋΛଈ࠲ʹద༻Մೳvulcand/vulcandvulcandhttps://camo.githubusercontent.com/b91054e9220422d7cdad498c229ae254b41601f5/687474703a2f2f636f72656f732e636f6d2f6173736574732f696d616765732f6d656469612f76756c63616e2d312d757073747265616d2e706e67
gitreceivegit push Λड͚͚ͯεΫϦϓτ/ίϚϯυ࣮ߦ 180 ߦͷγΣϧεΫϦϓτdokku ͰΘΕͯͨΓɺFlynn ʹຒΊࠐ·ΕͯͨΓprogrium/gitreceive
paus-frontendPaus ͷ Web DashboardGitHub ΞΧϯτͰαΠϯΠϯΞϓϦέʔγϣϯͷొɺ build-time arguments, ڥมͷઃఆAlpine Linux + (Go + gin-gonic/gin)dtan4/paus-frontendquay.io/dtan4/paus-frontend
paus-frontend dtan4/paus-frontendquay.io/dtan4/paus-frontend
git push ͷड͚ޱdocker-compose build + docker-compose upetcd ʹϝλσʔλ + Vulcand ઃఆΛอଘUbuntu + gitreceive + receiver (by Go)paus-gitreceive dtan4/paus-gitreceivequay.io/dtan4/paus-gitreceiveSFDFJWFSXFC ECXFC SFEJT
Deploy phasePausQBVTHJUSFDFJWFQBVTGSPOUFOEXFC ECXFC SFEJTXFC$ git push paus master:2222
Access to applicationPaushttp://dtan4-rails-ffe7rf8.pausapp.comQBVTHJUSFDFJWFQBVTGSPOUFOEXFCECXFCSFEJTXFC:80
Access to dashboardPaushttp://pausapp.comQBVTHJUSFDFJWFQBVTGSPOUFOEXFC ECXFC SFEJTXFC:80
Introduce & Feedbacks
IntroduceϓϩτλΠϓ: 1։ൃ: 1ϲ݄ऑΤϯδχΞ͚ϋϯζΦϯΛ࣮ࢪprogrium/gitreceive
FeedbacksศརύϑΥʔϚϯε͕ѱ͍ ϝϞϦॏࢹͰ r3 ͬͯͨ => c4 ʹஔ͖͑ઃఆ͕໘ ϦϙδτϦʹσϑΥϧτຒΊࠐΜͩ .env ஔ͍ͯ docker-compose.yml Ͱಡ·ͤΔprogrium/gitreceive
Latest Updates & Future
Deploy from CIʮgit push ͢Δͷ໘ʯGitHub ʹ push ͨ͠Β Paus ʹσϓϩΠʂ ؾ͕͍ͭͨΒউखʹσϓϩΠ͞ΕͯΔʂCircleCI ͔Β git push paus σϓϩΠ্ݶΛઃఆͰ͖ΔΑ͏ʹ
Deploy from CI
Replace backendCoreOS + Swarm Ϋϥελཧ͕໘Docker Compose ͱີ݁߹ϩάͷ
Replace backend to ECSΫϥελཧͱεέδϡʔϦϯάΛ ECS ʹͤΔAPI ܦ༝ͰαʔϏεใΛऔಘCloudWatch Logs ͰϩάऔΕΔΫϥελϝτϦΫεʹج͍ͮͨΦʔτεέʔϧ=> ECS PaaS backend ͱͯ͠࠷దͰʁ
Replace backend to ECSΠϯϑϥνʔϜతʹ Kubernetes ͷ෩ைref: ͏·͍۩߹ʹ͍ͬͯ͘
Recap
Recapڞ༗ QA ڥʹݶք͕དྷͨ & ؾܰʹσϓϩΠ͔ͨͬͨ͠ෳͷ OSS ΛΈ߹ΘͤɺࣗͨͪͷཁٻΛຬͨ͢ Docker Compose PaaS: Paus Λ࡞ͬͨࣾಋೖͯ͠Έͨͷͷɺվળͷ༨͋ΓECS ࢼ͍ͨ͠