27æ2019æ¥ããã§ã¹ãã£ãã«ã®äžç°ãšããŠéå¬ãããDevOpsConf XNUMXã«ã³ãã¡ã¬ã³ã¹ã®ã¡ã€ã³ããŒã«ã«ãŠ ãç¶ç¶çããªããªãŒãã»ã¯ã·ã§ã³ã®äžç°ãšããŠããwerf â Kubernetes ã® CI/CD ããŒã«ããšé¡ããã¬ããŒããçºè¡šãããŸãããããã¯ãããã«ã€ããŠèªã£ãŠããŸã Kubernetesã«ãããã€ããéã«èª°ããçŽé¢ããåé¡ãšèª²é¡ãŸããããã«ã¯æ°ã¥ããªããããããªããã¥ã¢ã³ã¹ã«ã€ããŠã説æããŸããå¯èœãªè§£æ±ºçãæ€èšããããšã§ããªãŒãã³ãœãŒã¹ããŒã«ã§ãããã©ã®ããã«å®è£ ããããã瀺ããŸãã .
ãã¬ãŒã³ããŒã·ã§ã³ä»¥æ¥ãç§ãã¡ã®ãŠãŒãã£ãªãã£ïŒä»¥åã¯dappãšããŠç¥ãããŠããŸããïŒã¯æŽå²çãªãã€ã«ã¹ããŒã³ãè¶ ããŸããã GitHubã§1000åã®ã¹ã¿ãŒ â ãŠãŒã¶ãŒ ã³ãã¥ããã£ã®æ¡å€§ã«ãããå€ãã® DevOps ãšã³ãžãã¢ã®äœæ¥ã楜ã«ãªãããšãé¡ã£ãŠããŸãã

ããã§ã¯ç޹ä»ããŸããã (çŽ 47 åãèšäºãããã¯ããã«æ
å ±éãå€ã) ãšãã®äž»ãªèŠçŽãããã¹ã圢åŒã§æäŸããŸããããè¡ããïŒ
Kubernetesãžã®ã³ãŒãã®é ä¿¡
ã¬ããŒãã§ã¯ãwerfã§ã¯ãªãKubernetesã®CI/CDã«ã€ããŠäž»ã«åãäžããŸããã€ãŸããç§ãã¡ã®ãœãããŠã§ã¢ã¯Dockerã³ã³ããã«ããã±ãŒãžåãããŠãããšããããšã§ãã ïŒããã«ã€ããŠã¯ )æ¬çªç°å¢ã§ã®å®è¡ã«ã¯ K8s ã䜿çšãããŸãã ïŒããã«ã€ããŠã¯ ).
Kubernetes ã§ã®é ä¿¡ã¯ã©ã®ããã«ãªããŸãã?
- ã³ãŒããšããããã«ãããããã®æé ãèšèŒããã Git ãªããžããªããããŸããã¢ããªã±ãŒã·ã§ã³ã¯ Docker ã€ã¡ãŒãžã«çµã¿èŸŒãŸããDocker ã¬ãžã¹ããªã«å ¬éãããŸãã
- åããªããžããªã«ã¯ãã¢ããªã±ãŒã·ã§ã³ããããã€ããã³å®è¡ããæ¹æ³ã®èª¬æãå«ãŸããŠããŸãããããã€æ®µéã§ã¯ããããã®æç€ºã Kubernetes ã«éä¿¡ãããKubernetes ã¯ã¬ãžã¹ããªããå¿ èŠãªã€ã¡ãŒãžãååŸããŠå®è¡ããŸãã
- ããã«ãéåžžã¯ãã¹ãããããŸãããã®ãã¡ã®ããã€ãã¯ãç»åãå ¬éãããšãã«å®è¡ã§ããŸãããŸããåãæé ã䜿çšããŠãã¢ããªã±ãŒã·ã§ã³ã®ã³ããŒãïŒå¥ã® K8s åå空éãŸãã¯å¥ã®ã¯ã©ã¹ã¿ãŒã«ïŒãããã€ããããã§ãã¹ããå®è¡ããããšãã§ããŸãã
- æåŸã«ãGit ããã€ãã³ã (ãŸãã¯ãã¿ã³ã®æŒäž) ãåä¿¡ããæå®ããããã¹ãŠã®ã¹ããŒãž (ãã«ããå ¬éããããã€ããã¹ã) ãåŒã³åºã CI ã·ã¹ãã ãå¿ èŠã§ãã

