çŽ1幎éãã€ã³ãã©ã¹ãã©ã¯ãã£éšéã¯GitLab.comã§å®è¡ãããŠãããã¹ãŠã®ãµãŒãã¹ãKubernetesã«ç§»è¡ããŠããŸããããã®éããµãŒãã¹ãKubernetesã«ç§»è¡ããã ãã§ãªãã移è¡äžã®ãã€ããªããå±éã®ç®¡çã«ãåé¡ãçºçããŸããããã®èšäºã§ã¯ãç§ãã¡ãåŠãã 貎éãªæèšã«ã€ããŠèª¬æããŸãã
GitLab.comã®åœåããããã®ãµãŒããŒã¯ä»®æ³ãã·ã³äžã®ã¯ã©ãŠãã§å®è¡ãããŠããŸããããããã®ä»®æ³ãã·ã³ã¯Chefã«ãã£ãŠç®¡çãããå ¬åŒã®Linuxããã±ãŒãžã䜿çšããŠã€ã³ã¹ããŒã«ãããŸããã¢ããªã±ãŒã·ã§ã³ãæŽæ°ããå¿ èŠãããå Žåã®å±éæŠç¥ã¯ãCIãã€ãã©ã€ã³ã䜿çšããŠèª¿æŽãããã·ãŒã±ã³ã·ã£ã«ãªæ¹æ³ã§ãµãŒããŒããªãŒããæŽæ°ããããšã§ãããã®æ¹æ³ã¯ãé ããŠå°ãéå±ã§ãããGitLab.comãLinuxããã±ãŒãžã䜿çšããèªå·±ç®¡çåGitLabã€ã³ã¹ããŒã«ã®ãŠãŒã¶ãŒãšåãã€ã³ã¹ããŒã«ããã³æ§ææ¹æ³ã䜿çšããããšãä¿èšŒããŸãã
GitLabã®ã³ããŒãã€ã³ã¹ããŒã«ããŠæ§æãããšãã«ãã³ãã¥ããã£ã®éåžžã®ã¡ã³ããŒãçµéšãããã¹ãŠã®æ²ãã¿ãšåã³ãäœéšããããšãéåžžã«éèŠã§ããããããã®æ¹æ³ã䜿çšããŸãããã®ã¢ãããŒãã¯ãã°ããã®éã¯ããŸãæ©èœããŸããããGitLabã®ãããžã§ã¯ãæ°ã1,000äžãè¶ ãããããã¹ã±ãŒãªã³ã°ãšå±éã®ããŒãºãæºãããŠããªãããšã«æ°ä»ããŸããã
Kubernetesãšã¯ã©ãŠããã€ãã£ãGitLabãžã®ç¬¬äžæ©
2017幎ã«ãGitLab Chartsãããžã§ã¯ããäœæãããGitLabãã¯ã©ãŠãã«å±éã§ããããã«æºåãããŠãŒã¶ãŒãGitLabãKubernetesã¯ã©ã¹ã¿ãŒã«ã€ã³ã¹ããŒã«ã§ããããã«ããŸããããã®ãšããGitLabãKubernetesã«ç§»è¡ãããšãSaaSãã©ãããã©ãŒã ã®ã¹ã±ãŒã©ããªãã£ãåäžããå±éãç°¡çŽ åãããã³ã³ãã¥ãŒãã£ã³ã°å¹çãåäžããããšãããããŸãããåæã«ãã¢ããªã±ãŒã·ã§ã³ã®æ©èœã®å€ãã¯ãããŠã³ããããNFSããŒãã£ã·ã§ã³ã«äŸåããŠãããããä»®æ³ãã·ã³ããã®ç§»è¡ãé ããªããŸããã
ã¯ã©ãŠããã€ãã£ããšKubernetesã®è¿œæ±ã«ããããšã³ãžãã¢ã¯æ®µéçãªç§»è¡ãèšç»ããããšãã§ããŸããããã®éãã¢ããªã±ãŒã·ã§ã³ã®NASäŸåé¢ä¿ã®äžéšãç Žæ£ãããã®éçšã§æ°ããæ©èœã®éçºãç¶ããŸããã2019幎å€ã«ç§»è¡ã®èšç»ãéå§ããŠä»¥æ¥ããããã®å¶éã®å€ããåé€ãããGitLab.comãKubernetesã«ç§»è¡ããããã»ã¹ãæ¬æ ŒåããŠããŸãã
Kubernetesã§ã®GitLab.comã®äœæ¥ã®ç¹åŸŽ
GitLab.comã§ã¯ããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ãã©ãã£ãã¯ãåŠçããåäžã®å°åGKEã¯ã©ã¹ã¿ãŒã䜿çšããŸãã ïŒãã§ã«ããªãããŒãªïŒç§»è¡ã®è€éããæå°éã«æããããã«ãããŒã«ã«ã¹ãã¬ãŒãžãNFSã«äŸåããªããµãŒãã¹ã«çŠç¹ãåœãŠãŠããŸãã GitLab.comã¯ãäž»ã«ã¢ããªã·ãã¯Railsã³ãŒãããŒã¹ã䜿çšããŠãããã¯ãŒã¯ããŒãã®ç¹æ§ã«åºã¥ããŠãç¬èªã®ããŒãããŒã«ã«åé¢ãããããŸããŸãªãšã³ããã€ã³ãã«ãã©ãã£ãã¯ãã«ãŒãã£ã³ã°ããŸãã
ããã³ããšã³ãã®å Žåããããã®ã¿ã€ãã¯ãWebãAPIãGit SSH / HTTPSãããã³ã¬ãžã¹ããªãžã®ãªã¯ãšã¹ãã«åããããŸããããã¯ãšã³ãã®å Žåãäºåå®çŸ©ããããªãœãŒã¹å¢çã«å¿ããŠããŸããŸãªç¹æ§ã«åŸã£ãŠãžã§ãããã¥ãŒã«å ¥ããŸããããã«ãããããŸããŸãªã¯ãŒã¯ããŒãã®ãµãŒãã¹ã¬ãã«ç®æšïŒSLOïŒãèšå®ã§ããŸãã
ãããã®GitLab.comãµãŒãã¹ã¯ãã¹ãŠãå€æŽãããŠããªãGitLabHelmãã£ãŒãã䜿çšããŠæ§æãããŠããŸããæ§æã¯ãµããã£ãŒãã§è¡ãããŸãããµããã£ãŒãã¯ããµãŒãã¹ãã¯ã©ã¹ã¿ãŒã«åŸã ã«ç§»è¡ãããšãã«éžæçã«æå¹ã«ã§ããŸããRedisãPostgresãGitLab PagesãGitalyãªã©ãäžéšã®ã¹ããŒããã«ãµãŒãã¹ã移è¡ã«å«ããªãããšã決å®ãããŸããããKubernetesã¯ChefãçŸåšç®¡çããŠããVMã®æ°ãå€§å¹ ã«åæžããŸãã
Kubernetesã®ééæ§ãšæ§æ管ç
ãã¹ãŠã®èšå®ã¯GitLabèªäœã«ãã£ãŠå¶åŸ¡ãããŸãããã®ããã«ãTerraformãšHelmã«åºã¥ã3ã€ã®æ§æãããžã§ã¯ãã䜿çšãããŸããå¯èœãªéããGitLabèªäœã䜿çšããŠGitLabãå®è¡ããããã«åªããŠããŸãããéçšã¿ã¹ã¯ã®ããã«ãåå¥ã®GitLabã€ã³ã¹ããŒã«ããããŸããGitLab.comã®å±éãšæŽæ°ã«ã€ããŠã¯ãGitLab.comã®å¯çšæ§ãšã¯ç¬ç«ããŠããå¿ èŠããããŸãã
Kubernetesã¯ã©ã¹ã¿ãŒã®ãã€ãã©ã€ã³ã¯å¥ã®GitLabã€ã³ã¹ããŒã«ã§å®è¡ãããŸãããã³ãŒããªããžããªã«ã¯ã次ã®ã¢ãã¬ã¹ã§å ¬éãããŠãããã©ãŒããããŸãã
- k8s-workloads / gitlab-com -GitLabHelmãã£ãŒãã®GitLab.comæ§æãã€ã³ãã£ã³ã°ã
- k8s-workloads/gitlab-helmfiles â , GitLab . , PlantUML;
- Gitlab-com-infrastructure â Terraform Kubernetes (legacy) VM-. , , , , , IP-.
å€æŽãè¡ããããšãå ¬éãããŠããçãèŠçŽã詳现ãªå·®åãžã®ãªã³ã¯ãšãšãã«è¡šç€ºãããSREã¯ã¯ã©ã¹ã¿ãŒã«å€æŽãå ããåã«è§£æããŸãã
SREã®å Žåããªã³ã¯ã¯ãæ¬çªç°å¢ã§äœ¿çšãããã¢ã¯ã»ã¹ãå¶éãããŠããGitLabã€ã³ã¹ããŒã«ã®è©³çŽ°ãªå·®åãæããŸããããã«ãããéçšãããžã§ã¯ãïŒSREã®ã¿ãå©çšå¯èœïŒã«ã¢ã¯ã»ã¹ã§ããªãåŸæ¥å¡ãšã³ãã¥ããã£ã¯ãææ¡ãããæ§æå€æŽã衚瀺ã§ããŸããã³ãŒãçšã®GitLabã®ãããªãã¯ã€ã³ã¹ã¿ã³ã¹ãšCIãã€ãã©ã€ã³çšã®ãã©ã€ããŒãã€ã³ã¹ã¿ã³ã¹ãçµã¿åãããããšã«ãããæ§æã®æŽæ°ã«ã€ããŠGitLab.comããã®ç¬ç«æ§ã確ä¿ããªãããåäžã®ã¯ãŒã¯ãããŒãç¶æããŸãã
移è¡äžã«ããã£ãããš
移åäžã«çµéšãèç©ãããKubernetesã§ã®æ°ãã移è¡ãšå±éã«é©çšãããŸãã
1. -
GitLab.comã®GitãªããžããªããŒã¯ã®æ¯æ¥ã®åºåçµ±èšïŒ1æ¥ãããã®ãã€ãæ°ïŒ
Googleã¯ããããã¯ãŒã¯ããªãŒãžã§ã³ã«åå²ããŠããŸãã次ã«ããããã¯ã¢ãã€ã©ããªãã£ãŒãŸãŒã³ïŒAZïŒã«åå²ãããŸãã Gitãã¹ãã£ã³ã°ã¯å€§éã®ããŒã¿ã«é¢é£ä»ããããŠããããããããã¯ãŒã¯ã®åºåãå¶åŸ¡ããããšãéèŠã§ããå éšãã©ãã£ãã¯ã®å Žåãåºå£ã¯åãAZå ã«ããå Žåã«ã®ã¿ç¡æã§ãããã®èšäºã®å·çæç¹ã§ã¯ãéåžžã®å¶æ¥æ¥ã«çŽ100 TBã®ããŒã¿ãæäŸããŠããŸãïŒããã¯Gitãªããžããªã®ã¿ã§ãïŒã以åã®VMããŒã¹ã®ããããžã§ã¯ãåãä»®æ³ãã·ã³äžã«ãã£ããµãŒãã¹ããç°ãªãKubernetesãããã§å®è¡ãããããã«ãªããŸãããããã¯ã以åã¯VMã«å¯ŸããŠããŒã«ã«ã§ãã£ããã©ãã£ãã¯ã®äžéšããã¢ãã€ã©ããªãã£ãŒãŸãŒã³ã®å€ã«åºãå¯èœæ§ãããããšãæå³ããŸãã
å°åã®GKEã¯ã©ã¹ã¿ãŒã䜿çšãããšãåé·æ§ã®ããã«è€æ°ã®ã¢ãã€ã©ããªãã£ãŒãŸãŒã³ã«ãŸãããããšãã§ããŸãã倧éã®ãã©ãã£ãã¯ãçæãããµãŒãã¹ã®ããã«ãå°åã®GKEã¯ã©ã¹ã¿ãŒãåäžãŸãŒã³ã¯ã©ã¹ã¿ãŒã«åå²ããããšãæ€èšããŠããŸããããã«ãããã¯ã©ã¹ã¿ãŒã®åé·æ§ãç¶æããªãããåºåã³ã¹ããåæžãããŸãã
2.å¶éããªãœãŒã¹èŠæ±ãããã³ã¹ã±ãŒãªã³ã°
Registry.gitlab.comã§æ¬çªãã©ãã£ãã¯ãåŠçããŠããã¬ããªã«ã®æ°ããã©ãã£ãã¯ã¯çŽ15ïŒ00UTCã«ããŒã¯ã«ãªããŸãã
移è¡ã®ã¹ããŒãªãŒã¯ãæåã®ãµãŒãã¹ã§ããGitLab ContainerRegistryãKubernetesã«ç§»æ€ãã2019幎8æã«å§ãŸããŸããããã®ãã©ãã£ãã¯ã®å€ãããã·ã§ã³ã¯ãªãã£ã«ã«ãªãµãŒãã¹ã¯ãå€éšäŸåé¢ä¿ãã»ãšãã©ãªãã¹ããŒãã¬ã¹ã¢ããªã±ãŒã·ã§ã³ã§ãããããæåã®ç§»è¡ã«æé©ã§ãããæåã«çºçããåé¡ã¯ãããŒãã®ã¡ã¢ãªãäžè¶³ããŠããããã«ããªãšã³ãããããããããå€æ°ããããšã§ããããã®ããããªã¯ãšã¹ããšå¶éãå€æŽããå¿ èŠããããŸããã
ã¡ã¢ãªæ¶è²»ãæéãšãšãã«å¢å ããã¢ããªã±ãŒã·ã§ã³ã®å Žåã䜿çšãããå¯å€§ãªãå³æ Œãªå¶éãšçµã¿åããããèŠæ± 'ovïŒååé·ã¡ã¢ãªããã' aïŒã®äœãå€ã¯ã飜åïŒé£œåïŒãŠãããã«ã€ãªããããšãããããŸãããé«ã¬ãã«ã®å€äœããã®åé¡ã«å¯ŸåŠããããã«ããªã¯ãšã¹ããå¢ãããŠå¶éãäžããããšã決å®ãããŸãããããã«ãããããŒãããå§åãåãé€ãããããŒãã«é床ã®å§åãããããªããããã®ã©ã€ããµã€ã¯ã«ã確ä¿ãããŸãããããã§ãå¯å€§ãªïŒãããŠã»ãŒåäžã®ïŒèŠæ±å€ãšå¶éå€ã§ç§»è¡ãéå§ããå¿ èŠã«å¿ããŠãããã調æŽããŸãã
3.ã¡ããªã¯ã¹ãšãã°
ã€ã³ãã©ã¹ãã©ã¯ãã£ã¯ãã·ã¹ãã ã®å šäœçãªå¯çšæ§ã«é¢é£ä»ãããã確ç«ããããµãŒãã¹ã¬ãã«ç®æšïŒSLOïŒã䜿çšããŠãé 延ããšã©ãŒçãããã³é£œåç¶æ ã«éç¹ã眮ããŠããŸãã
éå»1幎éãã€ã³ãã©ã¹ãã©ã¯ãã£éšéã®éèŠãªé²å±ã®1ã€ã¯ãSLOã®ç£èŠãšæäœã®æ¹åã§ããã SLOã«ãããåã ã®ãµãŒãã¹ã®ç®æšãèšå®ããããšãã§ãã移è¡äžã«ç¶¿å¯ã«ç£èŠããŸããããã ãããã®ããã«å¯èŠ³æž¬æ§ãåäžãããšããŠããã¡ããªãã¯ãšã¢ã©ãŒãã䜿çšããŠåé¡ãããã«ç¢ºèªã§ãããšã¯éããŸãããããšãã°ãåŸ ã¡æéãšãšã©ãŒçã«çŠç¹ãåœãŠãããšã«ããã移è¡äžã®ãµãŒãã¹ã®ãã¹ãŠã®ãŠãŒã¹ã±ãŒã¹ãå®å šã«ç¶²çŸ ããŠããããã§ã¯ãããŸããã
ãã®åé¡ã¯ãäžéšã®ã¯ãŒã¯ããŒããã¯ã©ã¹ã¿ãŒã«ç§»åããçŽåŸã«çºèŠãããŸããããªã¯ãšã¹ãã®æ°ã¯å°ãªãããæ§æã®äŸåé¢ä¿ãéåžžã«ç¹æ®ãªæ©èœããã§ãã¯ããå¿ èŠãããå Žåã¯ãç¹ã«æ·±å»ã«ãªããŸããã移è¡çµæããåŸãããéèŠãªæèšã®1ã€ã¯ãã¡ããªãã¯ã ãã§ãªãããã°ãšããã³ã°ããŒã«ãïŒã°ã©ãäžã§ã®ååžã«ã€ããŠè©±ããŠãã-çŽTranslãïŒãç£èŠãããšãã«èæ ®ããå¿ èŠãããããšã§ãããä»ãããããã®ç§»è¡ã®ããã«ãæã ã¯ã®è©³çŽ°ãªãªã¹ããå«ãŸãã°ã®ã¯ãšãªãããåé¡ã®å Žåã¯å¥ã®ã·ããããæž¡ãããšãã§ããæ確ãªããŒã«ããã¯æé ãèšç»ããŠããŸãã
å€ãVMã€ã³ãã©ã¹ãã©ã¯ãã£ãšKubernetesã«åºã¥ãæ°ããVMã€ã³ãã©ã¹ãã©ã¯ãã£ã§åããªã¯ãšã¹ãã䞊è¡ããŠåŠçããããšã¯ããŠããŒã¯ãªèª²é¡ã§ããããªããã¢ã³ãã·ãã移è¡ïŒæ°ããã€ã³ãã©ã¹ãã©ã¯ãã£ãžã®ãçŸç¶ã®ãŸãŸãã®ã¢ããªã±ãŒã·ã§ã³ã®è¿ éãªè»¢éã詳现ã«ã€ããŠã¯ãããšãã°ãããã§èªãããšãã§ããŸã-çŽTranslãïŒãšã¯ç°ãªãããå€ããVMãšKubernetesã§ã®äžŠåäœæ¥ã«ã¯æ¬¡ã®ããŒã«ãå¿ èŠã§ããç£èŠã·ã¹ãã ã¯äž¡æ¹ã®ç°å¢ãšäºææ§ããããã¡ããªãã¯ã1ã€ã®ãã¥ãŒã«çµã¿åãããããšãã§ããŸããã移è¡äžã«äžè²«ããå¯èŠ³æž¬æ§ãå®çŸããã«ã¯ãåãããã·ã¥ããŒããšãã°ã¯ãšãªã䜿çšããããšãéèŠã§ãã
4.ãã©ãã£ãã¯ãæ°ããã¯ã©ã¹ã¿ãŒã«åãæ¿ãã
GitLab.comã®å Žåãäžéšã®ãµãŒããŒã¯ã«ããªã¢ã¹ããŒãžã«å²ãåœãŠãããŸãã Canary Parkã¯ã瀟å ãããžã§ã¯ãã«å¯Ÿå¿ããŠããããŠãŒã¶ãŒãæå¹ã«ããããšãã§ããŸããããããäœããããŸããã€ã³ãã©ã¹ãã©ã¯ãã£ãšã¢ããªã±ãŒã·ã§ã³ã«å ããããå€æŽãæ€èšŒããããšãç®çãšããŠããŸãã移è¡ãããæåã®ãµãŒãã¹ã¯ãéãããéã®å éšãã©ãã£ãã¯ãåãå ¥ããããšããå§ãŸããŸãããåŒãç¶ããã®æ¹æ³ã䜿çšããŠããã¹ãŠã®ãã©ãã£ãã¯ãã¯ã©ã¹ã¿ãŒã«è»¢éããåã«SLOãæºããããŠããããšã確èªããŸãã
移è¡ã®å Žåãããã¯ãå éšãããžã§ã¯ããžã®æåã®èŠæ±ãKubernetesã«éä¿¡ããã次ã«HAProxyãä»ããŠããã¯ãšã³ãã®éã¿ãå€æŽããããšã«ãããæ®ãã®ãã©ãã£ãã¯ãã¯ã©ã¹ã¿ãŒã«åŸã ã«åãæ¿ããããšãæå³ããŸããVMããKubernetesã«ç§»è¡ããéçšã§ãå€ãã€ã³ãã©ã¹ãã©ã¯ãã£ãšæ°ããã€ã³ãã©ã¹ãã©ã¯ãã£ã®éã§ãã©ãã£ãã¯ããªãã€ã¬ã¯ãããç°¡åãªæ¹æ³ãããããããã£ãŠã移è¡åŸã®æåã®æ°æ¥éã¯å€ãã€ã³ãã©ã¹ãã©ã¯ãã£ãããŒã«ããã¯ã§ããããã«ããŠããããšãéåžžã«æçã§ããããšãæããã«ãªããŸããã
5.ãããã®äºååãšãã®äœ¿çš
ã»ãŒå³åº§ã«ã次ã®åé¡ãç¹å®ãããŸãããã¬ãžã¹ããªãµãŒãã¹ã®ãããã¯ããã«éå§ãããŸããããSidekiqã®ãããã®èµ·åã«ã¯æ倧2åããããŸããã Sidekiqã®é·æéå®è¡ãããã¯ããžã§ããè¿ éã«åŠçããè¿ éã«æ¡åŒµããå¿ èŠãããã¯ãŒã«ãŒã®ã¯ãŒã¯ããŒããKubernetesã«ç§»è¡ãå§ãããšãã«åé¡ã«ãªããŸããã
ãã®å ŽåãKubernetesã®Horizoâântal Pod AutoscalerïŒHPAïŒã¯ãã©ãã£ãã¯ã®å¢å ãé©åã«åŠçããŸãããã¯ãŒã¯ããŒãã®ç¹æ§ãèæ ®ããäºåã®ããã容éãå²ãåœãŠãããšãéèŠã§ãããšããæèšããããŸããïŒç¹ã«éèŠåæ£ãäžåäžãªç°å¢ã§ã¯ïŒãç§ãã¡ã®å Žåããžã§ããçªç¶æ¥å¢ããæ¥éãªã¹ã±ãŒãªã³ã°ãå¿ èŠã«ãªããããŒãããŒã«ãã¹ã±ãŒãªã³ã°ããæéããªããªãåã«CPUãªãœãŒã¹ã飜åç¶æ ã«ãªããŸããã
ã¯ã©ã¹ã¿ãŒããã§ããã ãå€ããçµãåºããããšããèªæã¯åžžã«ãããŸãããæåã¯ããã©ãŒãã³ã¹ã®åé¡ã«çŽé¢ããŠããŸããããä»ã§ã¯ååãªãããããžã§ããããå§ããŠãåŸã§ã¹ã±ãŒã«ããŠã³ããSLOã泚ææ·±ãç£èŠããŠããŸãã SidekiqãµãŒãã¹ã®ãããã®èµ·åãå€§å¹ ã«å éããå¹³åã§çŽ40ç§ããããŸããGitLab.comãšãå ¬åŒã®GitLab Helmãã£ãŒãã䜿çšããèªå·±ç®¡çã€ã³ã¹ããŒã«ã®ãŠãŒã¶ãŒã®äž¡æ¹ãããããã®èµ·åæéã®ççž®ã®æ©æµãåããŠããŸãã
çµè«
åãµãŒãã¹ã移è¡ããåŸãKubernetesãæ¬çªç°å¢ã§äœ¿çšããããšã®å©ç¹ãã€ãŸããããé«éã§å®å šãªã¢ããªã±ãŒã·ã§ã³ã®å±éãã¹ã±ãŒãªã³ã°ãããã³ããå¹ççãªãªãœãŒã¹å²ãåœãŠã享åããŸãããããã«ã移è¡ã®å©ç¹ã¯GitLab.comãµãŒãã¹ãè¶ ããŠããŸããå ¬åŒã®ãã«ã ãã£ãŒããæ¹åãããã³ã«ããŠãŒã¶ãŒã«ãã¡ãªããããããŸãã
Kubernetesã®ç§»è¡ã®åéºã®è©±ã楜ããã§ããã ããã§ããããããã¹ãŠã®æ°ãããµãŒãã¹ãåŒãç¶ãã¯ã©ã¹ã¿ãŒã«ç§»è¡ããŸããè¿œå æ å ±ã¯ã次ã®åºçç©ããå ¥æã§ããŸãã
- «ãªãKubernetes <br>ã«ç§»è¡ããã®ã§ããïŒ";
- " Kubernetesã®GitLab.com ";
- GitLab.comããKubernetesãžã®ç§»è¡ã«é¢ãããšããã¯ã
翻蚳è ããã®PS
ç§ãã¡ã®ããã°ãèªãã§ãã ããïŒ