DockerãšKubernetesã®æ代ã«ãœãããŠã§ã¢éçºã®äžçã¯ã©ã®ããã«å€ãããŸãããïŒ ãããã®ãã¯ãããžãŒã«åºã¥ããŠãäžåºŠã ãã¢ãŒããã¯ãã£ãæ§ç¯ããããšã¯å¯èœã§ããïŒ ãã¹ãŠãã³ã³ããã«ãè©°ã蟌ãããšãã«ãéçºããã»ã¹ãšçµ±åããã»ã¹ãçµ±åããããšã¯å¯èœã§ããïŒ ãã®ãããªæ±ºå®ã®èŠä»¶ã¯äœã§ããïŒ åœŒãã«ã¯ã©ããªå¶éããããŸããïŒ åœŒãã¯åçŽãªéçºè
ã®ç掻ãç°¡çŽ åããŸããããããšãé£ããããŸããïŒ

ãããã®è³ªåã ãã§ãªããããããã¹ãŠã«çããæãæ¥ãŸããïŒ ïŒæ¬æããã³å
ã®ã€ã©ã¹ãã§ïŒ
ãã®èšäºã§ã¯ãå®éã®ç掻ããéçºããã»ã¹ãžãšåãæãããã«å°ããã¢ãŒããã¯ãã£ãéããŠãããªããçŸå®ã®ç掻ã«æ»ãããããã®åã»ã¯ã¿ãŒã§æãéèŠãªè³ªåã«çããŸãã ãŸããç¹å®ã®å®è£
ãè¡ãããšãªããå¯èœãªãœãªã¥ãŒã·ã§ã³ã®äŸã瀺ãã ãã§ãã¢ãŒããã¯ãã£ã®äžéšãšãªãå€ãã®ã³ã³ããŒãã³ããšååã®æŠèŠã説æããŸãã
èšäºã®ã¿ã€ãã«ããã®è³ªåã«ã€ããŠã®æçµçãªçµè«ã¯ãããªããæ··ä¹±ãããã ãã§ãªããä»ã®èªè
ã倧ãã«åã°ããããšãã§ããŸã-ãã¹ãŠã¯ããªãã®çµéšã3ã€ã®ç« ããã®æ¬¡ã®ã¹ããŒãªãŒãã©ã®ããã«èªèãããããããŠãããããã®æ¥ã®æ°åã«äŸåããŸãèªãã åŸã«è³ªåïŒ
ç®æ¬¡
å®ç掻ããéçºããã»ã¹ãŸã§

ã»ãšãã©ã®å Žåãç§ããããŸã§èŠãããŸãã¯ã€ã³ã¹ããŒã«/æ§æããããšãå
æ ã«æã£ãŠãããã¹ãŠã®éçºããã»ã¹ã¯ãå®éã«ã¯1ã€ã®åçŽãªç®æšã§ã-ã¢ã€ãã¢ã®èªçãããæŠéãç°å¢ãžã®é
ä¿¡ãŸã§ã®æéãççž®ããããšã±ãŒã¹å®æ°ãã³ãŒãã®å質ã®å€ã
ããããæªãã¢ã€ãã¢ãè¯ãã¢ã€ãã¢ã¯çµ¶å¯Ÿã«éèŠã§ã¯ãããŸããã æªãã¢ã€ãã¢ã¯éåžžããã¹ãããŠæåŠããå Žåã«ãã£ãŠã¯ããã«åŽ©å£ããããã«å éãããŸãã ããã§éèŠãªã®ã¯ãåã®ããŒãžã§ã³ãžã®ããŒã«ããã¯ããã»ã¹ïŒãã®ãã¯ã¬ã€ãžãŒãªãã¢ã€ãã¢ãªãïŒããããã»ã¹ãèªååããããããã®è©ã«ããã£ãŠãããšããããšã§ãã
ç¶ç¶çãªçµ±åãšé
ä¿¡ã¯ãéåžžãéçºäžçã®ã©ã€ãã©ã€ã³ã®ããã«èŠããŸãã äœãç°¡åã«èŠããã§ããããïŒ ã¢ã€ãã¢ãæã£ãŠãã³ãŒããæã£ãŠ-è¡ããïŒ 1ã€ã®å€§ããªãBUTãããªããã°ããã¹ãŠãããŸããããŸãã ç§ã®çµéšã瀺ãããã«ãçµ±åãšé
ä¿¡ããã»ã¹ã¯ã瀟å
ã§äœ¿çšãããŠãããã¯ãããžãŒãããžãã¹ããã»ã¹ããåãé¢ããŠåœ¢åŒåããããšã¯éåžžã«å°é£ã§ãã
ã¿ã¹ã¯ã¯æããã«è€éã§ãããäžçã¯çµ¶ããçŽ æŽãããã¢ã€ãã¢ãšãã¯ãããžãŒãçã¿åºããç§ãã¡ãïŒãŸããå人çã«ã¯...ïŒçæ³çã§çæ³çãªã¡ã«ããºã ã«å°ããŸãã ããã«åãã次ã®ã¹ãããã¯ãDockerãšKubernetesã§ãã æœè±¡åã®ã¬ãã«ãšã€ããªãã®ãŒçã¢ãããŒãã¯ãã¿ã¹ã¯ã®80ïŒ
ãå®éã«åãæ¹æ³ã§è§£æ±ºã§ãããšèšãæš©å©ãäžããŠãããŸãã
ãã¡ããã20ïŒ
ã¯ã©ãã«ãè¡ã£ãŠããŸããã ããããããã¯ãŸãã«ãäœæ¥ãšäœæãèå³æ·±ãåéã§ãããã¢ãŒããã¯ãã£ãšããã»ã¹ã®åãæ¥åžžçãªåé¡ã«å¯ŸåŠããããšã§ã¯ãããŸããã ãããã£ãŠãã建ç¯ã®æ çµã¿ãã«äžåºŠéäžãããšã解決ãããåé¡ã®80ïŒ
ã«æ»ãå¿
èŠæ§ãïŒã±ãŒã¹ãæãªãããšãªãïŒå¿ããããšãã§ããŸãã
ããã¯äœãæå³ããDockerã¯éçºããã»ã¹ã®åé¡ãã©ã®ããã«è§£æ±ºããŸããïŒ
ç°¡åãªéçºããã»ã¹ãèããŠã¿ãŸããããã»ãšãã©ã®å Žåããããååã«èæ
®ããããšãææ¡ããŸãã