ããã§éèŠãªæ³šæäºé
ãããã€ããããŸãã
- äžå€ã®ã€ã³ãã©ãæã£ãŠãããã ïŒäžå€ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ïŒãã¹ãŠã®æ®µéïŒã¹ããŒãžã³ã°ãæ¬çªãªã©ïŒã§äœ¿çšãããã¢ããªã±ãŒã·ã§ã³ ã€ã¡ãŒãžã äžã€ã¯å¿ ããã. ããã«ã€ããŠãããã«è©³ããäŸãæããŠè©±ããŸããã .
- ç§ãã¡ã¯ã€ã³ãã©ã¹ãã©ã¯ãã£ã»ã¢ãºã»ã³ãŒãã¢ãããŒããæ¡çšããŠããã®ã§ ïŒIaCïŒã¢ããªã±ãŒã·ã§ã³ã³ãŒãããã®ã¢ã»ã³ããªãšèµ·åã®æç€ºã¯ã 1ã€ã®ãªããžããªã«æ£ç¢ºã«. 詳现ã«ã€ããŠã¯ã .
- é éãã§ãŒã³ ïŒé éïŒ éåžžã¯æ¬¡ã®ããã«èããŸããã¢ããªã±ãŒã·ã§ã³ã¯çµã¿ç«ãŠããããã¹ãããããªãªãŒã¹ãããŸã ïŒãªãªãŒã¹æ®µéïŒ ããã§é éãå®äºããŸããããããå®éã«ã¯ããŠãŒã¶ãŒã¯ããªããå±éãããã®ãåãåããŸãã ã㌠次ã«ããããæ¬çªç°å¢ã«çŽåãã圌ãããã«è¡ã£ãŠæ¬çªç°å¢ãæ©èœãããšãã§ããã€ãŸãããµãã©ã€ãã§ãŒã³ã¯çµãããè¿ããã®ã ãšæããŸãã éçšæ®µéã®ã¿ ïŒèµ°ãïŒãã£ãšæ£ç¢ºã«èšããšãã³ãŒããæ¬çªç°å¢ããåé€ãããç¬éïŒæ°ããã³ãŒãã«çœ®ãæããããç¬éïŒã§ãåæ§ã§ãã
åè¿°ã® Kubernetes é ä¿¡ã¹ããŒã ã«æ»ããŸããããããã¯ç§ãã¡ã ãã§ãªããæåéããã®åé¡ã«åãçµãã ãã¹ãŠã®äººã«ãã£ãŠçºæãããŸãããå®éããã®ãã¿ãŒã³ã¯çŸåšGitOpsãšåŒã°ããŠããŸã ïŒãã®çšèªãšãã®èåŸã«ããèãæ¹ã«ã€ããŠããã«è©³ããèªãããšãã§ããŸã )ãèšç»ã®æ®µéãèŠãŠã¿ãŸãããã
ãã«ãã¹ããŒãž
2019 幎çŸåšãDockerfile ã®èšè¿°æ¹æ³ãšå®è¡æ¹æ³ã誰ããç¥ã£ãŠãããããDocker ã€ã¡ãŒãžã®æ§ç¯ã«ã€ããŠã¯äœãèšãããšã¯ãªãããã§ãã docker build?.. ããã§æ³šç®ããããã¥ã¢ã³ã¹ã¯ä»¥äžã®ãšããã§ãã
- ç»åã®éã¿ éèŠãªã®ã§äœ¿ã£ãŠãã ãã ã¢ããªã±ãŒã·ã§ã³ãåäœããããã«æ¬åœã«å¿ èŠãªãã®ã ããã€ã¡ãŒãžã«æ®ããŸãã
- å±€ã®æ° ãã§ãŒã³ãçµã¿åãããããšã§æå°éã«æããå¿
èŠããããŸã
RUN-æå³ã«ããã³ãã³ãã - ããããããã«ãã£ãŠæ°ããªåé¡ãçããŸãã ãããã°ã¢ã»ã³ããªãã¯ã©ãã·ã¥ããå Žåãåé¡ã®åå ãšãªã£ããã§ãŒã³ããå¿ èŠãªã³ãã³ããèŠã€ããå¿ èŠãããããã§ãã
- ãã«ãé床 倿Žãè¿ éã«å±éããŠçµæã確èªããããããããã¯éèŠã§ããããšãã°ãã¢ããªã±ãŒã·ã§ã³ããã«ããããã³ã«ãèšèªã©ã€ãã©ãªå ã®äŸåé¢ä¿ãåæ§ç¯ããå¿ èŠã¯ãããŸããã
- å€ãã®å Žåã1ã€ã®Gitãªããžããªãã å€ãã®ç»åããã¯ãäžé£ã® Dockerfile (ãŸã㯠1 ã€ã®ãã¡ã€ã«å ã®ååä»ãã¹ããŒãž) ãšããããé çªã«çµã¿ç«ãŠã Bash ã¹ã¯ãªããã«ãã£ãŠè§£æ±ºã§ããŸãã
ããã¯èª°ããçŽé¢ããæ°·å±±ã®äžè§ã«éããŸãããããããç¹ã«æ¬¡ã®ãããªä»ã®åé¡ããããŸãã
- çµã¿ç«ãŠæ®µéã§ã¯äœââããå¿ èŠã«ãªãããšãå€ã ããŠã³ã (ããšãã°ãapt ãªã©ã®ã³ãã³ãã®çµæããµãŒãããŒãã£ã®ãã£ã¬ã¯ããªã«ãã£ãã·ã¥ããŸã)ã
- 欲ãã Ansible ã·ã§ã«ã§æžã代ããã«ã
- 欲ãã Dockerãªãã§ãã«ããã (ã³ã³ãããå®è¡ã§ãã Kubernetes ã¯ã©ã¹ã¿ãŒããã§ã«ããã®ã«ããããå®è¡ããããã«ãã¹ãŠãæ§æããå¿ èŠããã远å ã®ä»®æ³ãã·ã³ããªãå¿ èŠãªã®ã§ããããã)
- 䞊åã¢ã»ã³ããªããã¯ãããŸããŸãªæ¹æ³ã§çè§£ã§ããŸããDockerfile ããã®ç°ãªãã³ãã³ã (ãã«ãã¹ããŒãžã䜿çšãããŠããå Žå)ã1 ã€ã®ãªããžããªã®è€æ°ã®ã³ããããè€æ°ã® Dockerfile ãªã©ã§ãã
- 忣ã¢ã»ã³ããª: ãã£ãã·ã¥ãæ¶ããŠããŸãããããäžæçãªããããã«äœããåéãããã®ã§ããããå¥ã®å Žæã«ä¿åããå¿ èŠããããŸãã
- æåŸã«ãç§ã¯æ¬²æã®é ç¹ã èªåéæ³: ãªããžããªã«ã¢ã¯ã»ã¹ããäœããã®ã³ãã³ããå ¥åããŠãæ£ããå®è¡ããæ¹æ³ãšå 容ãçè§£ããäžã§çµã¿ç«ãŠãããæºåæžã¿ã®ã€ã¡ãŒãžãååŸããã®ãçæ³çã§ããããããå人çã«ã¯ããã®ããã«ããŠãã¹ãŠã®ãã¥ã¢ã³ã¹ãäºæž¬ã§ãããã©ããã¯ããããŸããã
ãããžã§ã¯ãã¯æ¬¡ã®ãšããã§ãã
- â ããããã¹ãŠã®åé¡ã解決ããããšãã Docker Inc ã®ã³ã¬ã¯ã¿ãŒ (Docker ã®çŸåšã®ããŒãžã§ã³ã«ãã§ã«çµ±åãããŠããŸã)ã
- â Docker ãªãã§ãã«ãã§ãã Google ã®ãã«ããŒã
- â CNCF ã«ããèªååã®è©Šã¿ãç¹ã«ã¬ã€ã€ãŒã®ãªããŒã¹ã«ããè峿·±ããœãªã¥ãŒã·ã§ã³ã
- ãã®ä»ã«ãã , ...
âŠãããŠãGitHub ã§ã©ãã ãã®ã¹ã¿ãŒãä»ããŠãããèŠãŠã¿ãŸããããã€ãŸããäžæ¹ã§ã¯ã docker build äœãã§ããããšã¯ããããçŸå®ã«ã¯ åé¡ã¯å®å
šã«è§£æ±ºãããŠããªã ãã®èšŒæ ãšããŠã代æ¿ã¢ã»ã³ãã©ã䞊è¡ããŠéçºãããŠããããããããåé¡ã®äžéšã解決ããããã«ãªã£ãŠããŸãã
å é ã§ã®çµã¿ç«ãŠ
ããã§ç§ãã¡ã¯ ïŒä»¥å dappã®ããã«ïŒ â ç§ãã¡ãé·å¹ŽãããŠéçºããŠãããFlantã瀟ã®ãªãŒãã³ãœãŒã¹ãŠãŒãã£ãªãã£ããã¹ãŠã¯çŽ 5 幎åãDockerfiles ã®ã¢ã»ã³ããªãæé©åãã Bash ã¹ã¯ãªããããå§ãŸããéå» 3 幎éãç¬èªã® Git ãªããžããªãæã€ XNUMX ã€ã®ãããžã§ã¯ãã®ãã¬ãŒã ã¯ãŒã¯å ã§æ¬æ Œçãªéçºãé²è¡ããŠããŸããã ïŒæåã¯Rubyã§ããã®åŸ Goã§ãåæã«ååã倿ŽãããŸããïŒã werf ã§ã¯ã©ã®ãããªçµã¿ç«ãŠã®åé¡ã解決ãããŸãã?

