
11æ7æ¥ã
HighLoad ++ 2017ã«ã³ãã¡ã¬ã³ã¹ã®DevOps and Operationsã»ã¯ã·ã§ã³ã§ããKubernetesãšGitLabã§ã®ãã¹ãCI / CDãã©ã¯ãã£ã¹ããšããã¿ã€ãã«ã®ã¬ããŒããçºè¡šãããŸããã ãã®äžã§ããããã®ãªãŒãã³ãœãŒã¹ãœãªã¥ãŒã·ã§ã³ã«åºã¥ããŠå¹æçãªCI / CDããã»ã¹ãæ§ç¯ããéã«çããåé¡ã解決ããå®è·µçãªçµéšãå
±æããŠããŸãã
äŒçµ±çã«ãç§ãã¡ã¯
ã¬ããŒã ïŒçŽ1æéãèšäº
ãããã¯ããã«æçïŒãšããã¹ã圢åŒã§ã®äž»ãªçµã蟌ã¿ã®
ãããªãæ瀺ããŠåãã§ããŸãã
CI / CDããã³äž»èŠãªèŠä»¶
CI / CDïŒç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³ãç¶ç¶çããªããªãç¶ç¶çããªããªïŒã«ãããGitãªããžããªããæ¬çªãžã®ã³ãŒãé
ä¿¡ãšãæ¬çªããã®ãåé€ããŸã§ã®ãã®åŸã®ã¡ã³ããã³ã¹ã®ãã¹ãŠã®æ®µéãç解ããŸãã CI / CDãšããçšèªã®æ¢åã®è§£éã§ã¯ããã®æåŸã®æ®µéïŒéçšæäœïŒã«å¯ŸããŠç°ãªãæ
床ããšãããšãã§ããŸãããç§ãã¡ã®çµéšã§ã¯ãCI / CDããé€å€ãããšå€ãã®åé¡ãçºçããŸãã
ç¹å®ã®ãã©ã¯ãã£ã¹ã説æããåã«ãCI / CDã®è€éãã«åœ±é¿ãäžããäž»ãªèŠå ããŸãšããŸããã
- ã¡ã€ã³ããã»ã¹ã¯ã©ã®ããã«æ§ç¯ãããŸããïŒ å¯èœãªãªãã·ã§ã³ïŒ1ã€ä»¥äžã®ç°å¢ãåçç°å¢ãè€æ°ã®åæ£ãµã€ãã
- ãã¹ãã¯ã©ã®ããã«è¡ãããŸããïŒ ã³ãŒãã¢ãã©ã€ã¶ãŒã®å®è¡ãç°å¢ãªãã®ïŒã€ãŸããã©ã³ã¿ã€ã äŸåæ§ã®ãªãïŒãŠããããã¹ããç°å¢ã§ã®æ©èœ/çµ±å/ã³ã³ããŒãã³ããã¹ãããã€ã¯ããµãŒãã¹ã®ãå®å
šãªãç°å¢ã§ã®ãã¹ãïŒãšã³ãããŒãšã³ãããªã°ã¬ãã·ã§ã³ïŒã
- ã©ã®ãããªæš©å©ã®åé¢ãå¿
èŠã§ããïŒ ã·ã³ãã«ïŒã³ãŒãã®èšè¿°/ç¹å®ã®ãŠãŒã¶ãŒåãã®ããŒã«ã¢ãŠãã®ã¿ïŒãç°å¢å
ã®ããŸããŸãªæš©éããã«ãã¹ããŒãžæ¿èªïŒããŒã ãªãŒããŒãã¹ããŒãžäžã§ã®ããŒã«ã¢ãŠããå¯èœã«ããQA-æ¬çªç°å¢ã§ïŒã倧åŠã®ãœãªã¥ãŒã·ã§ã³ã
- ã¢ããªã±ãŒã·ã§ã³ã®ã¢ãŒããã¯ãã£ã¯äœã§ããïŒ ã¹ããŒãã¬ã¹ãµãŒãã¹ãã¹ããŒããã«ã¢ããªã±ãŒã·ã§ã³ããã«ãã³ã³ããŒãã³ãã¢ããªã±ãŒã·ã§ã³ããã€ã¯ããµãŒãã¹ã¢ãŒããã¯ãã£ã
ãããã®ãªãã·ã§ã³ã¯ãã¹ãŠäžè¬çãªã¹ã±ãžã¥ãŒã«ã«ãŸãšããããŠããããããã®ããŒãºããã®ä»ã®ããŒãºãã©ã®ããŒã«ã§è§£æ±ºã§ãããã瀺ããŠããŸãã