ä»»æã®ã¿ã¹ã¯ã®äžé£ã®æ®µéããèªååããå¿
èŠããããã®ã¯ãã¹ãŠãããèªäœã«çµ±åããããšãã§ããæéããããŠé©åãªã¢ãããŒãã§å€æŽããå¿
èŠã¯ãããŸããã
éçºè
ç°å¢ãã€ã³ã¹ããŒã«ãã

ãã¹ãŠã®ãããžã§ã¯ãã«docker-compose.yml
ãå«ããå¿
èŠããããŸãã éçºè
ã¯ãããŒã«ã«ãã·ã³ã§ã¢ããªã±ãŒã·ã§ã³/ãµãŒãã¹ãå®è¡ããããã«ã©ã®ããã«ãäœãããå¿
èŠãããããèããå¿
èŠæ§ããç°¡åã«æããŸãã åçŽãªdocker-compose up
ã䜿çšãããšããã®ã¢ããªã±ãŒã·ã§ã³ã§ãã¹ãŠã®äŸåé¢ä¿ãæå¹ã«ããããŒã¿ããŒã¹ã«ãã£ã¯ã¹ãã£ãå
¥åããã³ã³ããå
ã®ããŒã«ã«ã³ãŒããæ¥ç¶ãããªã³ã¶ãã©ã€ã§ã³ã³ãã€ã«ããããã«ã³ãŒããã¹ããŒãã³ã°ããæçµçã«æåŸ
ãããããŒãã«å¿çããå¿
èŠããããŸãã
æ°ãããµãŒãã¹ã®äœæã«ã€ããŠè©±ããŠããå Žåãéçºè
ã¯ãéå§æ¹æ³ãã³ãããããå ŽæããŸãã¯éžæãããã¬ãŒã ã¯ãŒã¯ã«ã€ããŠè³ªåããªãã§ãã ããã ãããã¯ãã¹ãŠãæšæºã®æ瀺ã§äºåã«èª¬æãã frontend
ã backend
ã worker
ãã®ä»ã®ã¿ã€ãã®ããŸããŸãªã±ãŒã¹ã®ãµãŒãã¹ãã³ãã¬ãŒãã§æ瀺ããå¿
èŠããããŸãã
èªåãã¹ã

ããã©ãã¯ããã¯ã¹ãïŒ åŸã§ã³ã³ãããåŒã³åºãçç±ïŒã«ã€ããŠç¥ãããã®ã¯ãå
éšã®ãã¹ãŠã倧äžå€«ãšããããšã ãã§ãã ã¯ããŸãã¯ãããã 1ãŸãã¯0ãã³ã³ããå
ã§å®è¡ããå¿
èŠãããã³ãã³ãã®æ°ãéãããŠããå Žåãããã³äŸåé¢ä¿ãèšè¿°ããdocker-compose.yml
ã䜿çšãããšãç¹ã«å®è£
ã®è©³çŽ°ã«å
¥ããã«ç°¡åã«èªååããã³çµ±åã§ããŸãã
ããšãã°ã ãã®ããã« ïŒ
ããã§ããã¹ããšã¯ããŠãããã ãã§ãªããæ©èœã ãã§ãªããæ©èœãçµ±åãã³ãŒãã¹ã¿ã€ã«ã®ãã¹ããšè€è£œãå€ãäŸåé¢ä¿ã®ç¢ºèªã䜿çšãããŠããããã±ãŒãžã®ã©ã€ã»ã³ã¹ã®ç Žæãªã©ããã®ä»ã®ãã¹ããæå³ããŸãã 匷調ç¹ã¯ãããããã¹ãŠãDockerã€ã¡ãŒãžå
ã«ã«ãã»ã«åããå¿
èŠããããšããäºå®ã§ãã
é
éã·ã¹ãã