éè²ã§åŒ·èª¿è¡šç€ºãããŠããåé¡ã¯ãã§ã«å®è£
ãããŠããã1 ã€ã®ãã¹ãå
ã§äžŠåã¢ã»ã³ããªãå®è¡ãããŠãããé»è²ã§åŒ·èª¿è¡šç€ºãããŠããåé¡ã¯å€ã®çµãããŸã§ã«å®äºããäºå®ã§ãã
ã¬ãžã¹ããªãžã®å ¬é段éïŒå ¬éïŒ
åéããŠããŸã docker push⊠â ã¬ãžã¹ããªã«ã€ã¡ãŒãžãèªã¿èŸŒãéã«ãäœãé£ããã®ã§ãããã?ãããšããç»åã«ã¯ã©ã®ãããªã¿ã°ãä»ããã°ããã®ãïŒããšããçåãçããŸããããã¯ç§ãã¡ãæã£ãŠããããèµ·ããã®ã§ã Gitflow (ãŸãã¯å¥ã® Git æŠç¥) ãš Kubernetes ããããæ¥çã§ã¯ Kubernetes ã§èµ·ããŠããããšã Git ã§èµ·ããŠããããšã«è¿œåŸããããšãæšé²ããŠããŸããçµå±ã®ãšãããGit ã¯ç§ãã¡ã«ãšã£ãŠå¯äžã®çå®ã®æ
å ±æºã§ãã
äœããããªã«é£ããã®ã§ããïŒ åçŸæ§ã確ä¿ãã: Gitã³ããããããæ¬è³ªçã«äžå€ã§ãã ïŒäžå€ïŒãDocker ã€ã¡ãŒãžã«é©çšãããŸãããããã¯åããŸãŸã§ãã
ããã¯ç§ãã¡ã«ãšã£ãŠãéèŠã§ã èµ·æºãç¹å®ããKubernetes ã§å®è¡ãããŠããã¢ããªã±ãŒã·ã§ã³ãã©ã®ã³ããããããã«ããããããçè§£ãããããã§ã (ããããã°ãå·®åãªã©ãå®è¡ã§ããŸã)ã
ã¿ã°ä»ãæŠç¥
1ã€ç®ã¯ç°¡åã§ã gitã¿ã°ã次ã®ãããªã¿ã°ãä»ããããç»åãç»é²ãããŠããŸã 1.0ã Kubernetes ã«ã¯ããã®ã€ã¡ãŒãžããããã€ãããã¹ããŒãžãšæ¬çªç°å¢ããããŸãã Gitã§ã¯ã³ããããè¡ããããæç¹ã§ã¿ã°ãä»ããŸã 2.0ããªããžããªã®æç€ºã«åŸã£ãŠã³ã³ãã€ã«ããã¿ã°ãä»ããŠã¬ãžã¹ããªã«é
眮ããŸãã 2.0ããããã¹ããŒãžã«å±éãããã¹ãŠãåé¡ãªããã°æ¬çªç°å¢ã«å±éããŸãã