CI / CDã®èŠä»¶ã¯ãä»ã«ã-ããäžè¬çïŒãã ãéèŠã§ã¯ãããŸããïŒïŒã§ãïŒ

æåŸã«ãCI / CDã®ã·ã¹ãã ãå®è£
ããã³ä¿å®ããäŒç€ŸãšããŠã䜿çšãã補åã«è¿œå èŠä»¶ããããŸãã
- ãããã¯ãªãŒãã³ãœãŒã¹ã§ãªããã°ãªããŸããïŒãããç§ãã¡ã®ã人çã®å±æãã§ãããåââé¡ã®å®éçãªåŽé¢ïŒã³ãŒãã®å¯çšæ§ãã¢ããªã±ãŒã·ã§ã³ã®å¶éããªãããšïŒã
- ã ãã«ãã¹ã±ãŒã« ãïŒè£œåã1人ã®éçºè
ãš50人ã®äŒæ¥ã§çããå¹æçã«æ©èœããå¿
èŠããããŸãïŒã
- çžäºéçšæ§ ïŒ çžäºäºææ§ãæ©åšãµãã©ã€ã€ãŒãã¯ã©ãŠããããã€ããŒãªã©ããã®ç¬ç«æ§ïŒ;
- æäœã®åçŽã ã
- å°æ¥ã«çŠç¹ãåœãŠãŸã ïŒè£œåãçŸåšé©åã§ããã ãã§ãªããéçºã®èŠéããããããšã確èªããå¿
èŠããããŸãïŒã
CI / CDãœãªã¥ãŒã·ã§ã³
ãã¹ãŠã®èŠä»¶ãæºãã補åã®ã¹ã¿ãã¯ã«ã¯ã次ã®ãã®ããããŸãã
- Gitlab
- Docker
- Kubernetes;
- HelmïŒKubernetesã§ã®ããã±ãŒãžç®¡ççšïŒ;
- dapp ïŒãã«ãããã³å±éããã»ã¹ãç°¡çŽ å/æ¹åããããã®ãªãŒãã³ãœãŒã¹ãŠãŒãã£ãªãã£ïŒã 2019幎8æ13æ¥æŽæ°ïŒ dappãããžã§ã¯ãã®ååãwerfã«å€æŽããããã®ã³ãŒããGoã«æžãæããããããã¥ã¡ã³ãã倧å¹
ã«æ¹åãããŸããã
äžèšã®ããŒã«ã䜿çšããGitããæäœãŸã§ã®äžè¬çãªCI / CDãµã€ã¯ã«ã¯æ¬¡ã®ããã«ãªããŸãã

ç·Žç¿ãã
1çª Dockerã€ã¡ãŒãžã®æ§æ
ã€ã¡ãŒãžã«ã¯ãã¢ããªã±ãŒã·ã§ã³ãæ©èœããããã«å¿
èŠãªãã¹ãŠãå«ãŸããŠããå¿
èŠããããŸãã

2çª ãã¹ãŠãäžç®ã§
äžåºŠçµã¿ç«ãŠãããDockerã€ã¡ãŒãžã¯ã©ãã§ã䜿çšããå¿
èŠããããŸãã ããããªããšãæ¬çªç°å¢ã«ãã³ãã§éãããïŒå¥ã®æç¹ã§åçµã¿ç«ãŠãããïŒåããã®ããæ€èšŒã®ããã«QAã«å±ããªãå ŽåããããŸãã
git branch
ããäžæçãªç»åãåéãã
git tag
ããç»åããªãªãŒã¹ããŸãïŒ

çªå·3ã ããŒã«ã¢ãŠããšç§»è¡
Kubernetesã§èª¬æãããŠããããŸããŸãªã³ã³ããŒãã³ãã®åäœïŒããã¯ãšã³ãã¯
DeploymentãšããŠãDBMSã¯
StatefulSetãšããŠãªã©ïŒã¯äºãã«äŸåããŸãã ãçŽæ¥çãªãããŒã«ã¢ãŠãã®å ŽåãK8ã¯ã³ã³ããŒãã³ããæŽæ°ããŠåèµ·åããŸãïŒèµ·åã«å€±æããå ŽåïŒã