ãã€ã©ãã§é è³ãã€ã³ã¹ããŒã«ãããã¯åé¡ã§ã¯ãããŸããã çµæã¯ãã€ã³ã¹ããŒã«ããã»ã¹ãšãŸã£ããåãã§ãåžžã«åãã§ããå¿
èŠããããŸãã ãšã³ã·ã¹ãã å
šäœã®ã©ã®éšåã§ããã©ã®gitãªããžããªããã§ãéãã¯ãããŸããã ããã§ã®demçæ§ã¯æãéèŠãªèŠçŽ ã§ãã èšå®ããå¿
èŠãããã®ã¯ãã€ã³ã¹ããŒã«ãå¶åŸ¡ããå€æ°ã ãã§ãã
ãã®åé¡ã解決ããã®ã«æãå¹æçãšæãããã¢ã«ãŽãªãºã ïŒ
- ãã¹ãŠã®
Dockerfile
ããç»åãåéããŸãïŒããšãã°ã ãã®ããã« ïŒ - ã¡ã¿ãããžã§ã¯ãã䜿çšããŠã Kube APIã䜿çšããŠãããã®ç»åãKubernetesã«é
ä¿¡ããŸã ã éåžžãé
ä¿¡ãéå§ããã«ã¯ãããã€ãã®å
¥åãã©ã¡ãŒã¿ãŒãå¿
èŠã§ãã
- Kube APIãšã³ããã€ã³ã
- ç§å¯ã®ãªãœãŒã¹-éåžžãç°ãªãã³ã³ããã¹ãïŒããŒã«ã«/ã·ã§ãŒã«ãŒã /ã¹ããŒãžã³ã°/ãããã¯ã·ã§ã³ïŒã«ãã£ãŠç°ãªããŸã
- èšç®çšã®ã·ã¹ãã åãšãããã®ã·ã¹ãã ã®Dockerã€ã¡ãŒãžã¿ã°ïŒåã®æé ã§ååŸïŒ
ãã¹ãŠã®ã·ã¹ãã ãšãµãŒãã¹ã«å¯Ÿããåäžã®ã¡ã¿ãããžã§ã¯ãïŒãšã³ã·ã¹ãã ã®æ§é ãšå€æŽã®é
ä¿¡æ¹æ³ã説æãããããžã§ã¯ãïŒãšããŠã ãã®ã¢ãžã¥ãŒã«ã§Ansible playbook
ã䜿çšããŠKubeAPIãšçµ±åããããšã奜ã¿ãŸãã ãã ããæŽç·Žãããèªååã«ã¯ä»ã®å€ãã®ãªãã·ã§ã³ããããŸã-å°ãäœãã«ããŸãããã å¿ããŠã¯ãªããªãå¯äžã®ããšã¯ãã¢ãŒããã¯ãã£ã管çããããã®äžå€®éäžåã®æ¹æ³ã§ãã ããã«ããããã¹ãŠã®ãµãŒãã¹/ã·ã¹ãã ã䟿å©ãã€åäžã«ç®¡çããåæ§ã®æ©èœãå®è¡ãããã¯ãããžãŒãã·ã¹ãã ããä»åŸã®åç©åã®å
åãåãé€ãã®ãæ¢ããããšãã§ããŸãã
éåžžãç°å¢ã®ã€ã³ã¹ããŒã«ã¯æ¬¡ã®å Žæã§å¿
èŠã§ãã
- ãShowRoomã-ããã€ãã®æåãã§ãã¯ãŸãã¯ã·ã¹ãã ã®ãããã°çš
- ãã¹ããŒãžã³ã°ã-ã»ãšãã©ã®æŠéç°å¢ããã³å€éšã·ã¹ãã ãšã®çµ±åïŒéåžžã¯
ShowRoom
ãšã¯ç°ãªããDMZã«ãããŸãïŒ - ãçç£ã-ãšã³ããŠãŒã¶ãŒã®å®éã®ç°å¢
çµ±åãšé
ä¿¡ã®ç¶ç¶æ§