ãã®ã¢ãããŒãã®åé¡ç¹ã¯ãæåã«ã¿ã°ãèšå®ãããã®åŸã§ãã¹ãããŠå±éããããšã§ãããªãïŒãŸããããã¯åçŽã«éè«ççã§ãããŸã ãã§ãã¯ãããŠããªãããŒãžã§ã³ã®ãœãããŠã§ã¢ãçºè¡ããããšã«ãªããŸã (ãã§ãã¯ããã«ã¯ã¿ã°ã远å ããå¿
èŠãããããããã以å€ã®æ¹æ³ã¯ãããŸãã)ã第äºã«ããã®ãã¹ã¯ Gitflow ã§ã¯æ©èœããŸããã
çªç®ã®ãªãã·ã§ã³ - git ã³ããã + ã¿ã°ããã¹ã¿ãŒãã©ã³ãã«ã¿ã°ããããŸã 1.0;ã¬ãžã¹ããªå
ã®åœŒçšã®ã€ã¡ãŒãž - æ¬çªç°å¢ã«ãããã€ãããã€ã¡ãŒãžãããã«ãKubernetes ã¯ã©ã¹ã¿ãŒã«ã¯ãã¬ãã¥ãŒãšã¹ããŒãžã³ã°ã®èŒªéããããŸããæ¬¡ã«Gitflowã«åŸããŸããã¡ã€ã³ã®éçºãã©ã³ãïŒdevelopïŒæ°ããæ©èœã远å ãããšãèå¥åãæã€ã³ããããäœæãããŸã #c1ãç§ãã¡ã¯ãããåéãããã®èå¥åã䜿çšããŠã¬ãžã¹ããªã«å
¬éããŸãïŒ#c1ïŒãåãèå¥åã䜿çšããŠãã¬ãã¥ãŒãå±éããŸããã³ãããã§ãåãããšãè¡ããŸãã #c2 О #c3.
ååãªæ©èœãããããšã«æ°ã¥ãããšããç§ãã¡ã¯ãã¹ãŠãå®å®åããå§ããŸããã Gitã§ã¯ãã©ã³ããäœæããŸã release_1.1 (ããŒã¹ã« #c3 ã® developïŒãåã®æé ã§ãã§ã«å®è¡ãããŠããããããã®ãªãªãŒã¹ãã³ã³ãã€ã«ããå¿
èŠã¯ãããŸããããããã£ãŠãã¹ããŒãžã³ã°ã«å±éããã ãã§ãããã°ãä¿®æ£ããŸãã #c4 åæ§ã«ã¹ããŒãžã³ã°ã«ãå±éããŸããåæã«ã develop宿çã«å€æŽãè¡ããã release_1.1ãããæç¹ã§ãæºè¶³ã®ããã³ãããããã«ããããã¹ããŒãžã³ã°ã«ããã·ã¥ãããŸãïŒ#c25).
次ã«ãªãªãŒã¹ãã©ã³ãã®ããŒãžïŒfast-forwardã䜿çšïŒãå®è¡ããŸãïŒrelease_1.1ïŒããã¹ã¿ãŒã«è¿œå ããŸãããã®ã³ãããã«æ°ããããŒãžã§ã³ã®ã¿ã°ãä»ããŸããïŒ1.1ïŒããããããã®ã€ã¡ãŒãžã¯æ¢ã«ã¬ãžã¹ããªã«ãã«ããããŠããã®ã§ãå床ãã«ãããªãããã«ããã«ã¯ãæ¢åã®ã€ã¡ãŒãžã«2çªç®ã®ã¿ã°ã远å ããã ãã§ãïŒããã§ã¬ãžã¹ããªã«ã¿ã°ãä»ããŸãïŒã #c25 О 1.1ïŒããã®åŸãæ¬çªç°å¢ã«å±éããŸãã
ã¹ããŒãžã³ã°ã«ãããã€ãããã€ã¡ãŒãžã¯1ã€ã ããšããæ¬ ç¹ããããŸãïŒ#c25ïŒããããŠçç£ã«ãããŠã¯ããŸãã§éããã®ããã«ïŒ1.1ïŒã§ããããç©ççã«ã¯ãããã¯ã¬ãžã¹ããªããã®ã€ã¡ãŒãžãšåãã§ããããšãããã£ãŠããŸãã

æ¬åœã®æ¬ ç¹ã¯ãããŒãžã³ãããããµããŒããããŠããªãããšã§ããæ©éããããªããã°ãªããŸããã
ããã«é²ãã§ããªãã¯ãå®è¡ããŠã¿ãŸããã...åçŽãª Dockerfile ã®äŸãèŠãŠã¿ãŸãããã
FROM ruby:2.3 as assets
RUN mkdir -p /app
WORKDIR /app
COPY . ./
RUN gem install bundler && bundle install
RUN bundle exec rake assets:precompile
CMD bundle exec puma -C config/puma.rb
FROM nginx:alpine
COPY --from=assets /app/public /usr/share/nginx/www/public次ã®ååã«åŸã£ãŠããããããã¡ã€ã«ãæ§ç¯ããŠã¿ãŸãããã
- 䜿çšãããç»åã®IDããã®SHA256ïŒ
ruby:2.3Оnginx:alpineïŒããã®å 容ã®ãã§ãã¯ãµã ã§ãã - å
šããŒã ïŒ
RUN,CMDçã ãïŒ; - 远å ããããã¡ã€ã«ããã® SHA256ã
âŠãããŠããã®ãããªãã¡ã€ã«ãããã§ãã¯ãµã (åã³ SHA256) ãååŸããŸãããã ãµã€ã³ Docker ã€ã¡ãŒãžã®å 容ãå®çŸ©ãããã¹ãŠã®ãã®ã

å³ã«æ»ã£ãŠ ã³ãããã®ä»£ããã«ãã®ãããªçœ²åã䜿çšããŸãã€ãŸããç»åã«çœ²åãã¿ã°ä»ãããŸãã

ããã§ãããšãã°ãªãªãŒã¹ãããã¹ã¿ãŒãžã®å€æŽãããŒãžããå¿
èŠãããå Žåãå®éã®ããŒãž ã³ããããå®è¡ã§ããŸããID ã¯ç°ãªããŸããã眲åã¯åãã«ãªããŸããåãèå¥åã䜿çšããŠã€ã¡ãŒãžãæ¬çªç°å¢ã«å±éããŸãã
æ¬ ç¹ã¯ãã©ã®ã³ããããæ¬çªç°å¢ã«ããã·ã¥ãããã®ãã倿ã§ããªããªãããšã§ãããã§ãã¯ãµã ã¯äžæ¹åã«ããæ©èœããŸããããã®åé¡ã¯ã¡ã¿ããŒã¿ã®è¿œå ã¬ã€ã€ãŒã«ãã£ãŠè§£æ±ºãããŸããããã«ã€ããŠã¯åŸã§è©³ãã説æããŸãã
ã¯ãŒãã§ã®ã¿ã°ä»ã
werfã§ã¯ããã«é²ãã§ãåäžã®ãã·ã³ã«ä¿åãããªããã£ãã·ã¥ã䜿ã£ã忣ãã«ããæºåããŠããŸãããã®ããã2çš®é¡ã®Dockerã€ã¡ãŒãžãæ§ç¯ããŠããŸãã ã¹ããŒãž О ç»å.
werf Gitãªããžããªã«ã¯ããã«ãã®ããŸããŸãªæ®µéã説æããç¹å®ã®ãã«ãæé ãå«ãŸããŠããŸãïŒã€ã³ã¹ããŒã«å, install, ã»ããã¢ããå, ïŒãæåã®ã¹ãããã®ãã§ãã¯ãµã ãšããŠå®çŸ©ããã眲åã䜿çšããŠãæåã®ã¹ããŒãžã®ã€ã¡ãŒãžãæ§ç¯ããŸããæ¬¡ã«ããœãŒã¹ ã³ãŒãã远å ããæ°ããã¹ããŒãž ã€ã¡ãŒãžã®ãã§ãã¯ãµã ãèšç®ããŸãããããã®æäœã¯ãã¹ãŠã®ã¹ããŒãžã§ç¹°ãè¿ããããã®çµæãã¹ããŒãž ã€ã¡ãŒãžã®ã»ãããåŸãããŸããæ¬¡ã«ãæçµçãªç»åãäœæããŸããããã«ã¯ãç»åã®åºæã«é¢ããã¡ã¿ããŒã¿ãå«ãŸããŠããŸãããããŠããã®ç»åã«ããŸããŸãªæ¹æ³ã§ã¿ã°ãä»ããŸã (詳现ã¯åŸè¿°)ã

ãã®åŸãã¢ããªã±ãŒã·ã§ã³ ã³ãŒãã®ã¿ã倿Žãããæ°ããã³ãããã衚瀺ãããŸããäœãèµ·ããã§ãããã?ã³ãŒãã倿Žããããããäœæããæ°ããã¹ããŒãžã€ã¡ãŒãžãçšæããŸãããã®çœ²åã¯ãå€ãã¹ããŒãž ã€ã¡ãŒãžãšæ°ãããããã®ãã§ãã¯ãµã ãšããŠå®çŸ©ãããŸãããã®ç»åããæ°ããªæçµç»åã圢æãããŸããä»ã®æ®µéã§å€æŽãçºçããå Žåã«ãåæ§ã®åäœãçºçããŸãã
ãã®ããã«ãã¹ããŒãžã€ã¡ãŒãžã¯åæ£ããŠä¿åã§ãããã£ãã·ã¥ã§ãããããããäœæãããã€ã¡ãŒãžã€ã¡ãŒãžã¯ Docker ã¬ãžã¹ããªã«ããŒããããŸãã

ã¬ãžã¹ããªã®ã¯ãªãŒãã³ã°
ã¿ã°ãåé€ããåŸã«ãã³ã°ãããŸãŸã«ãªã£ãŠããã¬ã€ã€ãŒãåé€ããããšã«ã€ããŠã¯èª¬æããŸããããã㯠Docker ã¬ãžã¹ããªèªäœã®æšæºæ©èœã§ããããã§ã¯ãDocker ã¿ã°ã倧éã«èç©ããããã®äžéšã¯äžèŠã«ãªã£ããšèªèããŠãããã®ã®ãã¹ããŒã¹ãå æããŠãã (ããã³/ãŸãã¯ããã®ä»£éãæ¯æã£ãŠãã) ãšããç¶æ³ã«ã€ããŠèª¬æããŸãã
æé€ã®æŠç¥ã¯äœã§ãã?
- äœãããªãã§ããã æé€ããªããæã«ã¯ã倧éã®ã¿ã°ã®çµ¡ãŸããè§£ãããããå°ããéãæã£ãŠäœåãªã¹ããŒã¹ã確ä¿ããã»ããç°¡åãªããšããããŸããããããããã¯ããçšåºŠãŸã§ããæ©èœããŸããã
- å®å šãªã»ããããã¹ãŠã®ã€ã¡ãŒãžãåé€ããCI ã·ã¹ãã å ã®çŸåšã®ã€ã¡ãŒãžã®ã¿ãåæ§ç¯ãããšãåé¡ãçºçããå¯èœæ§ããããŸããã³ã³ãããæ¬çªç°å¢ã§åèµ·åããããšããŸã 誰ã«ããã¹ããããŠããªãæ°ããã€ã¡ãŒãžãããŒããããŸããããã«ãããäžå€ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãšããã¢ã€ãã¢ã倱ãããŸãã
- éç·ã 1 ã€ã®ã¬ãžã¹ããªããªãŒããŒãããŒãå§ãããããå¥ã®ã¬ãžã¹ããªã«ã€ã¡ãŒãžãèªã¿èŸŒãã§ããŸããåã®æ¹æ³ãšåãåé¡: ãªãŒããŒãããŒãå§ããã¬ãžã¹ããªãã©ã®æç¹ã§ã¯ãªãŒã³ã¢ããã§ããŸãã?
- æéã«ãã£ãŠã 1 ãæä»¥äžåã®ç»åããã¹ãŠåé€ããŸãã?ããããXNUMXãæéæŽæ°ãããŠããªããµãŒãã¹ã¯ééããªãååšããŸã...
- æåã§ ãã§ã«åé€ã§ãããã®ã決å®ããŸãã
æ¬åœã«å®è¡å¯èœãªãªãã·ã§ã³ã¯ 2 ã€ãããŸããã¯ãªãŒãã³ã°ãè¡ããªãããšãšããã«ãŒã°ãªãŒã³ ã¯ãªãŒãã³ã°ãšæåã¯ãªãŒãã³ã°ãçµã¿åãããããšã§ããåŸè ã®å Žåãæ¬¡ã®ããã«ãªããŸããã¬ãžã¹ããªãã¯ãªãŒã³ã¢ããããææãæ¥ããšèªèããããæ°ããã¬ãžã¹ããªãäœæããããšãã° 1 ãæãããŠãã¹ãŠã®æ°ããã€ã¡ãŒãžãããã«è¿œå ããŸãããã㊠1 ãæåŸãKubernetes å ã®ã©ã®ãããããŸã å€ãã¬ãžã¹ããªã䜿çšããŠãããã確èªããããããæ°ããã¬ãžã¹ããªã«ç§»è¡ããŸãã
äžäœã©ããªã£ãŠããŸã£ãã®ã§ãããã? ã¯ãŒãïŒåéããæ å ±:
- Git ããã: ãã¹ãŠã®ã¿ã°ããã¹ãŠã®ãã©ã³ããGit ã§ã¿ã°ä»ããããŠãããã®ã¯ãã¹ãŠã€ã¡ãŒãžã«å¿ èŠã§ãããšæ³å®ããŸã (å¿ èŠã§ãªãå Žåã¯ãGit èªäœã§åé€ããå¿ èŠããããŸã)ã
- çŸåš Kubernetes ã«ãããã€ãããŠãããã¹ãŠã®ãããã
- å€ã ReplicaSets (æè¿ããŒã«ã¢ãŠãããããã®) ãšãHelm ãªãªãŒã¹ãã¹ãã£ã³ããŠææ°ã®ã€ã¡ãŒãžãéžæããããšãèšç»ããŠããŸãã
âŠãããŠããã®ã»ãããããã¯ã€ããªã¹ãïŒåé€ããªãç»åã®ãªã¹ãïŒãäœæããŸãããã®ä»ãã¹ãŠãã¯ãªãŒã³ã¢ããããå€ç«ããã¹ããŒãžã€ã¡ãŒãžãèŠã€ããŠããããåé€ããŸãã
å±é段é
ä¿¡é Œã§ããå®£èšæ§
ãããã€ã¡ã³ãã§æåã«æ³šç®ãããç¹ã¯ã宣èšçã«å®£èšãããæŽæ°ããããªãœãŒã¹æ§æã®ããŒã«ã¢ãŠãã§ãã Kubernetes ãªãœãŒã¹ãèšè¿°ããå ã® YAML ããã¥ã¡ã³ãã¯ãã¯ã©ã¹ã¿ãŒã§å®éã«å®è¡ãããçµæãšã¯åžžã«å€§ããç°ãªããŸãã Kubernetes ã¯æ§æã«è¿œå ãããã®ã§ã次ã®ããã«ãªããŸãã
- èå¥å;
- ãµãŒãã¹æ å ±;
- ããã©ã«ãå€ã®ã»ããã
- çŸåšã®ã¹ããŒã¿ã¹ã®ã»ã¯ã·ã§ã³ã
- å ¥å ŽãŠã§ãããã¯ã®äžéšãšããŠè¡ããã倿Žã
- ããŸããŸãªã³ã³ãããŒã©ãŒ (ããã³ã¹ã±ãžã¥ãŒã©ãŒ) ã®äœæ¥ã®çµæã
ãããã£ãŠãæ°ãããªãœãŒã¹æ§æã衚瀺ããããšïŒNEWïŒãããããã®ãŸãŸçŸåšã®ãã©ã€ããæ§æã«äžæžãããããšã¯ã§ããŸããïŒã©ã€ãïŒããããå®è¡ããã«ã¯ãæ¯èŒããå¿ èŠãããã NEW 以åã«é©çšãããæ§æïŒæåŸã«é©çšãããïŒãããŠé²ã ã©ã€ã ããããåãåããŸããã
ãã®ã¢ãããŒãã¯ åæ¹åããŒãžãããšãã°ãHelm ã§äœ¿çšãããŸãã
ããããŸã åæ¹åããŒãžã¯ã次ã®äºå®ã«ãã£ãŠåºå¥ãããŸãã
- æ¯èŒãã æåŸã«é©çšããã О NEWãäœãåé€ããããã確èªããŸãã
- æ¯èŒãã NEW О ã©ã€ããäœã远å ãŸãã¯å€æŽããããã確èªããŸãã
- åèšãããããã ã©ã€ã.
åœç€Ÿã§ã¯ 1000 以äžã®ã¢ããªã±ãŒã·ã§ã³ã Helm ã§ãããã€ããŠãããããåºæ¬çã«ã¯ 2 æ¹åã®ããŒãžã䜿çšããŠããŸãããã ããHelm ã«ã¯ããã€ãã®åé¡ããããç§ãã¡ã®ãããã§è§£æ±ºãããHelm ãé©åã«åäœããããã«ãªããŸããã
å®éã®å±éç¶æ³
CIã·ã¹ãã ãæ¬¡ã®ã€ãã³ãã®ããã«Kubernetesã®æ°ããæ§æãçæãããããããã¢ããªã±ãŒã·ã§ã³ã«æž¡ããŸãã ïŒé©çšããïŒ ã¯ã©ã¹ã¿ãŒã« - HelmãŸã㯠kubectl applyãæ¬¡ã«ããã§ã«èª¬æãã N æ¹åã®ããŒãžãçºçããKubernetes API ã CI ã·ã¹ãã ã«æ¿èªå¿çããCI ã·ã¹ãã ããŠãŒã¶ãŒã«å¿çããŸãã

ãããã倧ããªåé¡ããããŸãã ã¢ããªã±ãŒã·ã§ã³ã®æåã¯å±éã®æåãæå³ãããã®ã§ã¯ãªãã Kubernetes ãã©ã®ãããªå€æŽãé©çšããå¿
èŠãããããçè§£ãããããé©çšãããšããŠããçµæãã©ããªããã¯ãŸã ããããŸãããããšãã°ãããã³ããšã³ãã§ã®ãããã®æŽæ°ãšåèµ·åã¯æåããå¯èœæ§ããããŸãããããã¯ãšã³ãã§ã¯æåãããå®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ ã€ã¡ãŒãžã®ç°ãªãããŒãžã§ã³ãååŸãããŸãã
ãã¹ãŠãæ£ããå®è¡ããã«ã¯ããã®ã¹ããŒã ã«ã¯è¿œå ã®ãªã³ã¯ãã€ãŸã Kubernetes API ããã¹ããŒã¿ã¹æ å ±ãåä¿¡ããå®éã®ç¶æ ãããã«åæããããã«éä¿¡ããç¹å¥ãªãã©ãã«ãŒãå¿ èŠã§ãã Goã§ãªãŒãã³ãœãŒã¹ã©ã€ãã©ãªãäœæããŸããã ïŒåœŒå¥³ã®çºè¡šãåç § )ã - ãã®åé¡ã解決ããwerf ã«çµã¿èŸŒãŸããŠããŸãã
ãã®ãã©ãã«ãŒã® werf ã¬ãã«ã§ã®åäœã¯ããããã€ã¡ã³ããŸã㯠StatefulSet ã«é
眮ãããã¢ãããŒã·ã§ã³ã䜿çšããŠæ§æãããŸããäž»ãªèŠçŽ - fail-mode â 以äžã®æå³ãçè§£ããŸã:
-
IgnoreAndContinueDeployProcessâ ãã®ã³ã³ããŒãã³ãã®å±éã«é¢ããåé¡ãç¡èŠããŠå±éãç¶è¡ããŸãã -
FailWholeDeployProcessImmediately- ãã®ã³ã³ããŒãã³ãã«ãšã©ãŒãçºçãããšããããã€ã¡ã³ã ããã»ã¹ã忢ããŸãã -
HopeUntilEndOfDeployProcessâ ãã®ã³ã³ããŒãã³ããå±éã®çµäºãŸã§ã«æ©èœããããšãæåŸ ããŠããŸãã
äŸãã°ããªãœãŒã¹ãšã¢ãããŒã·ã§ã³å€ã®çµã¿åãã fail-mode:

