ã¹ã¯ãŒã¿ãŒã®å¥³ã®åã 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ã¯ã¹ã¯ãŒã¿ãŒã«ãªããŸãã æã«ã¯ããªãã¯ãããå¿ èŠãšããæã«ã¯å¥ã®ãã®ãå¿ èŠãšããŸãã äž¡æ¹ãšãååšããæš©å©ããããŸãã