ã¹ã¯ãŒã¿ãŒã®å¥³ã®åã freepikã®ã€ã©ã¹ãã HashiCorpã«ããNomadããŽKubernetesã¯ãã³ã³ãããªãŒã±ã¹ãã¬ãŒã·ã§ã³çšã®300 kgã®ãŽãªã©ã§ãã äžçæå€§ã®ã³ã³ããã·ã¹ãã ã§åäœããŸãããé«äŸ¡ã§ãã
ãµããŒããšæ¥ãªåŠç¿æ²ç·ã«å€ãã®æéãè²»ãããªããã°ãªããªãå°ããªããŒã ã«ãšã£ãŠã¯ç¹ã«é«äŸ¡ã§ãã 4人ã®ããŒã ã«ãšã£ãŠãããã¯ãªãŒããŒãããã倧ããããŸãã ã ããç§ãã¡ã¯ä»£æ¿ææ®µãæ¢ãå§ããŸãã-ãããŠ
ãããã«æãããŸããã
äœã欲ãã
ç§ãã¡ã®ããŒã ã¯ãããã©ãŒãã³ã¹ãç£èŠããã³åæããããã®å€ãã®å
žåçãªãµãŒãã¹ããµããŒãããŠããŸãïŒGoã§èšè¿°ãããã¡ããªãã¯ã®APIãšã³ããã€ã³ããPrometheusã®ãšã¯ã¹ããŒããLogstashã
Gollumãªã©ã®ãã°ããŒãµãŒãInfluxDBãElasticsearchãªã©ã®ããŒã¿ããŒã¹ã ãããã®åãµãŒãã¹ã¯ãç¬èªã®ã³ã³ããã§å®è¡ãããŸãã ãã®ãã¹ãŠãéçšãç¶ããã«ã¯ãã·ã³ãã«ãªã·ã¹ãã ãå¿
èŠã§ãã
ã³ã³ãããªãŒã±ã¹ãã¬ãŒã·ã§ã³ã®èŠä»¶ã®ãªã¹ãããå§ããŸããã
- å€ãã®ãã·ã³ã§äžé£ã®ãµãŒãã¹ãèµ·åããŸãã
- å®è¡äžã®ãµãŒãã¹ã®æŠèŠã
- ãµãŒãã¹éã®éä¿¡ã
- ãµãŒãã¹ãã¯ã©ãã·ã¥ããå Žåã®èªååèµ·åã
- å°ããªããŒã ã«ããã€ã³ãã©ã¹ãã©ã¯ãã£ã®ã¡ã³ããã³ã¹ã
ããã«ã次ã®ããšã䟿å©ã§ãããå¿
é ã§ã¯ãããŸããã
- èœåã«å¿ããŠãã·ã³ãããŒã¯ããŸãïŒããšãã°ãéãI / OãµãŒãã¹çšã«é«éãã£ã¹ã¯ã§ãã·ã³ãããŒã¯ããŸãïŒã
- ãªãŒã±ã¹ãã©ã«é¢ä¿ãªããµãŒãã¹ãéå§ããæ©èœïŒéçºäžãªã©ïŒã
- æ§æãšç§å¯ãå
±æããäžè¬çãªå Žæã
- ã¡ããªãã¯ãšãã°ã®ãšã³ããã€ã³ãã
Kubernetesãç§ãã¡ã«åããªãçç±
Kubernetesã§ãããã¿ã€ããäœæãããšããç¡æ¡ä»¶ã«äŸåããããžãã¯ã®ããè€éãªã¬ã€ã€ãŒã远å ãå§ããããšã«æ°ä»ããŸããã
äŸãšããŠãKubernetesã¯
ConfigMapsãä»ããŠ
çµã¿èŸŒã¿ã®ãµãŒãã¹æ§æã
ãµããŒãããŸãã ç¹ã«è€æ°ã®æ§æãã¡ã€ã«ãããŒãžãããããããã«è¿œå ã®ãµãŒãã¹ã远å ããããããšãããã«æ··ä¹±ããå¯èœæ§ããããŸãã KubernetesïŒãŸãã¯ãã®å Žåã¯
helm ïŒã䜿çšãããšãé¢å¿ãåé¢ããããã«åçã«å€éšæ§æãå®è£
ã§ããŸãã ããããããã«ããããããžã§ã¯ããšKubernetesã®éã®åŒ·åºãªç§å¯ã®ã€ãªãããçãŸããŸãã ãã ããHelmãšConfigMapsã¯è¿œå ãªãã·ã§ã³ã§ããããã䜿çšããå¿
èŠã¯ãããŸããã æ§æãDockerã€ã¡ãŒãžã«åçŽã«ã³ããŒã§ããŸãã ããã«ããããããããã®ã«ãŒãã«é²ãã§äžèŠãªæœè±¡åãæ§ç¯ããããšã¯é
åçã§ãããåŸã§åŸæããããšãã§ããŸãã
ããã«ãKubernetesãšã³ã·ã¹ãã ã¯æ¥éã«æé·ããŠããŸãã ãã¹ããã©ã¯ãã£ã¹ãšææ°ã®ããŒã«ãææ°ã®ç¶æ
ã«ä¿ã€ã«ã¯ãå€ãã®æéãšãšãã«ã®ãŒãå¿
èŠã§ãã Kubectlãminikubeãkubeadmãhelmãtillerãkopsãoc-ãªã¹ãã¯å»¶ã
ãšç¶ãã äœæ¥ã®éå§æã«ã¯ããããã®ããŒã«ã®ãã¹ãŠãå¿
èŠãšããããã§ã¯ãããŸããããå¿
èŠãªãã®ãããããªãããããã¹ãŠã«æ³šæããå¿
èŠããããŸãã ãã®ãããåŠç¿æ²ç·ã¯ããªãæ¥ã§ãã
Kubernetesã䜿çšããå Žå
åœç€Ÿã§ã¯ãå€ããKubernetesã䜿çšããŠãããKubernetesã«éåžžã«æºè¶³ããŠããŸãã ãããã®ã€ã³ã¹ã¿ã³ã¹ã¯ãååãªãµããŒããªãœãŒã¹ãããGoogleãŸãã¯Amazonã«ãã£ãŠç®¡çãããŸãã
Kubernetesã«ã¯ã管çããããå€§èŠæš¡ãªã³ã³ãããªãŒã±ã¹ãã¬ãŒã·ã§ã³ãå®çŸãã
çŽ æŽãããæ©èœãåãã£ãŠã
ãŸã ã
- è©³çŽ°ãªæš©å©ç®¡ç ã
- ã«ã¹ã¿ã ã³ã³ãããŒã©ãŒã¯ãã¯ã©ã¹ã¿ãŒã«ããžãã¯ã远å ããŸãã ãããã¯ãKubernetes APIãšéä¿¡ããããã°ã©ã ã§ãã
- ãªãŒãã¹ã±ãŒãªã³ã° ïŒ Kubernetesã¯ãæåã§ã®ä»å
¥ãå¿
èŠãšããã«ããµãŒãã¹ã¡ããªãã¯ã䜿çšããŠãªã³ããã³ãã§ãµãŒãã¹ãã¹ã±ãŒãªã³ã°ã§ããŸãã
åé¡ã¯ãããããã¹ãŠã®æ©èœãæ¬åœã«å¿
èŠãã©ããã§ãã æœè±¡åã ãã«é Œãããšã¯ã§ããŸããã
ãã³ãããã®äžã§äœãèµ·ãã£ãŠããããç¥ãå¿
èŠããããŸã ã
ç§ãã¡ã®ããŒã ã¯ïŒã¡ã€ã³ã€ã³ãã©ã¹ãã©ã¯ãã£ãšã®å¯æ¥ãªæ¥ç¶ã«ããïŒã»ãšãã©ã®ãµãŒãã¹ããªã¢ãŒãã§æäŸããŠãããããç¬èªã®Kubernetesã¯ã©ã¹ã¿ãŒãäœæããããããŸããã§ããã ãµãŒãã¹ãæäŸãããã£ãã ãã§ãã
黿± ã¯å«ãŸããŠããŸãã
Nomadã¯ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ã®20ïŒ
ã§ãå¿
èŠãªãã®ã®80ïŒ
ãæäŸããŸãã 圌ãããŠããã®ã¯ãå±éã®ç®¡çã ãã§ãã ãããã¯å±éã管çãããšã©ãŒãçºçããå Žåã«ã³ã³ãããåèµ·åããŸã...ããã ãã§ãã
Nomadã®ãã€ã³ãã¯
æå°éã§ãããšããããšã§ããè©³çŽ°ãªæš©å©ç®¡çã
é«åºŠãªãããã¯ãŒã¯ããªã·ãŒã¯ç¹å¥ã«èæ¡ãããŠããŸããã ãããã®ã³ã³ããŒãã³ãã¯ãæäŸãããããŸã£ããæäŸãããŸããã
ãããã¯äœ¿ãããããšå®çšæ§ã®å®ç§ãªåХ忡ãèŠã€ãããšæããŸãã å°èŠæš¡ãªç¬ç«ãããµãŒãã¹ã«é©ããŠããŸãã ããã«å¶åŸ¡ãå¿
èŠãªå Žåã¯ãèªåã§èª¿æŽããããå¥ã®ã¢ãããŒãã䜿çšããå¿
èŠããããŸãã ãããã¯
åãªããªãŒã±ã¹ãã©ã§ãã
Nomadã®æå€§ã®å©ç¹ã¯
ã亀æãç°¡åãª
ããšã§ãã ãã³ããŒã®æ©èœã¯ãµãŒãã¹ã管çããä»ã®ã·ã¹ãã ã«ç°¡åã«çµ±åã§ããããããã³ããŒãžã®ææåã¯ã»ãšãã©ãããŸããã ã¯ã©ã¹ã¿å
ã®ãã¹ãŠã®ãã·ã³ã§éåžžã®ãã€ããªã®ããã«åäœããŸããããã ãã§ãïŒ
ççµåã³ã³ããŒãã³ãã®éç§çæ
ç³»
ãšã³ã·ã¹ãã ã«ãããNomadã®çã®åã
Consul ïŒkey-value storageïŒã
Vault ïŒsecrets processingïŒãªã©ã®ä»ã®ïŒå®å
šã«ãªãã·ã§ã³ã®ïŒè£œåãšéåžžã«ããçµ±åãããŸãã Nomadãã¡ã€ã«å
ã«ã¯ããããã®ãµãŒãã¹ããããŒã¿ãæœåºããããã®ã»ã¯ã·ã§ã³ããããŸãã
template { data = <<EOH LOG_LEVEL="{{key "service/geo-api/log-verbosity"}}" API_KEY="{{with secret "secret/geo-api-key"}}{{.Data.value}}{{end}}" EOH destination = "secrets/file.env" env = true }
ããã§ãConsulããããŒ
service/geo-api/log-verbosity
ãèªã¿åãããã®éçšã§ç°å¢å€æ°
LOG_LEVEL
ããã衚ããŸãã ãŸããVaultã®
secret/geo-api-key
ã
API_KEY
ãšããŠ
API_KEY
ãŸãã ã·ã³ãã«ã ã匷åïŒ
Nomadã¯ã·ã³ãã«ã§ãããããAPIãä»ããŠä»ã®ãµãŒãã¹ãä»ããŠç°¡åã«æ¡åŒµã§ããŸãã ããšãã°ãã¿ã¹ã¯ã®ã¿ã°ããµããŒããããŠããŸãã
trv-metrics
ã¿ã°ã䜿çšããŠããã¹ãŠã®ãµãŒãã¹ã«ã¡ããªãã¯ãã¿ã°ä»ãããŸãã ãããã£ãŠãPrometheusã¯Consulãä»ããŠãããã®ãµãŒãã¹ãç°¡åã«èŠã€ãã宿çã«æ°ããããŒã¿ã®ãšã³ããã€ã³ã
/metrics
ããã§ãã¯ããŸãã åãããšããããšãã°
Lokiã䜿çšããŠãã°ã«è¡ãããšãã§ããŸãã
æ¡åŒµæ§ã«ã¯ä»ã«ãå€ãã®äŸããããŸãã
- Jenkinsãžã§ããããã¯ã§å®è¡ãããšãConsulã¯ãµãŒãã¹æ§æã倿Žããããšãã«Nomadãžã§ãã®åå±éã远跡ããŸãã
- Cephã¯ãNomadã«åæ£ãã¡ã€ã«ã·ã¹ãã ã远å ããŸãã
- è² è·åæ£ã®ããã®fabio ã
ãã®ãã¹ãŠã«ããããã³ããŒã«ç¹å¥ãªãã€ã³ããããããšãªã
ãã€ã³ãã©ã¹ãã©ã¯ãã£ã
ææ©çã«éçºã§ããŸãã
æ£çŽãªèŠå
å®ç§ãªã·ã¹ãã ã¯ãããŸããã ææ°ã®æ©èœãããã«éçšç°å¢ã«å°å
¥ããããšã¯ãå§ãããŸããã ãã¡ããããã°ãæ¬ èœããŠããæ©èœã¯ãããŸãããKubernetesã«ã€ããŠãåãããšãèšããŸãã
Kubernetesãšæ¯èŒããŠãNomadã³ãã¥ããã£ã¯ããã»ã©å€§ãããããŸããã Kubernetesã«ã¯ãã§ã«çŽ75,000ã®ã³ããããš2,000ã®è²¢ç®è
ãããŸãããNomadã«ã¯çŽ14,000ã®ã³ããããš300ã®è²¢ç®è
ãããŸãã ãããã¯ãKubernetesã®é床ã«ã€ããŠããã®ãé£ãããªããŸãããããããããã¯å¿
èŠãããŸããïŒ ããã¯ããç¹åãããã·ã¹ãã ã§ãããã³ãã¥ããã£ãå°ãããšããããšã¯ããã«ãªã¯ãšã¹ããKubernetesãããæ³šç®ãããŠåãå
¥ããããå¯èœæ§ãé«ãããšãæå³ããŸãã
ãŸãšã
çµè«ïŒKubernetesã¯èª°ãã䜿çšãããšããçç±ã ãã§äœ¿çšããªãã§ãã ããã èŠä»¶ãæ
éã«è©äŸ¡ããã©ã®ããŒã«ãããåçæ§ãé«ããã確èªããŠãã ããã
å€§èŠæš¡ãªã€ã³ãã©ã¹ãã©ã¯ãã£ã«å€§éã®åçš®ã®ãµãŒãã¹ãå±éããäºå®ãããå Žåã¯ãKubernetesãé©ããŠããŸãã 远å ãããè€éããšã¡ã³ããã³ã¹ã³ã¹ããèŠããŠãããŠãã ããã
Google Kubernetes Engineã
Amazon EKSãªã©ã®Kubernetes管çç°å¢ã䜿çšãããšãã³ã¹ãã®äžéšãåé¿ã§ããŸãã
ãµããŒããç°¡åã§æ¡åŒµå¯èœãªä¿¡é Œã§ãããªãŒã±ã¹ãã¬ãŒã¿ãŒãæ¢ããŠããã ããªããNomadã詊ããŠã¿ãŸãããïŒ ãããããªããã©ããŸã§å°ãã®ãçåã«æããããããŸããã
Kubernetesãè»ãšæ¯èŒãããšãNomadã¯ã¹ã¯ãŒã¿ãŒã«ãªããŸãã æã«ã¯ããªãã¯ãããå¿
èŠãšããæã«ã¯å¥ã®ãã®ãå¿
èŠãšããŸãã äž¡æ¹ãšãååšããæš©å©ããããŸãã