ãããã®ãã¹ãŠã®ã€ãã³ããã³ã³ããŒãã³ãã«ãã£ãŠæ£ããåŠçããããšããŠãïŒäºæž¬ãããã¯ãã§ãïŒãKubernetesã®ããŸããŸãªã¿ã€ã ã¢ãŠãã«ããåèšããŒã«ã¢ãŠãæéãé
延ããä»ã®ãµãŒãã¹ã®éå§ãåŸ
æ©ããå¿
èŠãããããã«ããªã¬ãŒïŒããã³çŽ¯ç©ïŒãããŸãïŒããšãã°ãããã¯ãšã³ãã¯æŽæ°ãããããŒã¿ããŒã¹ãå©çšå¯èœã«ãªãã®ãåŸ
ã£ãŠããŸãïŒã€ãŸãã移è¡ããïŒã
ããŒã«ã¢ãŠãæéãççž®ããã«ã¯ãã³ã³ããŒãã³ãéã®æ瀺çãªäŸåé¢ä¿ïŒããã¯ãšã³ããDBMSã®å©çšãåŸ
æ©ããŠããïŒã ãã§ãªããéæ¥çãªäŸåé¢ä¿ïŒç§»è¡åã«ããã¯ãšã³ããæŽæ°ããªãã§ãã ããïŒãèæ
®ããïŒããã³èŠå®ããïŒå¿
èŠããããŸãã

çªå·4ã ããŒãã¹ãã©ããdb
DBMSã«ã¯ã2ã€ã®æ¹æ³ã§ããŒã¿ãå
¥åãããŸããå®æãããã³ããèªã¿èŸŒãããã·ãŒã/ãã£ã¯ã¹ãã£ãèªã¿èŸŒããã§ãã æåã®ã±ãŒã¹ã®Kubernetesã§ã®æ¹æ³ã¯ãDBMSã®èµ·ååŸã«ãžã§ããéå§ãããã³ããããŒãããããšã§ãã ãã®åŸ-移è¡ã®éå§ïŒéæ¥çã«ãã³ãã«äŸåïŒããããŠ-ããã¯ãšã³ãã®éå§ïŒéæ¥çã«ç§»è¡ã«äŸåïŒã
sidã®å Žåã®èµ·åã·ãŒã±ã³ã¹ã¯å€æŽããã次ã®ããã«ãªããŸãã1ïŒDBMSã2ïŒç§»è¡ã3ïŒsidã®ã¿ã¹ã¯ã4ïŒããã¯ãšã³ãïŒã·ãŒãã«äŸåããªããããsidãšäžŠè¡ããŠå®è¡ã§ããŸãïŒã

ããŒãã¹ãã©ããããŒã¿ããŒã¹ã®ããŸããŸãªãã¹ãééããåŸã2ã€ã®æé©æ§ã«å°éããŸããããã¹ã¿ãŒããã®ã·ãŒã/ãã£ã¯ã¹ãã£ãå«ããã€ããã³ããšã¹ããŒãžã³ã°çšã®ãã€ããã³ãã§ãã

5çª ããŠã³ã¿ã€ã ãªãã§å±é
Kubernetesã§ã¢ããªã±ãŒã·ã§ã³ã®æ°ããããŒãžã§ã³ãæ£ããå±éããŠãããã¹ãŠã®ãã¥ã¢ã³ã¹ãèªåçã«èæ
®ãããããã§ã¯ãããŸããã å®å
šãªããŠã³ã¿ã€ã ãæ¬åœã«ä¿èšŒããã«ã¯ïŒ
- ãã¹ãŠã®HTTPãªã¯ãšã¹ããæ£ããå®äºããããšãå¿ããªãã§ãã ããã
- K8sã§èŠå®ãããŠããã¬ãã£ãã¹ãããŒãã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ïŒãªãŒãã³ããŒãïŒã®å®éã®å¯çšæ§ã確èªããŸãã
- å±éäžã®è² è·ãã·ãã¥ã¬ãŒãããŸãïŒãã¹ãŠã®èŠæ±ãå®äºãããã©ããã確èªããŸãïŒã
- å±éäžã«ã€ã³ãã©ã¹ãã©ã¯ãã£ã§å©çšã§ããçåºã®çç£æ§ã®ããŒãžã³ãæäŸããŸãã