ããã©ãã¯ããã¯ã¹ã-Dockerã€ã¡ãŒãžããã¹ãããçµ±äžãããæ¹æ³ãããããããã®ãããªãã¹ãã«ãã£ãŠåŸãããçµæã«ããã feature-branch
ãã©ã³ããgitãªããžããªã®upstream
ãŸãã¯master
ãã©ã³ãã«åé¡upstream
ã·ãŒã ã¬ã¹ã«çµ±åã§ããããšãèæ
®ããå¿
èŠããããŸãã
ãã®ã¢ãããŒãã®å¯äžã®é害ã¯ãçµ±åãšé
ä¿¡ãè¡ãå¿
èŠãããé åºã§ãã ãŸãããªãªãŒã¹ããªãå Žåãå€ãã®äžŠåfeature-branch
åãã1ã€ã®ã·ã¹ãã ã§ã競åç¶æ
ããé²æ¢ããæ¹æ³ã«ã€ããŠã®è³ªåãæ¥ã«çºçãfeature-branch
ã
次ã®ããã»ã¹ã¯ã競åã¢ãŒãããªãå Žåã«éå§ããå¿
èŠããããŸããããããªããšãã競åç¶æ
ãã«ãã£ãŠäŒæ¯ãåããªããªããŸãã
feature-branch
ãupstream
ã«ã¢ããã°ã¬ãŒãããããšããŠããŸãïŒ git rebase/merge
ïŒDockerfile-
åé- åéããããã¹ãŠã®ç»åã®ãã¹ã
- éå§ããã¹ããã2ããã®ç»åãå«ãå¿
èŠãªã·ã¹ãã ã®é
ä¿¡ãå®äºãããŸã§åŸ
ã¡ãŸã
- åã®ã¹ããããäžæããå ŽåããŸãã¯å€éšèŠå ã«ããããšã³ã·ã¹ãã ãåã®ç¶æ
ã«ããŒã«ããã¯ããå Žå
upstream
feature-branch
ãããŒãžãããªããžããªã«éä¿¡ããŸã
ã©ããªå€±æã§ããã©ã®ã¹ãããã§ããé
ä¿¡ããã»ã¹ãäžæããéçºè
ã«ã¿ã¹ã¯ãè¿ããŠåé¡ã解決ããå¿
èŠããããŸãããåæ Œããªãããã¹ãã§ããããã©ã³ãã®ããŒãžã®åé¡ã§ããã
åãã¬ã·ãã¯ãè€æ°ã®ãªããžããªãæäœã§ããããšãæå³ããŸãã ãããè¡ãã«ã¯ããã¹ãŠã®ãªããžããªã«å¯ŸããŠã¢ã«ãŽãªãºã ã¹ãããã®é åºã§ããã»ã¹å
šäœãå®è¡ããå¿
èŠããããŸããåãªããžããªãåå¥ã«ç¹°ãè¿ãå埩ããã®ã§ã¯ãªãã
ããã«ãKubernetesã䜿çšãããšãããŸããŸãªABãã¹ãããã³åé¡åæã®ããã«æŽæ°ãéšåçã«å±éã§ããŸãã ããã¯ãå
éšæ段ãšããµãŒãã¹ïŒã¢ã¯ã»ã¹ãã€ã³ãïŒã®åé¢ããã³çŽæ¥çãªã¢ããªã±ãŒã·ã§ã³ã«ãã£ãŠå®çŸãããŸãã åé¡ãšå¯èœãªããŒã«ããã¯ãåæããããã«ãã³ã³ããŒãã³ãã®æ°ããããŒãžã§ã³ãšå€ãããŒãžã§ã³ãé©åãªæ¯çã§åžžã«ãã©ã³ã¹ãããããšãã§ããŸãã
ããŒã«ããã¯ã·ã¹ãã
ãã¹ãŠã®å±éã¯å¯éçã§ããå¿
èŠããããŸã-ããã¯ãã¢ãŒããã¯ãã£ãã¬ãŒã ã¯ãŒã¯ã«æ瀺ãããå¿
é èŠä»¶ã§ãã ããã«ã¯ãå€ãã®æçœã§åŸ®åŠã§ã¯ãªãã·ã¹ãã éçºã䌎ããŸãã
æãéèŠãªãã®ã®ããã€ãã次ã«ç€ºããŸãã
- ãµãŒãã¹ã¯ãç°å¢ãæ£ç¢ºã«ã«ã¹ã¿ãã€ãºã§ããã ãã§ãªããå€æŽãããŒã«ããã¯ã§ããå¿
èŠããããŸãã äŸïŒããŒã¿ããŒã¹ã®ç§»è¡ãRabbitMQã®ã¹ããŒããªã©ã
- ç°å¢ãããŒã«ããã¯ã§ããªãå Žåã¯ãå€æ
æ§ã§ãããå€ãããŒãžã§ã³ãšæ°ããããŒãžã§ã³ã®äž¡æ¹ã®ã³ãŒãããµããŒãããå¿
èŠããããŸãã äŸïŒããŒã¿ããŒã¹ã®ç§»è¡ã¯ãããã€ãã®äžä»£ã®ãµãŒãã¹ã®å€ãããŒãžã§ã³ã®åäœãäžæãããªãããã«ããå¿
èŠããããŸãïŒéåžžã¯2äžä»£ãŸãã¯3äžä»£ã§ååã§ãïŒã
- ãµãŒãã¹æŽæ°ã®äžäœäºææ§ã éåžžãAPIäºææ§ãã¡ãã»ãŒãžåœ¢åŒãªã©ã§ãã
Kubernetesã¯ã©ã¹ã¿ãŒã®ç¶æ
ã®ããŒã«ããã¯ã¯éåžžã«ç°¡åã§ãïŒ kubectl rollout undo deployment/some-deployment
ãškubernetesã¯ä»¥åã®ãã¹ãããã·ã§ãããã埩å
ããŸãïŒããã¡ã¿ãããžã§ã¯ãã«ã¯ããã«é¢ããæ
å ±ãå«ãŸããŠããå¿
èŠããããŸãã ããè€éãªé
ä¿¡ããŒã«ããã¯ã¢ã«ãŽãªãºã ã¯éåžžã«æšå¥šãããŸããããå¿
èŠãªå ŽåããããŸãã
ãã®ã¡ã«ããºã ãéå§ãããåå ïŒ
- ãªãªãŒã¹åŸã®ã¢ããªã±ãŒã·ã§ã³ãšã©ãŒã®å²åãé«ã
- äž»èŠãªç£èŠãã€ã³ãããã®ä¿¡å·
smoke
ãã¹ãã®å€±æ- æåã¢ãŒã-人éã®æ±ºå®
å€éšããã³å
éšã®è
åšãããšã³ã·ã¹ãã ã®100ïŒ
ã®ã»ãã¥ãªãã£ããäœæãããåå¥ã®ããã»ã¹ãéžæããããšã¯äžå¯èœã§ãããã¢ãŒããã¯ãã£ãã¬ãŒã ã¯ãŒã¯ã¯ãåã¬ãã«ããã³ãã¹ãŠã®ãµãã·ã¹ãã ã§äŒæ¥ã®æšæºããã³ã»ãã¥ãªãã£ããªã·ãŒãèæ
®ããŠå®è£
ããå¿
èŠãããããšã«æ³šæããŠãã ããã
次ã«ãææ¡ããããœãªã¥ãŒã·ã§ã³ã®3ã€ã®ã¬ãã«ãã¹ãŠããã詳现ã«æ€èšããŸããã¢ãã¿ãªã³ã°ãšã¢ã©ãŒãã«ã€ããŠã説æããŸãããããã¯ã暪æçã§ãããã·ã¹ãã ã®æŽåæ§ã®èŠ³ç¹ããåºæ¬çãªéèŠæ§ãæã¡ãŸãã
Kubernetesã«ã¯ã ã¢ã¯ã»ã¹æš© ã ãããã¯ãŒã¯ããªã·ãŒ ã ã€ãã³ãç£æ»ãããã³æ
å ±ã»ãã¥ãªãã£ã«é¢é£ãããã®ä»ã®åŒ·åãªããŒã«ãåºåãããã®éåžžã«åªããçµã¿èŸŒã¿ã¡ã«ããºã ã®ã»ããããããŸã ã é©åãªå¿èåã䜿çšãããšãåäžã®æ»æãŸãã¯ããŒã¿ãªãŒã¯ãæåããŠçµäºããã®ã«èããé²æ¢ã§ããåªããé²åŸ¡å¢çç·ãæ§ç¯ã§ããŸãã
ããã»ã¹ããã¢ãŒããã¯ãã£ãŒãŸã§
éçºããã»ã¹ãšæ§ç¯ããããšããŠããç°å¢ãšã®ãã®ç·å¯ãªé¢ä¿ã¯ãããªãã«å®å¿ãäžããã¹ãã§ã¯ãããŸããã æ
å ±ã·ã¹ãã ã®ã¢ãŒããã¯ãã£ã«é¢ããåŸæ¥ã®èŠä»¶ïŒæè»æ§ãã¹ã±ãŒã©ããªãã£ãå¯çšæ§ãä¿¡é Œæ§ãè
åšã«å¯Ÿããã»ãã¥ãªãã£ãªã©ïŒãéçºããã»ã¹ããã³é
ä¿¡ããã»ã¹ãšã®è¯å¥œãªçµ±åã®èŠæ±ã«å ããŠããã®ãããªã¢ãŒããã¯ãã£ã®äŸ¡å€ãé«ããŸãã
éçºããã»ã¹ãšãšã³ã·ã¹ãã ã®å¯æ¥ãªçµ±åã«ãããDevOpsïŒ Dev elopment Op eration s ïŒãªã©ã®æŠå¿µãé·ãéçãŸããŠããŸããããã¯ãã€ã³ãã©ã¹ãã©ã¯ãã£ã®å®å
šãªèªååãšæé©åãžã®éã®ãã®è«ççãªã¹ãããã§ãã ãã ããé©åã«èšèšãããã¢ãŒããã¯ãã£ãšãã©ãããã©ãŒã ã®é«å質ã®ãµãã·ã¹ãã ã䜿çšãããšãDevOpsã¿ã¹ã¯ãæå°éã«æããå¿
èŠããããŸãã
ãã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£
ç§ã¯ããµãŒãã¹æåã¢ãŒããã¯ãã£ãŒïŒ SOA ïŒã®å©ç¹ã®è©³çŽ°ãããã³ãããã®ãµãŒãã¹ããªããã€ã¯ãã§ããå¿
èŠãããã®ãââã«ã€ããŠèª¬æããå¿
èŠã¯ãªããšèããŠããŸã ã DockerãšKubernetesã䜿çšããããšã«æ±ºããå Žåããã®äžçã§ã¯å·šå€§ãªã¢ããªã¹ã«ãªãããšã¯éåžžã«é£ãããã€ããªãã®ãŒçã«ééã£ãŠããããšãç解ããïŒãããŠåãå
¥ããïŒå¿
èŠããããŸãã
åäžã®ããã»ã¹ãå®è¡ããæ°žç¶æ§ã§å³å¯ã«åäœããããã«èšèšãããDockerã¯ãDDDïŒãã¡ã€ã³é§åéçºïŒã®èŠ³ç¹ããèããããšãäœåãªããããããã±ãŒãžåãããã³ãŒããã¢ã¯ã»ã¹çšã®çºä¿¡ããŒããæã€ãã©ãã¯ããã¯ã¹ãšããŠæ±ããŸãã
å¿
é ã®ãšã³ã·ã¹ãã ã³ã³ããŒãã³ããšãœãªã¥ãŒã·ã§ã³
å¯çšæ§ãšä¿¡é Œæ§ãåäžãããã·ã¹ãã ã®èšèšã®å®è·µããããã€ã¯ããµãŒãã¹ã®éçšã«å®éã«å¿
èŠãªããã€ãã®ã³ã³ããŒãã³ããéžã³åºããŸãã
ãã¹ãŠã®ã³ã³ããŒãã³ããšãã®èª¬æã¯ãKubernetesç°å¢ã®ã³ã³ããã¹ãïŒã¢ãããŒããšã¢ãŒããã¯ãã£ã®èŠ³ç¹ããéèŠã§ãïŒã§ä»¥äžã«ç€ºãããŠãããšããäºå®ã«ããããããããã®ãªã¹ããä»ã®ãã©ãããã©ãŒã ã®ãã§ãã¯ãªã¹ããšããŠåç
§ã§ããŸãã
ïŒç§ã®ããã«ïŒä»¥äžã§èª¬æãããµãŒãã¹ãµãŒãã¹ãéåžžã®KubernetesãµãŒãã¹ãšããŠç®¡çããæ¹ãè¯ããšããçµè«ã«éããå Žåãæšå¥šäºé
ã¯ãå¥åã®ã¯ã©ã¹ã¿ãŒãŸãã¯ãã®ããã®ãå®åããšã¯ç°ãªãã¯ã©ã¹ã¿ãŒãæã€ããšã§ãã ããšãã°ããã¹ããŒãžã³ã°ãã¯ã©ã¹ã¿ãŒã䜿çšã§ããŸããããã«ããããæŠéãç°å¢ã¯å®å®ããŠããŸããããã€ã¡ãŒãžãã³ãŒãããŸãã¯ç£èŠã®ãœãŒã¹ãå¿
èŠãªç¶æ³ããä¿è·ã§ããŸãã ã€ãŸãããã®æ¹æ³ã§ãé¶ãšåµãã®åé¡ã解決ããŸã
ã¢ã€ãã³ãã£ãã£ãµãŒãã¹