åããŠãããã€ããå ŽåãããŒã¿ããŒã¹ (MongoDB) ã®æºåãã§ããŠããªãå¯èœæ§ãããããããã€ãã¯ã©ãã·ã¥ããŸãããã ããéå§ããããŸã§åŸ
ã€ããšãã§ãããã®å Žåããããã€ã¡ã³ãã¯å®è¡ãããŸãã
werf ã«ã¯ kubedog ã®ã¢ãããŒã·ã§ã³ãããš 2 ã€ãããŸãã
-
failures-allowed-per-replicaâ åã¬ããªã«ã«èš±å¯ãããèœäžåæ°ã -
show-logs-untilâ werf ããããã€ããããã¹ãŠã®ãããããã®ãã°ã (stdout ã«) 衚瀺ããç¬éãå¶åŸ¡ããŸããããã©ã«ãã§ã¯PodIsReadyïŒãããããã©ãã£ãã¯ãåä¿¡ãå§ãããšãã«ããããäžèŠãªã¡ãã»ãŒãžãç¡èŠããããïŒããããå€ã¯ControllerIsReadyОEndOfDeploy.
ãããã€ã¡ã³ãããä»ã«äœãæãã§ãããã?
ãã§ã«èª¬æãã 2 ã€ã®ç¹ã«å ããŠã次ã®ç¹ãèæ ®ããŸãã
- èŠãããã« ãã® - ãã¹ãŠã§ã¯ãªããå¿ èŠãªãã®ã ãã
- 远跡 鲿ãžã§ããæ°åéãéãã«ããã³ã°ã¢ããããå Žåãããã§äœãèµ·ãã£ãŠããã®ãçè§£ããããšãéèŠã ããã§ãã
- ОЌеÑÑ èªåããŒã«ãã㯠äœãåé¡ãçºçããå Žåã«åããŠïŒãã®ãããå±éã®å®éã®ç¶æ ãææ¡ããããšãéèŠã§ãïŒãããŒã«ã¢ãŠãã¯ã¢ãããã¯ã§ããå¿ èŠããããŸããã€ãŸããæåŸãŸã§å®è¡ããããããã¹ãŠã以åã®ç¶æ ã«æ»ããã®ããããã«ãªããŸãã
çµæ
äŒæ¥ãšããŠãé ä¿¡ã®ããŸããŸãªæ®µéïŒãã«ããå ¬éãå±éïŒã§èª¬æãããã¹ãŠã®ãã¥ã¢ã³ã¹ãå®è£ ããã«ã¯ãCIã·ã¹ãã ãšãŠãŒãã£ãªãã£ã§ååã§ãã .
çµè«ã®ä»£ããã«:

