27æ2019æ¥ããã§ã¹ãã£ãã«ã®äžç°ãšããŠéå¬ãããDevOpsConf XNUMXã«ã³ãã¡ã¬ã³ã¹ã®ã¡ã€ã³ããŒã«ã«ãŠ
ãã¬ãŒã³ããŒã·ã§ã³ä»¥æ¥ãç§ãã¡ã®ãŠãŒãã£ãªã㣠(以å㯠dapp ãšããŠç¥ãããŠããŸãã) ã¯ãæŽå²çãªãã€ã«ã¹ããŒã³ã«éããŸããã GitHub äžã® 1000 ã¹ã¿ãŒ â ãŠãŒã¶ãŒã®ã³ãã¥ããã£ãæé·ããããšã§ãå€ãã® DevOps ãšã³ãžãã¢ã®äœæ¥ã楜ã«ãªãããšãé¡ã£ãŠããŸãã
ããã§ãç§ãã¡ã玹ä»ããã®ã¯ã
Kubernetes ãžã®ã³ãŒãã®é ä¿¡
話ã¯ãã¯ãã¯ãŒãã«ã€ããŠã§ã¯ãªããKubernetes ã® CI/CD ã«ã€ããŠã®ãã®ã«ãªããŸããããã¯ããœãããŠã§ã¢ã Docker ã³ã³ããã«ããã±ãŒãžåãããŠããããšãæå³ããŸãã (ãã®ä»¶ã«ã€ããŠã¯ã
Kubernetes ã§ã®é ä¿¡ã¯ã©ã®ããã«ãªããŸãã?
- ã³ãŒããšãããæ§ç¯ããããã®æé ãèšèŒããã Git ãªããžããªããããŸãã ã¢ããªã±ãŒã·ã§ã³ã¯ Docker ã€ã¡ãŒãžã«çµã¿èŸŒãŸããDocker ã¬ãžã¹ããªã§å ¬éãããŸãã
- åããªããžããªã«ã¯ãã¢ããªã±ãŒã·ã§ã³ããããã€ããŠå®è¡ããæ¹æ³ã«é¢ããæé ãå«ãŸããŠããŸãã ãããã€ã¡ã³ã段éã§ã¯ããããã®æ瀺ã Kubernetes ã«éä¿¡ãããKubernetes ã¯ã¬ãžã¹ããªããå¿ èŠãªã€ã¡ãŒãžãåãåãããããèµ·åããŸãã
- ããã«ãéåžžã¯ãã¹ãããããŸãã ãããã®äžéšã¯ãç»åãå ¬éãããšãã«å®è¡ã§ããŸãã ãŸãã(åãæé ã«åŸã£ãŠ) ã¢ããªã±ãŒã·ã§ã³ã®ã³ããŒã (å¥ã® K8s åå空éãŸãã¯å¥ã®ã¯ã©ã¹ã¿ãŒã«) ãããã€ããããã§ãã¹ããå®è¡ããããšãã§ããŸãã
- æåŸã«ãGit ããã€ãã³ã (ãŸãã¯ãã¿ã³ã®ã¯ãªãã¯) ãåãåããæå®ããããã¹ãŠã®æ®µé (ãã«ããå ¬éããããã€ããã¹ã) ãåŒã³åºã CI ã·ã¹ãã ãå¿ èŠã§ãã
ããã«ã¯ããã€ãã®éèŠãªæ³šæäºé
ããããŸãã
- äžå€ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ããããã (äžå€ã®ã€ã³ãã©ã¹ãã©ã¯ãã£)ããã¹ãŠã®æ®µé (ã¹ããŒãžã³ã°ãæ¬çªãªã©) ã§äœ¿çšãããã¢ããªã±ãŒã·ã§ã³ ã€ã¡ãŒãžã å¿
ã XNUMX ã€ããã¯ãã§ã. ããã«ã€ããŠãäŸãæããŠè©³ãã説æããŸããã
ãã㧠. - ã³ãŒããšããŠã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã®ã¢ãããŒãã«åŸã£ãŠãããã (IaC)ãã¢ããªã±ãŒã·ã§ã³ã³ãŒãããããçµã¿ç«ãŠãŠèµ·åããããã®æé ã¯æ¬¡ã®ãšããã§ãã æ£ç¢ºã« XNUMX ã€ã®ãªããžããªå
ã§. ããã«ã€ããŠè©³ããã¯ã次ãåç
§ããŠãã ããã
åãã¬ããŒã . - ããªããªãŒãã§ãŒã³ ïŒé éïŒ éåžžãã¢ããªã±ãŒã·ã§ã³ã¯ã¢ã»ã³ãã«ããã¹ãããªãªãŒã¹ããããšèããããŸãã (ãªãªãŒã¹æ®µé) ããã§çµããã§ã - é éãè¡ãããŸããã ãããå®éã«ã¯ããŠãŒã¶ãŒã¯ããªããå±éãããã®ãåãåããŸãã ã㌠ããããããªããããããããã¯ã·ã§ã³ã«çŽåãããšãããããŠåœŒãããã«è¡ãããšãã§ããŠããã®ãããã¯ã·ã§ã³ãæ©èœãããšãã ã ããããªããªãŒãã§ãŒã³ã¯çµãããšæã éçšæ®µéã®ã¿ ïŒèµ°ãïŒãããæ£ç¢ºã«ã¯ãã³ãŒããéçšç°å¢ããåé€ãããïŒæ°ããã³ãŒãã«çœ®ãæããããïŒç¬éã§ãã§ãã
Kubernetes ã®äžèšã®é
ä¿¡ã¹ããŒã ã«æ»ããŸããããããã¯ç§ãã¡ã ãã§ãªããæåéããã®åé¡ã«åãçµãã ãã¹ãŠã®äººã«ãã£ãŠçºæãããŸããã å®éããã®ãã¿ãŒã³ã¯çŸåš GitOps ãšåŒã°ããŠããŸã (ãã®çšèªãšãã®èåŸã«ããèãæ¹ã«ã€ããŠè©³ããèªãããšãã§ããŸã
ãã«ãã¹ããŒãž
2019 幎ã«ã¯ã誰ãã Dockerfile ã®äœææ¹æ³ãšå®è¡æ¹æ³ãç¥ã£ãŠããã®ã§ãDocker ã€ã¡ãŒãžã®æ§ç¯ã«ã€ããŠè©±ãããšãã§ãããã§ãã docker build
?.. ããã§æ³šæããããã¥ã¢ã³ã¹ã¯æ¬¡ã®ãšããã§ãã
- ç»åã®éã¿ éèŠãªã®ã§ã䜿çšããŠãã ãã
å€æ®µé æ¬åœã«åäœã«å¿ èŠãªã¢ããªã±ãŒã·ã§ã³ã ããã€ã¡ãŒãžã«æ®ããŸãã - ã¬ã€ã€ãŒæ° ã®ãã§ãŒã³ãçµã¿åãããŠæå°åããå¿
èŠããããŸã
RUN
- æå³ã«å¿ããã³ãã³ãã - ãã ããããã«ããåé¡ãè¿œå ãããŸã ãããã°ã¢ã»ã³ããªãã¯ã©ãã·ã¥ãããšãåé¡ã®åå ãšãªã£ããã§ãŒã³ããé©åãªã³ãã³ããèŠã€ããªããã°ãªããªãããã§ãã
- ãã«ãé床 å€æŽãè¿ éã«å±éããŠçµæã確èªããããããéèŠã§ãã ããšãã°ãã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ãããã³ã«èšèªã©ã€ãã©ãªã®äŸåé¢ä¿ãåæ§ç¯ããå¿ èŠã¯ãããŸããã
- å€ãã®å Žåãå¿ èŠãª XNUMX ã€ã® Git ãªããžããªãã ããããã®ç»åããã¯ãäžé£ã® Dockerfile (ãŸã㯠XNUMX ã€ã®ãã¡ã€ã«å ã®ååä»ãã¹ããŒãž) ãšããããã®é 次ã¢ã»ã³ããªãå«ã Bash ã¹ã¯ãªããã«ãã£ãŠè§£æ±ºã§ããŸãã
ããã¯èª°ããçŽé¢ããæ°·å±±ã®äžè§ã«ãããŸããã ããããä»ã«ãç¹ã«æ¬¡ã®åé¡ããããŸãã
- å€ãã®å Žåãçµã¿ç«ãŠæ®µéã§äœããå¿ èŠã«ãªããŸã ããŠã³ã (ããšãã°ãapt ã®ãããªã³ãã³ãã®çµæããµãŒãããŒãã£ã®ãã£ã¬ã¯ããªã«ãã£ãã·ã¥ããŸã)ã
- 欲ãã Ansible ã·ã§ã«ã§æžã代ããã«ã
- 欲ãã Docker ãªãã§ãã«ããã (ã³ã³ãããŒãå®è¡ã§ãã Kubernetes ã¯ã©ã¹ã¿ãŒããã§ã«ããã®ã«ããã®ããã«ãã¹ãŠãæ§æããå¿ èŠãããè¿œå ã®ä»®æ³ãã·ã³ããªãå¿ èŠãªã®ã§ãããã?)ã
- å¹³è¡çµç«ããã¯ãDockerfile ããã®ããŸããŸãªã³ãã³ã (ãã«ãã¹ããŒãžã䜿çšãããŠããå Žå)ãåããªããžããªã®è€æ°ã®ã³ããããè€æ°ã® Dockerfile ãªã©ãããŸããŸãªæ¹æ³ã§ç解ã§ããŸãã
- åæ£ã¢ã»ã³ããª: ãäžæçãªããã®ããããã«åéããããšèããŠããŸãã ãã£ãã·ã¥ãæ¶ãããããå¥ã®å Žæã«ä¿åããå¿ èŠããããŸãã
- æåŸã«æ¬²æã®é ç¹ã«ååãä»ãã ãªãŒãããžãã¯: ãªããžããªã«ç§»åããäœããã®ã³ãã³ããå ¥åããŠãäœãã©ã®ããã«å®è¡ããããæ£ããç解ããäžã§çµã¿ç«ãŠãããæ¢è£œã®ã€ã¡ãŒãžãååŸããã®ãçæ³çã§ãã ãã ããå人çã«ã¯ããã®ããã«ãã¹ãŠã®ãã¥ã¢ã³ã¹ãäºæž¬ã§ãããã©ããã¯ããããŸããã
ãããŠãããã«ãããžã§ã¯ãããããŸã:
-
moby/ãã«ãããã â Docker Inc ã®ãã«ã㌠(Docker ã®çŸåšã®ããŒãžã§ã³ã«ãã§ã«çµ±åãããŠããŸã)ãããããã¹ãŠã®åé¡ã解決ããããšããŠããŸãã -
ãã«ã â Docker ãªãã§ãã«ãã§ãã Google ã®ãã«ããŒã -
Buildpacks.io â èªåéæ³ãç¹ã«ã¬ã€ã€ãŒã®ãªããŒã¹ã䜿çšããèå³æ·±ããœãªã¥ãŒã·ã§ã³ãäœæããããšãã CNCF ã®è©Šã¿ã - ãªã©ã®ä»ã®å€ãã®ãŠãŒãã£ãªãã£
ãã«ã㌠,æ¬ç©ã®ããŒã«/img ...
...GitHub ã§ã¹ã¿ãŒãããã€ãããèŠãŠã¿ãŸãããã ã€ãŸããäžæ¹ã§ã¯ã docker build
ååšããŠäœããã§ããããå®éã«ã¯ åé¡ã¯å®å
šã«ã¯è§£æ±ºãããŠããªã - ããã®èšŒæ ã¯ã代æ¿ã³ã¬ã¯ã¿ãŒã®äžŠè¡éçºã§ããããããããåé¡ã®äžéšã解決ããŸãã
ãŽã§ã«ãã§ã®çµã¿ç«ãŠ
ããã§ãç§ãã¡ã¯æ¬¡ã®ããã«ãªããŸãã
éè²ã®ç¶²æãã®åé¡ã¯ãã§ã«å®è£
ãããŠããã䞊åãã«ãã¯åããã¹ãå
ã§è¡ãããé»è²ã§åŒ·èª¿è¡šç€ºãããåé¡ã¯å€ã®çµãããŸã§ã«å®äºããäºå®ã§ãã
ã¬ãžã¹ããªãžã®å ¬éã®æ®µé (å ¬é)
ç§ãã¡ã¯ãã€ã€ã«ããŸãã docker push
... - ã¬ãžã¹ããªã«ã€ã¡ãŒãžãã¢ããããŒãããéã«äœãé£ããã§ãããã? ãããŠããç»åã«ã¯ã©ã®ãããªã¿ã°ãä»ããã¹ãã§ãããã?ããšããçåãçããŸãã ããã¯ç§ãã¡ãæã£ãŠããçç±ããèµ·ãããŸã ã®ãããã㌠(ãŸãã¯ä»ã® Git æŠç¥) ãš Kubernetes ãçµ±åããŠãããæ¥ç㯠Kubernetes ã§ã®åºæ¥äºã Git ã§ã®åºæ¥äºã«ç¢ºå®ã«åŸãããåªããŠããŸãã çµå±ã®ãšãããGit ãå¯äžã®çå®ã®æ
å ±æºã§ãã
äœããããªã«é£ããã®ã§ããïŒ åçŸæ§ã確ä¿ãã: æ¬è³ªçã«äžå€ã§ãã Git ã®ã³ããããã ïŒäžå€ïŒã Docker ã€ã¡ãŒãžã«å€æããŸããããã¯åãã«ããŠããå¿ èŠããããŸãã
ããã¯ç§ãã¡ã«ãšã£ãŠãéèŠã§ã èµ·æºãç¹å®ãããªããªããKubernetes ã§å®è¡ãããŠããã¢ããªã±ãŒã·ã§ã³ãã©ã®ã³ãããããæ§ç¯ãããã®ããç解ãããããã§ã (ãã®åŸãå·®åãåæ§ã®ããšãå¯èœã«ãªããŸã)ã
ã¿ã°ä»ãæŠç¥
XNUMXã€ç®ã¯ã·ã³ãã«ã§ã gitã¿ã°ã ãšããã¿ã°ãä»ããããç»åãå«ãã¬ãžã¹ããªããããŸãã 1.0
ã Kubernetes ã«ã¯ã¹ããŒãžãšãããã¯ã·ã§ã³ãããããã®ã€ã¡ãŒãžãã¢ããããŒããããŸãã Git ã§ã¯ã³ããããè¡ããããæç¹ã§ã¿ã°ãä»ããŸãã 2.0
ã ãªããžããªããã®æ瀺ã«åŸã£ãŠåéããã¿ã°ä»ãã§ã¬ãžã¹ããªã«é
眮ããŸã 2.0
ã ãããã¹ããŒãžã«å±éãããã¹ãŠãé 調ã§ããã°æ¬çªç°å¢ã«å±éããŸãã
ãã®ã¢ãããŒãã®åé¡ã¯ãæåã«ã¿ã°ãé
眮ãããããããã¹ãããŠããŒã«ã¢ãŠãããããšã ãšããããšã§ãã ãªãïŒ ãŸããããã¯åçŽã«éè«ççã§ããç§ãã¡ã¯ãŸã ãã¹ãããããŠããªãããŒãžã§ã³ã®ãœãããŠã§ã¢ãçºè¡ããŠããã®ã§ã (ãã§ãã¯ããã«ã¯ã¿ã°ãä»ããå¿
èŠããããããä»ã®æ¹æ³ã§ãã¹ãããããšã¯ã§ããŸãã)ã 次ã«ããã®ãã¹ã¯ Gitflow ãšäºææ§ããããŸããã
çªç®ã®ãªãã·ã§ã³ - gitã³ããã+ã¿ã°ã master ãã©ã³ãã«ã¯ã¿ã°ããããŸã 1.0
; ã¬ãžã¹ããªå
ã®ãã - éçšç°å¢ã«ãããã€ãããã€ã¡ãŒãžã ããã«ãKubernetes ã¯ã©ã¹ã¿ãŒã«ã¯ãã¬ãã¥ãŒããã³ã¹ããŒãžã³ã°ã®èŒªéããããŸãã 次ã«ãGitflow ã«åŸããŸã: éçºçšã®ã¡ã€ã³ ãã©ã³ã (develop
) æ°ããæ©èœãäœæãããã®çµæãèå¥åã䜿çšããã³ããããè¡ãããŸãã #c1
ã ç§ãã¡ã¯ãããåéãããã®èå¥åã䜿çšããŠã¬ãžã¹ããªã«å
¬éããŸã (#c1
ïŒã åãèå¥åã䜿çšããŠãã¬ãã¥ãŒã«ããŒã«ã¢ãŠãããŸãã ã³ãããã§ãåãããšãè¡ããŸã #c2
О #c3
.
ååãªæ©èœãããããšã«æ°ä»ãããšãããã¹ãŠãå®å®åãå§ããŸãã Git ã§ãã©ã³ããäœæãã release_1.1
(ããŒã¹ã« #c3
ã® develop
ïŒã ãã®ãªãªãŒã¹ãåéããå¿
èŠã¯ãããŸããããªããªã... ããã¯åã®ã¹ãããã§è¡ãããŸããã ãããã£ãŠãåçŽã«ã¹ããŒãžã³ã°ã«ããŒã«ã¢ãŠãã§ããŸãã ãã°ãä¿®æ£ããŸã #c4
ãããŠåæ§ã«ã¹ããŒãžã³ã°ã«ããŒã«ã¢ãŠãããŸãã åæã«éçºãé²ãã§ããŸã develop
ãå€æŽã¯å®æçã«ååŸãããŸãã release_1.1
ã ããæç¹ã§ãã³ããããã³ã³ãã€ã«ãããŠã¹ããŒãžã³ã°ã«ã¢ããããŒããããŸããããã§æºè¶³ã§ã (#c25
).
次ã«ããªãªãŒã¹ ãã©ã³ãã (æ©éãã§) ããŒãžããŸã (release_1.1
) ãã¹ã¿ãŒã§ã ãã®ã³ãããã«æ°ããããŒãžã§ã³ã®ã¿ã°ãä»ããŸã (1.1
ïŒã ãã ãããã®ã€ã¡ãŒãžã¯ãã§ã«ã¬ãžã¹ããªã«åéãããŠãããããå床åéãããªãããã«ãæ¢åã®ã€ã¡ãŒãžã« XNUMX çªç®ã®ã¿ã°ãè¿œå ããã ãã§ã (ã¬ãžã¹ããªã«ã¿ã°ãè¿œå ãããŸãã) #c25
О 1.1
ïŒã ãã®åŸãæ¬çªç°å¢ã«å±éããŸãã
ã¹ããŒãžã³ã°ã«ã¢ããããŒããããç»åã XNUMX ã€ã ãã§ãããšããæ¬ ç¹ããããŸã (#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
次ã®ååã«åŸã£ãŠããããããã¡ã€ã«ãæ§ç¯ããŸãããã
- 䜿çšãããç»åã®èå¥åãã SHA256 (
ruby:2.3
Оnginx:alpine
)ããããã®å 容ã®ãã§ãã¯ãµã ã§ãã - ãã¹ãŠã®ããŒã (
RUN
,CMD
çã ãïŒ; - è¿œå ããããã¡ã€ã«ããã® SHA256ã
...ãã®ãããªãã¡ã€ã«ãããã§ãã¯ãµã (ãã¯ã SHA256) ãååŸããŸãã ãã ãµã€ã³ Docker ã€ã¡ãŒãžã®ã³ã³ãã³ããå®çŸ©ãããã¹ãŠã®ãã®ã
å³ã«æ»ã£ãŠã¿ãŸããã ã³ãããã®ä»£ããã«ãã®ãããªçœ²åã䜿çšããŸããã€ãŸãç»åã«çœ²åãä»ããŸãã
ããã§ãããšãã°ããªãªãŒã¹ãããã¹ã¿ãŒãžã®å€æŽãããŒãžããå¿
èŠãããå Žåãå®éã®ããŒãž ã³ããããå®è¡ã§ããŸããèå¥åã¯ç°ãªããŸããã眲åã¯åãã«ãªããŸãã åãèå¥åã䜿çšããŠãã€ã¡ãŒãžãå®çšŒåç°å¢ã«ããŒã«ã¢ãŠãããŸãã
æ¬ ç¹ã¯ãã©ã®ãããªçš®é¡ã®ã³ããããæ¬çªç°å¢ã«ããã·ã¥ãããããå€æã§ããªãããšã§ãããã§ãã¯ãµã ã¯äžæ¹åã«ããæ©èœããŸããã ãã®åé¡ã¯ãã¡ã¿ããŒã¿ãå«ãè¿œå ã¬ã€ã€ãŒã«ãã£ãŠè§£æ±ºãããŸãã詳ããã¯åŸã»ã©èª¬æããŸãã
werf ã§ã®ã¿ã°ä»ã
werf ã§ã¯ããã«é²ãã§ãXNUMX ã€ã®ãã·ã³ã«ä¿åãããªããã£ãã·ã¥ã䜿çšããŠåæ£ãã«ããå®è¡ããæºåãããŠããŸã... ããã§ãXNUMX çš®é¡ã® Docker ã€ã¡ãŒãžããã«ãããŠããŸãã ã¹ããŒãž О ç»å.
werf Git ãªããžããªã«ã¯ããã«ãã®ããŸããŸãªæ®µéã説æãããã«ãåºæã®æé ãä¿åãããŸã (ã€ã³ã¹ããŒã«å, install, ã»ããã¢ããå, ïŒã æåã®ã¹ãããã®ãã§ãã¯ãµã ãšããŠå®çŸ©ããã眲åãæã€æåã®ã¹ããŒãžã®ã€ã¡ãŒãžãåéããŸãã 次ã«ããœãŒã¹ ã³ãŒããè¿œå ããæ°ããã¹ããŒãž ã€ã¡ãŒãžã®ãã§ãã¯ãµã ãèšç®ããŸãããããã®æäœããã¹ãŠã®ã¹ããŒãžã«å¯ŸããŠç¹°ãè¿ããããã®çµæãšããŠã¹ããŒãž ã€ã¡ãŒãžã®ã»ãããåŸãããŸãã 次ã«ãæçµç»åãäœæããŸããããã«ã¯ããã®èµ·æºã«é¢ããã¡ã¿ããŒã¿ãå«ãŸããŸãã ãããŠããã®ç»åã«ããŸããŸãªæ¹æ³ã§ã¿ã°ä»ãããŸã (詳现ã¯åŸè¿°)ã
ãã®åŸãã¢ããªã±ãŒã·ã§ã³ ã³ãŒãã®ã¿ãå€æŽãããæ°ããã³ãããã衚瀺ããããšããŸãã äœãèµ·ãããïŒ ã³ãŒãå€æŽã®å Žåã¯ããããäœæããæ°ããªã¹ããŒãžã€ã¡ãŒãžãçšæããŸãã ãã®çœ²åã¯ãå€ãã¹ããŒãž ã€ã¡ãŒãžãšæ°ãããããã®ãã§ãã¯ãµã ãšããŠæ±ºå®ãããŸãã ãã®ã€ã¡ãŒãžããæ°ããæçµã€ã¡ãŒãžã圢æãããŸãã ä»ã®ã¹ããŒãžã®å€æŽã§ãåæ§ã®åäœãçºçããŸãã
ãããã£ãŠãã¹ããŒãž ã€ã¡ãŒãžã¯åæ£ä¿åã§ãããã£ãã·ã¥ã§ããããããããã§ã«äœæãããã€ã¡ãŒãžã¯ Docker ã¬ãžã¹ããªã«ã¢ããããŒããããŸãã
ã¬ãžã¹ããªã®ã¯ãªãŒãã³ã°
ã¿ã°ãåé€ããåŸã«ãã³ã°ãããŸãŸã«ãªã£ãã¬ã€ã€ãŒãåé€ããããšã«ã€ããŠè©±ããŠããã®ã§ã¯ãããŸããããã㯠Docker ã¬ãžã¹ããªèªäœã®æšæºæ©èœã§ãã ããã§è©±ããŠããã®ã¯ã倧éã® Docker ã¿ã°ãèç©ããããã®äžéšãäžèŠã«ãªã£ãããšã¯ç解ããŠãããã®ã®ãããããã¹ããŒã¹ãå æãã (ããã³/ãŸãã¯ãã®è²»çšãæ¯æã) ãšããç¶æ³ã«ã€ããŠè©±ããŠããŸãã
æž ææŠç¥ã¯äœã§ãã?
- äœãããªãããšãã§ããŸã æé€ããªãã§ãã ããã å Žåã«ãã£ãŠã¯ãèšå€§ãªã¿ã°ã®ãã€ãã解ãããããå°ããéãæã£ãŠäœåãªã¹ããŒã¹ã確ä¿ããæ¹ãã¯ããã«ç°¡åãªå ŽåããããŸãã ããããããã¯ããæç¹ãŸã§ããæ©èœããŸããã
- ãã«ãªã»ããã ãã¹ãŠã®ã€ã¡ãŒãžãåé€ããCI ã·ã¹ãã å ã®çŸåšã®ã€ã¡ãŒãžã®ã¿ãåæ§ç¯ãããšãåé¡ãçºçããå¯èœæ§ããããŸãã å®çšŒåç°å¢ã§ã³ã³ãããŒãåèµ·åããããšããŸã 誰ããã¹ããããŠããªãæ°ããã€ã¡ãŒãžãããŒããããŸãã ããã«ãããäžå€ã®ã€ã³ãã©ã¹ãã©ã¯ãã£ãšããæŠå¿µã¯ç¡å¹ã«ãªããŸãã
- éç·ã XNUMX ã€ã®ã¬ãžã¹ããªããªãŒããŒãããŒãå§ããã®ã§ãã€ã¡ãŒãžãå¥ã®ã¬ãžã¹ããªã«ã¢ããããŒãããŸãã åã®æ¹æ³ãšåãåé¡: ãªãŒããŒãããŒãå§ããã¬ãžã¹ããªãã©ã®æç¹ã§ã¯ãªã¢ã§ããã?
- æéã«ãã£ãŠã 1 ãæ以äžåã®ç»åããã¹ãŠåé€ããŸãã? ã§ããäžã¶æãæŽæ°ãããŠããªããµãŒãã¹ã¯å¿ ãååšããŸãâŠã
- æå㧠ãã§ã«åé€ã§ãããã®ãå€æããŸãã
æ¬åœã«å®è¡å¯èœãªãªãã·ã§ã³ã¯ XNUMX ã€ãããŸããXNUMX ã€ã¯ã¯ãªãŒãã³ã°ããªãããŸã㯠Blue-Green + æåã®çµã¿åããã§ãã åŸè ã®å Žåã¯ã次ã®ãããªããšã«ã€ããŠè©±ããŠããŸããã¬ãžã¹ããªãã¯ãªãŒã³ã¢ããããææãæ¥ããšç解ããããæ°ããã¬ãžã¹ããªãäœæããããšãã° XNUMX ãæãããŠæ°ããã€ã¡ãŒãžããã¹ãŠããã«è¿œå ããŸãã ãã㊠XNUMX ãæåŸãKubernetes å ã®ã©ã®ãããããŸã å€ãã¬ãžã¹ããªã䜿çšããŠãããã確èªããããããæ°ããã¬ãžã¹ããªã«è»¢éããŸãã
ç§ãã¡ã¯äœã«æ¥ãã®ã ã¯ãŒã? ç§ãã¡ã¯ä»¥äžãåéããŸã:
- Git ããã: ãã¹ãŠã®ã¿ã°ããã¹ãŠã®ãã©ã³ã - ç»åå ã® Git ã§ã¿ã°ä»ããããŠãããã¹ãŠãå¿ èŠã§ãããšä»®å®ããŸã (ããã§ãªãå Žåã¯ãGit èªäœã§åé€ããå¿ èŠããããŸã)ã
- çŸåš Kubernetes ã«ãã³ãã¢ãŠããããŠãããã¹ãŠã®ãããã
- å€ã ReplicaSet (æè¿ãªãªãŒã¹ããããã®) ã®ã»ããHelm ãªãªãŒã¹ãã¹ãã£ã³ããŠããããææ°ã®ã€ã¡ãŒãžãéžæããããšãèšç»ããŠããŸãã
...ãããŠãã®ã»ãããããã¯ã€ããªã¹ããã€ãŸãåé€ããªãç»åã®ãªã¹ããäœæããŸãã ä»ã®ãã®ã¯ãã¹ãŠåé€ãããã®åŸãå€ç«ããã¹ããŒãžç»åãèŠã€ããŠåé€ããŸãã
ãããã€ã¹ããŒãž
ä¿¡é Œã§ãã宣èšæ§
ãããã€ã¡ã³ãã§æ³šç®ãããæåã®ç¹ã¯ã宣èšçã«å®£èšããããæŽæ°ããããªãœãŒã¹æ§æã®ããŒã«ã¢ãŠãã§ãã Kubernetes ãªãœãŒã¹ã説æããå ã® YAML ããã¥ã¡ã³ãã¯ãã¯ã©ã¹ã¿ãŒå ã§å®éã«å®è¡ãããŠããçµæãšã¯åžžã«å€§ããç°ãªããŸãã Kubernetes ã«ãã£ãŠæ§æãè¿œå ãããããã次ã®ããã«ãªããŸãã
- èå¥å;
- ãµãŒãã¹æ å ±ã
- å€ãã®ããã©ã«ãå€ã
- çŸåšã®ã¹ããŒã¿ã¹ã®ã»ã¯ã·ã§ã³ã
- ã¢ãããã·ã§ã³ Webhook ã®äžéšãšããŠè¡ãããå€æŽã
- ããŸããŸãªã³ã³ãããŒã©ãŒ (ããã³ã¹ã±ãžã¥ãŒã©ãŒ) ã®äœæ¥ã®çµæã
ãããã£ãŠãæ°ãããªãœãŒã¹æ§æã衚瀺ããããš (æ°è£œå)ãçŸåšã®ãã©ã€ããæ§æããã®ãŸãŸååŸããŠäžæžãããããšã¯ã§ããŸãã (ã©ã€ãïŒã ãããè¡ãã«ã¯ãæ¯èŒããå¿ èŠããããŸã æ°è£œå æåŸã«é©çšãããæ§æ (æåŸã«é©çšãããïŒãããŠè»¢ãã£ãŠãã ãã ã©ã€ã ããããåãåããŸããã
ãã®ã¢ãããŒãã¯ãšåŒã°ããŸã 2æ¹åã®ããŒãžã ããšãã° Helm ã§äœ¿çšãããŸãã
ããããŸã 3æ¹åã®ããŒãžã次ã®ç¹ãç°ãªããŸãã
- æ¯èŒãã æåŸã«é©çšããã О æ°è£œåãäœãåé€ããããã調ã¹ãŸãã
- æ¯èŒãã æ°è£œå О ã©ã€ããäœãè¿œå ãŸãã¯å€æŽããããã確èªããŸãã
- åèšãããããããé©çšããã ã©ã€ã.
ç§ãã¡ã¯ Helm ã䜿çšã㊠1000 以äžã®ã¢ããªã±ãŒã·ã§ã³ããããã€ããŠãããããå®éã«ã¯åæ¹åã®ããŒãžã䜿çšããŠããŸãã ãã ããHelm ãæ£åžžã«åäœããã®ã«åœ¹ç«ã€ãããã§è§£æ±ºãããå€ãã®åé¡ããããŸãã
å®éã®å±éç¶æ³
CI ã·ã¹ãã ã¯æ¬¡ã®ã€ãã³ãã«åºã¥ã㊠Kubernetes ã®æ°ããæ§æãçæããåŸããããéä¿¡ããŠäœ¿çšããŸãã ïŒé©çšããïŒ ã¯ã©ã¹ã¿ãŒã« - Helm ãŸã㯠kubectl apply
ã 次ã«ããã§ã«èª¬æãã N ãŠã§ã€ ããŒãžãçºçããããã«å¯Ÿã㊠Kubernetes API ã CI ã·ã¹ãã ãšãã®ãŠãŒã¶ãŒã«æ¿èªã®å¿çãè¿ããŸãã
ãã ãã倧ããªåé¡ããããŸãã ã¢ããªã±ãŒã·ã§ã³ã®æåã¯å±éã®æåãæå³ãããã®ã§ã¯ãããŸããã Kubernetes ãã©ã®ãããªå€æŽãé©çšããå¿
èŠãããããç解ãããããé©çšãããšããŠããçµæãã©ããªããã¯ãŸã ããããŸããã ããšãã°ãããã³ããšã³ãã§ã®ãããã®æŽæ°ãšåèµ·åã¯æåããå¯èœæ§ããããŸãããããã¯ãšã³ãã§ã¯æåããªããããå®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ ã€ã¡ãŒãžã®ç°ãªãããŒãžã§ã³ãååŸãããŸãã
ãã¹ãŠãæ£ããå®è¡ããã«ã¯ããã®ã¹ããŒã ã«ã¯è¿œå ã®ãªã³ã¯ãå¿
èŠã§ããããã¯ãKubernetes API ããã¹ããŒã¿ã¹æ
å ±ãåä¿¡ããå®éã®ç¶æ
ãããã«åæããããã«ãããéä¿¡ããç¹å¥ãªãã©ãã«ãŒã§ãã Go ã§ãªãŒãã³ãœãŒã¹ ã©ã€ãã©ãªãäœæããŸãã -
werf ã¬ãã«ã§ã®ãã®ãã©ãã«ãŒã®åäœã¯ãDeployment ãŸã㯠StatefulSet ã«é
眮ãããã¢ãããŒã·ã§ã³ã䜿çšããŠæ§æãããŸãã äž»ãªæ³šé - fail-mode
- 次ã®æå³ãç解ããŸãã
-
IgnoreAndContinueDeployProcess
â ãã®ã³ã³ããŒãã³ãã®ããŒã«ã¢ãŠãã«é¢ããåé¡ãç¡èŠããŠãå±éãç¶è¡ããŸãã -
FailWholeDeployProcessImmediately
â ãã®ã³ã³ããŒãã³ãã§ãšã©ãŒãçºçãããšãå±éããã»ã¹ãåæ¢ããŸãã -
HopeUntilEndOfDeployProcess
â ãã®ã³ã³ããŒãã³ããå±éã®çµäºãŸã§ã«æ©èœããããšãé¡ã£ãŠããŸãã
ããšãã°ããªãœãŒã¹ãšã¢ãããŒã·ã§ã³å€ã®ãã®çµã¿åããã¯ã fail-mode
:
åããŠãããã€ãããšãã¯ãããŒã¿ããŒã¹ (MongoDB) ã®æºåããŸã æŽã£ãŠããªãå¯èœæ§ãããããããã€ã¯å€±æããŸãã ãã ããéå§ã®ç¬éãåŸ
ã€ããšãã§ãããããã€ã¡ã³ãã¯åŒãç¶ãè¡ãããŸãã
werf ã«ã¯ kubedog ã®ã¢ãããŒã·ã§ã³ãããã« XNUMX ã€ãããŸãã
-
failures-allowed-per-replica
â åã¬ããªã«ã§èš±å¯ããã転åã®æ°ã -
show-logs-until
â werf ãããŒã«ã¢ãŠãããããã¹ãŠã®ãããããã®ãã°ã (stdout ã«) 衚瀺ãããŸã§ã®æéãå¶åŸ¡ããŸãã ããã©ã«ãã¯PodIsReady
(ãã©ãã£ãã¯ããããã«å°éãå§ãããšãã«ããããæãŸãããªãã¡ãã»ãŒãžãç¡èŠãããã)ãå€ãæå¹ã§ããControllerIsReady
ОEndOfDeploy
.
å°å ¥ã«ä»ã«äœãå¿ èŠã§ãã?
ãã§ã«èª¬æãã XNUMX ã€ã®ç¹ã«å ããŠã次ã®ããšãèŠæããŸãã
- èŠãããã« ãã° - ãã¹ãŠãé£ç¶ããŠã§ã¯ãªããå¿ èŠãªãã®ã ããéžæããŸãã
- 远跡 é²æãžã§ããæ°åéããµã€ã¬ã³ããã«ãã³ã°ããå Žåãããã§äœãèµ·ãã£ãŠããã®ããç解ããããšãéèŠã§ããããã§ãã
- ОЌеÑÑ èªåããŒã«ãã㯠äœãåé¡ãçºçããå Žåã«åã㊠(ãããã£ãŠãå±éã®å®éã®ã¹ããŒã¿ã¹ãç¥ãããšãéèŠã§ã)ã ããŒã«ã¢ãŠãã¯ã¢ãããã¯ã§ããå¿ èŠããããŸããã€ãŸããæåŸãŸã§å®è¡ããããããã¹ãŠãåã®ç¶æ ã«æ»ããŸãã
çµæ
ç§ãã¡äŒæ¥ã«ãšã£ãŠãé
ä¿¡ã®ããŸããŸãªæ®µé (ãã«ããå
¬éããããã€) ã§èª¬æãããŠãããã¹ãŠã®ãã¥ã¢ã³ã¹ãå®è£
ããã«ã¯ãCI ã·ã¹ãã ãšãŠãŒãã£ãªãã£ã§ååã§ãã
çµè«ã®ä»£ããã«:
werf ã®å©ãã«ãããç§ãã¡ã¯ DevOps ãšã³ãžãã¢ã®å€ãã®åé¡ã解決ããäžã§å€§ããªé²æ©ãéããŠããŸãããããåºç¯ãªã³ãã¥ããã£ãå°ãªããšããã®ãŠãŒãã£ãªãã£ãå®éã«è©ŠããŠã¿ãŠããããå¬ããã§ãã äžç·ã«è¡åãããšè¯ãçµæãéæãããããªããŸãã
ãããªãšã¹ã©ã€ã
ããã©ãŒãã³ã¹ã®ãã㪠(çŽ 47 å):
å ±åæžã®ãã¬ãŒã³ããŒã·ã§ã³:
PS
Kubernetes ã«é¢ãããã®ä»ã®ã¬ããŒãã¯ããã°ã«ãããŸãã
- «
Kubernetes ã®èªåã¹ã±ãŒãªã³ã°ãšãªãœãŒã¹ç®¡ç » ïŒããããªãŒã»ã¹ããªã£ããã27幎2019æXNUMXæ¥ãã¹ãã©ã€ã¯ãã«ãŠïŒ; - «
Kubernetesã®æ¡åŒµãšè£å® » (Andrey Polovovã8 幎 2019 æ XNUMX æ¥ãSaint HighLoad++); - «
ããŒã¿ããŒã¹ãšKubernetes » (Dmitry Stolyarovã8 幎 2018 æ XNUMX æ¥ HighLoad++); - «
ã¢ãã¿ãªã³ã°ãšKubernetes » (ããããªãŒã»ã¹ããªã£ããã28 幎 2018 æ XNUMX æ¥ãRootConf ã«ãŠ); - «
Kubernetes ãš GitLab ã䜿çšãã CI/CD ã®ãã¹ã ãã©ã¯ãã£ã¹ » (Dmitry Stolyarovã7 幎 2017 æ XNUMX æ¥ HighLoad++); - «
å°èŠæš¡ãããžã§ã¯ãã«ããã Kubernetes ã®çµéš » (ããããªãŒã»ã¹ããªã£ããã6 幎 2017 æ XNUMX æ¥ãRootConf ã«ãŠ).
åºæïŒ habr.com