éåžžã¯ãã¢ã¯ã»ã¹ããµãŒããŒãžã®ã¢ã¯ã»ã¹ãä»®æ³ãã·ã³ãã¢ããªã±ãŒã·ã§ã³ããªãã£ã¹ã®ã¡ãŒã«ãªã©ããå§ãŸããŸãã æ倧èŠæš¡ã®äŒæ¥ãã©ãããã©ãŒã ïŒIBMãGoogleãMicrosoftãªã©ïŒã®ã¯ã©ã€ã¢ã³ãã§ããïŒãŸãã¯ãªãããïŒå Žåããããã®ãã³ããŒã®é©åãªãµãŒãã¹ã«ãã£ãŠãã®åé¡ã解決ãããå¯èœæ§ãé«ãã§ãã ãããããããããªãã®ããæ¹ã§ã¯ãªããèªåã ãã®ãœãªã¥ãŒã·ã§ã³ãèªåã§ç®¡çããã§ããã°äºç®å
ã§æé ãªäŸ¡æ Œã«ãããå Žåã¯ã©ãã§ããããïŒ
ãã®ãªã¹ãã¯ãå¿
èŠãªãªãã·ã§ã³ã決å®ããã€ã³ã¹ããŒã«ãšã¡ã³ããã³ã¹ã®äººä»¶è²»ãç解ããã®ã«åœ¹ç«ã¡ãŸãã ãã®éžæã¯ãäŒç€Ÿã®ã»ãã¥ãªãã£ããªã·ãŒãšç¡æ¡ä»¶ã«äžè²«ããïŒæ
å ±ïŒã»ãã¥ãªãã£ãµãŒãã¹ã«ãã£ãŠæ¿èªãããå¿
èŠããããŸãã
èªåãµãŒããŒããããžã§ãã³ã°