werf ã«ãã£ãŠãDevOps ãšã³ãžãã¢ã®å€ãã®åé¡ã解決ããäžã§å€§ããªé²æ©ãéããããšãã§ããã®ã§ãããåºç¯ãªã³ãã¥ããã£ããã®ãŠãŒãã£ãªãã£ãå®éã«è©ŠããŠããã ããã°å¹žãã§ããäžç·ã«ããã°è¯ãçµæãåŸããããªããŸãã
ãããªãšã¹ã©ã€ã
ããã©ãŒãã³ã¹ã®ãã㪠(çŽ 47 å):

å ±åæžã®ãã¬ãŒã³ããŒã·ã§ã³:
PS
Kubernetes ã«é¢ãããã®ä»ã®ã¬ããŒãã¯ããã°ã«ãããŸãã
- «» ïŒããããªãŒã»ã¹ããªã£ããã27幎2019æXNUMXæ¥ãStrachkaãã«ãŠïŒ;
- «» (Andrey Polovovã8 幎 2019 æ XNUMX æ¥ãSaint HighLoad++);
- «» (Dmitry Stolyarovã8 幎 2018 æ XNUMX æ¥ HighLoad++);
- «» (ããããªãŒã»ã¹ããªã£ããã28 幎 2018 æ XNUMX æ¥ãRootConf ã«ãŠ);
- «» (Dmitry Stolyarovã7 幎 2017 æ XNUMX æ¥ HighLoad++);
- «» (ããããªãŒã»ã¹ããªã£ããã6 幎 2017 æ XNUMX æ¥ãRootConf ã«ãŠ).
åºæïŒ habr.com