No. 6ã ãååæ§ãããŒã«ã¢ãŠã
ã€ã³ãã©ã¹ãã©ã¯ãã£ã®ã³ã³ããŒãã³ãã®ã¢ããã°ã¬ãŒãäžã«ãšã©ãŒãçºçããå ŽåïŒæŽæ°ãå±éã§ããŸããã§ããïŒãGitLabãã€ãã©ã€ã³ã«å¯Ÿå¿ããéç¥ããããŸãããã€ã³ãã©ã¹ãã©ã¯ãã£èªäœã¯ç§»è¡ç¶æ
ã®ãŸãŸã§ãã GitLabããèãããããã«ãåé¡ã®ã³ã³ããŒãã³ãã¯å
ã®ïŒå€ãïŒããŒãžã§ã³ãä¿åããŸããããæ°ããããŒãžã§ã³ãå®å
šã«ã¹ãããããããšã¯ã§ããŸããã
ãã®ãããªãšã©ãŒãçºçããå Žåãçµã¿èŸŒã¿ã®ããŒã«ããã¯æ©èœã䜿çšããŠåé¡ã解決ããŸãã ã»ãšãã©ã®å Žåãããã¯æ¬çªç°å¢ã§ã®ã¿æäŸãããã¹ãã§ãã éçºåè·¯ã§ã¯ãïŒåé¡ã®åå ãç解ããããã«ïŒã»ãšãã©ã®å Žåãé·ç§»ç¶æ
ã®åé¡ã³ã³ããŒãã³ãã確èªããå¿
èŠããããŸãã
çªå·7ã åçãªç°å¢
GitLabã®çµã¿èŸŒã¿æ©èœã«ããããã¹ãŠã®ãã©ã³ãã®git pushïŒå®å
šââãªã€ã³ãã©ã¹ãã©ã¯ãã£ããŒãã¹ãã©ããã®Helmãã£ãŒãã䜿çšïŒã䜿çšããŠãããã«äœ¿çšã§ããã¢ããªã±ãŒã·ã§ã³ã€ã³ã¹ããŒã«ïŒåãããŒã ã¹ããŒã¹ïŒãKubernetesã«ãããã€ã§ããŸãã åæ§ã«ããã©ã³ããåé€ããããšãããŒã ã¹ããŒã¹ãåé€ãããŸãã
ãã ãããã®æ©äŒãç©æ¥µçã«æŽ»çšããããšã§ãã€ã³ãã©ã¹ãã©ã¯ãã£ã«å¿
èŠãªãªãœãŒã¹ãæ¥éã«å¢å ããŠããŸãã ãããã£ãŠãåçç°å¢ãæé©åããããã®æšå¥šäºé
ãããã€ããããŸãã

çªå·8ã ãã¹ã
åçŽãªãã¹ãã®å®è£
ã§ãã¹ãŠãåçŽãªå ŽåïŒç°å¢ãå¿
èŠãšããªãïŒãæ©èœãã¹ãããã³çµ±åãã¹ãã§ã¯ãHelmã䜿çšããŠåçç°å¢ãäœæããããšããå§ãããŸãã

ãŸãšã
CI / CDã®èŠä»¶ãåããåæã¹ã±ãžã¥ãŒã«ã«æ»ã...

ãªãŒãã³ãœãŒã¹è£œåã«åºã¥ããŠèª¬æãããŠãããã©ââã¯ãã£ã¹ã«ãããç·è²ã§ããŒã¯ãããåé¡ã解決ã§ããŸãã ãã€ãªã¬ããã¯ãFlantãæ¥ã
åãçµãã§ããåé¡ã®é åã匷調ããŠããŸãã
ãããªãšã¹ã©ã€ã
ããã©ãŒãã³ã¹ã®ãããªïŒçŽ1æéïŒãYouTubeã«å
¬éãããŸãã ã
ã¬ããŒãã®ãã¬ãŒã³ããŒã·ã§ã³ïŒ
PS
ããã°ã®ä»ã®ã¬ããŒãïŒ
次ã®åºçç©ã«ãèå³ããããããããŸããã