Kubernetesãå¿
èŠãšããç©çãã·ã³/ã¯ã©ãŠãVMïŒdockerãkubeletãkubeãããã·ãetcdã¯ã©ã¹ã¿ãŒïŒã®ã³ã³ããŒãã³ãæ°ã¯éåžžã«å°ãªãã«ãããããããæ°ãããã·ã³ã®è¿œå ãšã¯ã©ã¹ã¿ãŒç®¡çãèªååããå¿
èŠããããŸãã ãããç°¡åãã€ç°¡åã«è¡ãæ¹æ³ã®ããã€ãã®ãªãã·ã§ã³ïŒ
- KOPS-ãã®ããŒã«ã䜿çšãããšãAWSãŸãã¯GCEã®2ã€ã®ã¯ã©ãŠããããã€ããŒã®ããããã«ã¯ã©ã¹ã¿ãŒãã€ã³ã¹ããŒã«ã§ããŸã
- Teraform-äžè¬ã«ãããããç°å¢ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã管çããIACïŒã€ã³ãã©ã¹ãã©ã¯ãã£ã³ãŒããã€ã³ãã©ã¹ãã©ã¯ãã£ãã³ãŒããšããŠïŒã®ã€ããªãã®ãŒã«åŸãããšãã§ããŸãã
- Ansibleã¯ããã«å¹
åºãã¢ããªã±ãŒã·ã§ã³åãã®ããŒã«ã§ãããããããçš®é¡ã®èªååã«äœ¿çšãããŸãã
äžèšã®ææ¡ãªã¹ããã-ã·ã¹ãã ã®é
ä¿¡ã®ã»ã¯ã·ã§ã³ã§ã¯ãåŸè
ã®ãªãã·ã§ã³ïŒ Kubernetesãšã®çµ±åçšã®å°ããªã¢ãžã¥ãŒã«ã䜿çšïŒã奜ãããšã«æ³šæããŠãã ãããäžè¬ã«ãããããçš®é¡ã®èªååãå®è¡ããŸãã ãã ããããšãã°Kubernetesçšã® Teraformãšãã®ã¢ãžã¥ãŒã«ã®äœ¿çšã劚ãããã®ã¯ãããŸããã KOPSã¯ããã¢ã¡ã¿ã«ãã®äœæ¥ã«ã¯å®å
šã«é©çšã§ããŸããããç§ã®æèŠã§ã¯ãAWS / GCEã䜿çšããã®ã«æé©ãªããŒã«ã§ãã
Gitãªããžããªãšã¿ã¹ã¯ãã©ãã«ãŒ

éçºè
ããã®ä»ã®é¢é£ãã圹å²ã®å®å
šãªä»äºã®ããã«ãã³ã©ãã¬ãŒã·ã§ã³ãã³ãŒãã¹ãã¬ãŒãžã®è°è«ã®ããã®å Žæãå¿
èŠã§ãããšèšãå¿
èŠã¯ãããŸããã ããã«æé©ãªãµãŒãã¹ã«ã€ããŠã®è³ªåã«çããã®ã¯é£ããã§ããããã©ãã«ãŒãã©ãã«ãŒã¯ãå€å
žçã«ã¯ç¡æã®redmineãŸãã¯ææã®Jiraãšç¡æã®å€ãåŠæ ¡ã®gerritãŸãã¯ææã®bitbucketã§ã
å
±åäŒæ¥äœæ¥ã®ããã®æãäžè²«æ§ã®ããããããåçšã®2ã€ã®ã¹ã¿ãã¯ã AtlassianãšJetbrainsã«æ³šæãã䟡å€ããããŸãã ãããã®1ã€ãå®å
šã«äœ¿çšããããšãããœãªã¥ãŒã·ã§ã³å
ã®ããŸããŸãªã³ã³ããŒãã³ããçµã¿åãããããšãã§ããŸãã
ãã©ãã«ãŒãšãªããžããªã䜿çšããŠæ倧ã®å¹æãåŸãã«ã¯ãããã2ã€ã®ãšã³ãã£ãã£ãæ©èœãããŠçµ±åããããã®æŠç¥ã«çæããå¿
èŠããããŸãã ãã®ãããããšãã°ãã³ãŒããšé¢é£ã¿ã¹ã¯ã®æŽåæ§ã確ä¿ããããã®ããã€ãã®ãã³ãïŒãã¡ãããæŠç¥ãéžæã§ããŸãïŒïŒ
- ãªã¢ãŒããªããžããªã«ããã·ã¥ããæ©èœã¯ãã¿ã¹ã¯çªå·ïŒ
TASK-1
/ feature-34
ïŒãæã€ãã©ã³ãã«ã®ã¿ååšããå¿
èŠããããŸã - 察å¿ããã¿ã¹ã¯ããé²è¡äžããªã©ã®ã¹ããŒã¿ã¹ã«ãªãå Žåããã¹ãŠã®ãã©ã³ãã¯ãããã¯ãããæŽæ°ã«äœ¿çšã§ããŸããã
- ãã©ã³ãã¯ãäžå®æ°ã®è¯å®çãªã³ãŒãã¬ãã¥ãŒã®åŸã®ã¿ãããŒãžã«äœ¿çšã§ããå¿
èŠããããŸãã
- èªååãç®çãšããã¹ãããã¯ãéçºè
ãçŽæ¥ã¢ã¯ã»ã¹ã§ããªãããã«ããå¿
èŠããããŸãã
master
ãã©ã³ãã¯ãç¹æš©ã®ããéçºè
ã®ã¿ãçŽæ¥å€æŽã§ããããã«ããå¿
èŠããããŸã-ä»ã®ãã¹ãŠã¯ããããã®ããªãŒãã¡ãŒã·ã§ã³ãã®ã¿ãå©çšã§ããŸã- 察å¿ããã¿ã¹ã¯ããé
ä¿¡çšããªã©ã®ã¹ããŒã¿ã¹ä»¥å€ã®å Žåããã©ã³ãã¯ããŒãžã«äœ¿çšã§ããŸãã
Dockerã¬ãžã¹ããª

Docker
管çæ©èœã¯ããµãŒãã¹ã®ä¿åãšé
ä¿¡ã«ãšã£ãŠéåžžã«éèŠã§ãããããåå¥ã«èå¥ããå¿
èŠããããŸãã ããã«å ããŠããã®ãããªã·ã¹ãã ã¯ããŠãŒã¶ãŒãã°ã«ãŒããããã³ã¢ã¯ã»ã¹ã®æäœããµããŒãããå€ãäžèŠãªã€ã¡ãŒãžãåé€ããGUIãšå®ãããªAPIãæäŸããå¿
èŠããããŸãã
ã¯ã©ãŠããœãªã¥ãŒã·ã§ã³ïŒ hub.docker.comãªã© ïŒãšãKubernetesã¯ã©ã¹ã¿ãŒèªäœã®å
éšã«ãã€ã³ã¹ããŒã«ã§ãããã©ã€ããŒããµãŒãã¹ã®äž¡æ¹ã䜿çšã§ããŸãã ããã«å¯Ÿããããªãèå³æ·±ããµãŒãã¹ã¯ãDocker Registryã®äŒæ¥ãœãªã¥ãŒã·ã§ã³ãšããŠäœçœ®ä»ããããŠããVmware Harborã§ãã ææªã®å Žåãè€éãªã·ã¹ãã ãå®éã«å¿
èŠãšãããåã«ç»åãä¿åãããå Žåã¯ãéåžžã®Docker Registryã§å¯Ÿå¿ã§ããŸãã
CI / CDãµãŒãã¹ããã³ãµãŒãã¹æäŸã·ã¹ãã

以åã«èª¬æãããã¹ãŠã®ã³ã³ããŒãã³ãïŒgitãªããžããªãã¿ã¹ã¯ãã©ãã«ãŒãAnsible Playbookã䜿çšããã¡ã¿ãããžã§ã¯ããå€éšäŸåé¢ä¿ïŒã¯ãåå¥ã«äžæåæ¢ããŠååšããããšã¯ã§ããŸããã ãã®ç空ã¯ãç¶ç¶çãªçµ±åããã³é
ä¿¡ãµãŒãã¹ã«ãã£ãŠæºããããå¿
èŠããããŸãã
CI-ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³-ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³
CD-ç¶ç¶çããªããªãŒ-ç¶ç¶çããªããªãŒ
ãµãŒãã¹ã¯éåžžã«ã·ã³ãã«ã§ãã·ã¹ãã ã®é
ä¿¡ãŸãã¯æ§æã®æ¹æ³ã«é¢é£ããããžãã¯ãæããªããã®ã§ãªããã°ãªããŸããã CI / CDãµãŒãã¹ã¯ãå€çããã®ã€ãã³ãïŒgitãªããžããªã®å€æŽãã¿ã¹ã¯ãã©ãã«ãŒã®ã¿ã¹ã¯ç§»è¡ïŒã«å¿çããã¡ã¿ãããžã§ã¯ãã§èª¬æãããŠããã¢ã¯ã·ã§ã³ãèµ·åããã ãã§ãã ããã¯ããã¹ãŠã®ãªããžããªã®ã³ã³ãããŒã«ãã€ã³ãã§ããããããã管çããããŒã«ã§ããããŸãïŒãã©ã³ãã®ããŒãžã upstream/master
ããã®æŽæ°ïŒã
æŽå²çã«ã¯ãJetbrains- TeamCityã®éåžžã«åŒ·åã§ãããšåæã«éåžžã«ã·ã³ãã«ãªããŒã«ã䜿çšããããšã«æ
£ããŠããŸãããããšãã°ç¡æã®Jenkinsã䜿çšããããšã«æ±ºããå Žåãåé¡ã¯çºçããŸããã
äžèšã«åºã¥ããŠãå®éããã®ã¹ããŒã å
šäœã§ã¯ãçµ±åãµãŒãã¹ãéå§ããå¿
èŠãããäž»ãªããã»ã¹ã¯4ã€ã ãã§ããã1ã€ã®è£å©çãªããã»ã¹ãããããŸããã
- ãµãŒãã¹ã®èªåãã¹ã-éåžžããã©ã³ãã®ç¶æ
ãå€æŽãããããAtesting Autotestsããªã©ã®ã¹ããŒã¿ã¹ã®éå§ã«ãããåäžã®ãªããžããªã«å¯ŸããŠ
- ãµãŒãã¹é
ä¿¡-éåžžãQAç°å¢ãšãæ¬çªãç°å¢ã®ããããã®ãã·ã§ãŒã«ãŒã åŸ
æ©äžãããé
ä¿¡åŸ
æ©äžãã®ã¹ããŒã¿ã¹çºçæã«ãå€æ°ã®ãµãŒãã¹ïŒããã³ãªããžããªïŒã®ã¡ã¿ãããžã§ã¯ããã
- ããŒã«ããã¯-éåžžã1ã€ã®ãµãŒãã¹ã®ç¹å®ã®éšåãŸãã¯å€±æããé
ä¿¡ããã»ã¹ããã®å€éšã€ãã³ããŸãã¯ããªã¬ãŒã®çºçæã«ãµãŒãã¹å
šäœã®ã¡ã¿ãããžã§ã¯ããã
- ãµãŒãã¹ã®åé€-ç°å¢ãäžèŠã«ãªã£ã
In QA
ã®ã¹ããŒã¿ã¹ã®åŸãåäžã®ãã¹ãç°å¢ïŒ showroom
ïŒãããšã³ã·ã¹ãã å
šäœãå®å
šã«åé€ããããã«å¿
èŠ - ã€ã¡ãŒãžã¢ã»ã³ããªïŒè£å©ããã»ã¹ïŒ
Docker
ã€ã¡ãŒãžãåéããŠDockerã¬ãžã¹ããªã«éä¿¡ããå¿
èŠãããå ŽåããµãŒãã¹é
ä¿¡ã®ããã»ã¹ãšç¬ç«ããããã»ã¹ã®äž¡æ¹ã§äœ¿çšã§ããŸããå€ãã®å Žåãåºã䜿çšãããŠããã€ã¡ãŒãžïŒããŒã¿ããŒã¹ãäžè¬ãµãŒãã¹ãé »ç¹ã«å€æŽããããµãŒãã¹ïŒ
ãã°åéããã³åŠçã·ã¹ãã

Dockerã³ã³ããããã°ã䜿çšã§ããããã«ããå¯äžã®æ¹æ³ã¯ããã®ã³ã³ããèªäœã§å®è¡ãããŠããã«ãŒãããã»ã¹ã®STDOUTãŸãã¯STDERRã«ãã°ãæžã蟌ãããšã§ãã å®éããµãŒãã¹éçºè
ã«ãšã£ãŠããã®ããŒã¿ã§æ¬¡ã«äœãèµ·ãããã¯åé¡ã§ã¯ãããŸãããäž»ãªããšã¯ãå¿
èŠãªãšãã«ãã§ããã°éå»ã®äºæž¬å¯èœãªæç¹ãŸã§å©çšã§ããããšã§ãã ãããã®æåŸ
ãæºããããã®ãã¹ãŠã®è²¬ä»»ã¯ãKubernetesãšãšã³ã·ã¹ãã ããµããŒããã人ã
ã«ããã£ãŠããŸãã
å
¬åŒããã¥ã¡ã³ãã§ã¯ããã°ãæäœããããã®åºæ¬çã§äžè¬çã«æªããªãæŠç¥ã®èª¬æãèŠã€ããããšãã§ããŸããããã¯ãèšå€§ãªéã®ããã¹ãããŒã¿ãéçŽããŠä¿åããããã®é©åãªãµãŒãã¹ãéžæããã®ã«åœ¹ç«ã¡ãŸãã
, fluentd , , Elasticsearch . , , , .
Elasticsearch , Docker .
Tracing

, "" " , ?!". , , , -, â , .
Opentracing Zipkin . , , , .
, "Trace Id" , , .., , .

Prometheus - Kubernetes " " . Kubernetes , .
, , , , . ( ) ( "staging" ). "-" .
, , , :
- :
- :
- (kubelet, kubeAPI, DNS, etcd, ..)
pod
-
- :
- API
- HTTP API
worker
-- ( , , , ..)
- HTTP
- - ( )
, , email, SMS .
OpsGenie c alertmanager
- Prometheus.
OpsGenie , , , . . , /: â Infra+Devops, â Devops, â .
API Single Sign-on

, , (, "Identity ", - ), , , API . , "Identity ", .
, . , . "" , HTTP .
API , - â . : UI , - . ( ), , UI . UI ( TTL) ( TTL)
, API :
- ( )
- c Single Sign-on :
- HTTP (ID, , )
- (/) Single Sign-on
- HTTP
- API (, Swagger json/yaml )
- URI
(Event Bus) (Enterprise Integration/Service Bus)

, -, . , , . , , - .
, : RabbitMQ , Kafka , ActiveMQ . , CAP - .
, , , " ", , "Dumb pipe â Smart Consumer" , .
"Enterprise Integration/Service Bus" , - . , :
, Apache ServiceMix , .
Stateful

Docker, Kubernetes, , . , "" - ⊠, "" "", , , Docker .
, , Kubernetes .
, Stateful , "":

, , . , , â " ". : Docker , rpm , , python/go/js/php .
. , , " private dependency mirror for ... "

, , . : (1-5 ), â (5-10 ), â (10-20 ), .
, - , , , , , , .
, , . , . .
, . â , , .. , , , ( ), , " ", , !
" ?"âŠ
â , - , , !