Kubernetes ãå®å
šã«ãã¹ã¿ãŒããã«ã¯ãã¯ã©ã¹ã¿ãŒ ãªãœãŒã¹ãã¹ã±ãŒãªã³ã°ããããŸããŸãªæ¹æ³ãç¥ãå¿
èŠããããŸãã
è«æ
ã¹ã±ãŒãªã³ã°ã«ã€ããŠèããããšãéèŠãªçç±
ãã ãã次ã®è³ªåã«ã€ããŠãèæ ®ããå¿ èŠããããŸãã
- ã¢ãžã¥ãŒã«ãšã¢ããªã±ãŒã·ã§ã³ãæ¡åŒµããã«ã¯ã©ãããã°ããã§ãã?
- ã³ã³ããã®éçšãšå¹çãç¶æããã«ã¯ã©ãããã°ããã§ãããã?
- ãŠãŒã¶ãŒã«ããã³ãŒããã¯ãŒã¯ããŒãã®ç¶ç¶çãªå€æŽã«ã©ã®ããã«å¯Ÿå¿ããã?
ãªãœãŒã¹ãšããã©ãŒãã³ã¹ã®ãã©ã³ã¹ããšãããã« Kubernetes ã¯ã©ã¹ã¿ãŒãæ§æããããšã¯å°é£ãªå ŽåããããKubernetes ã®å éšåäœã«é¢ããå°éç¥èãå¿ èŠã§ãã ã¢ããªã±ãŒã·ã§ã³ãŸãã¯ãµãŒãã¹ã®ã¯ãŒã¯ããŒãã¯ãXNUMX æ¥ãéããŠããŸã㯠XNUMX æéã«ããã£ãŠå€åããå¯èœæ§ãããããããã©ã³ã¹ããšãããšã¯ç¶ç¶çãªããã»ã¹ã§ãããšèããã®ãæåã§ãã
Kubernetes èªåã¹ã±ãŒãªã³ã° ã¬ãã«
å¹æçãªèªåã¹ã±ãŒãªã³ã°ã«ã¯ã次㮠XNUMX ã€ã®ã¬ãã«éã®èª¿æŽãå¿ èŠã§ãã
- ããã ã¬ãã«ãæ°Žå¹³ (æ°Žå¹³ããã ãªãŒãã¹ã±ãŒã©ãŒãHPA) ããã³åçŽãªãŒãã¹ã±ãŒã©ãŒ (åçŽããã ãªãŒãã¹ã±ãŒã©ãŒãVPA) ãå«ã¿ãŸãã ããã«ãããã³ã³ãããŒã§äœ¿çšã§ãããªãœãŒã¹ãã¹ã±ãŒãªã³ã°ãããŸãã
- ã¯ã©ã¹ã¿ãŒ ã¬ãã«ãã¯ã©ã¹ã¿ãŒ ãªãŒãã¹ã±ãŒã©ãŒ (CA) ã«ãã£ãŠç®¡çãããã¯ã©ã¹ã¿ãŒå ã®ããŒãã®æ°ãå¢æžããŸãã
æ°Žå¹³ãªãŒãã¹ã±ãŒã©ãŒ (HPA) ã¢ãžã¥ãŒã«
ååã瀺ãããã«ãHPA ã¯ããã ã¬ããªã«ã®æ°ãã¹ã±ãŒãªã³ã°ããŸãã ã»ãšãã©ã® Devops ã¯ãã¬ããªã«ã®æ°ãå€æŽããããªã¬ãŒãšã㊠CPU ãšã¡ã¢ãªã®è² è·ã䜿çšããŸãã ãã ãã以äžã«åºã¥ããŠã·ã¹ãã ãæ¡åŒµããããšã¯å¯èœã§ãã
é«ã¬ãã«ã® HPA åäœå³:
- HPA ã¯ãã€ã³ã¹ããŒã«äžã«æå®ãããã¡ããªãã¯å€ãããã©ã«ãã® 30 ç§ééã§ç¶ç¶çã«ãã§ãã¯ããŸãã
- æå®ããããããå€ã«éãããšãHPA ã¯ã¢ãžã¥ãŒã«ã®æ°ãå¢ããããšããŸãã
- HPA ã¯ããããã€ã¡ã³ã/ã¬ããªã±ãŒã·ã§ã³ ã³ã³ãããŒã©ãŒå ã®ã¬ããªã«ã®æ°ãæŽæ°ããŸãã
- 次ã«ãå±é/è€è£œã³ã³ãããŒã©ãŒã¯ãå¿ èŠãªè¿œå ã¢ãžã¥ãŒã«ãå±éããŸãã
HPA ã¯ãã¡ããªãã¯ãããå€ã«éãããšã¢ãžã¥ãŒã«å±éããã»ã¹ãéå§ããŸãã
HPA ã䜿çšããå Žåã¯ã次ã®ç¹ãèæ ®ããŠãã ããã
- ããã©ã«ãã® HPA ãã§ãã¯éé㯠30 ç§ã§ãã ãã©ã°ã«ãã£ãŠèšå®ãããŸã æ°Žå¹³ããããªãŒãã¹ã±ãŒã©ãŒåææé ã³ã³ãããŒã©ãŒãããŒãžã£ãŒã§ã
- ããã©ã«ãã®çžå¯Ÿèª€å·®ã¯ 10% ã§ãã
- ã¢ãžã¥ãŒã«æ°ãæåŸã«å¢å ããåŸãHPA ã¯ã¡ããªã¯ã¹ã XNUMX å以å ã«å®å®ãããšäºæ³ããŸãã ãã®ééã¯ãã©ã°ã«ãã£ãŠèšå®ãããŸã æ°Žå¹³ããããªãŒãã¹ã±ãŒã©ãŒã¢ããã¹ã±ãŒã«é 延.
- æåŸã«ã¢ãžã¥ãŒã«æ°ãæžãããåŸãHPA ã¯å®å®ãããŸã§ XNUMX åéåŸ æ©ããŸãã ãã®ééã¯ãã©ã°ã«ãã£ãŠèšå®ãããŸã æ°Žå¹³ããããªãŒãã¹ã±ãŒã©ãŒããŠã³ã¹ã±ãŒã«é 延.
- HPA ã¯ãã¬ããªã±ãŒã·ã§ã³ ã³ã³ãããŒã©ãŒã§ã¯ãªãå±éãªããžã§ã¯ãã§æãããæ©èœããŸãã æ°Žå¹³èªåã¹ã±ãŒãªã³ã°ã¯ãã¬ããªã±ãŒã·ã§ã³ ã³ã³ãããŒã©ãŒãçŽæ¥æäœããããŒãªã³ã° ã¢ããããŒããšäºææ§ããããŸããã ãããã€ã¡ã³ãã®å Žåãã¬ããªã«ã®æ°ã¯ãããã€ã¡ã³ã ãªããžã§ã¯ãã«çŽæ¥äŸåããŸãã
ãããã®åçŽèªåã¹ã±ãŒãªã³ã°
åçŽèªåã¹ã±ãŒãªã³ã° (VPA) ã¯ãããå€ãã® (ãŸãã¯ããå°ãªã) CPU æéãŸãã¯ã¡ã¢ãªãæ¢åã®ãããã«å²ãåœãŠãŸãã ã¹ããŒããã«ãŸãã¯ã¹ããŒãã¬ã¹ ãããã«é©ããŠããŸãããäž»ã«ã¹ããŒããã« ãµãŒãã¹ã察象ãšããŠããŸãã ãã ããæåã«å²ãåœãŠããããªãœãŒã¹ã®éãèªåçã«èª¿æŽããå¿ èŠãããå Žåã¯ãã¹ããŒãã¬ã¹ ã¢ãžã¥ãŒã«ã« VPA ã䜿çšããããšãã§ããŸãã
VPA 㯠OOM (ã¡ã¢ãªäžè¶³) ã€ãã³ãã«ãå¿çããŸãã CPU æéãšã¡ã¢ãªãå€æŽããã«ã¯ãããããåèµ·åããå¿
èŠããããŸãã åèµ·åãããšãVPA ã¯å²ãåœãŠããžã§ãã (
åã¢ãžã¥ãŒã«ã®æå°ãªãœãŒã¹ãšæ倧ãªãœãŒã¹ãèšå®ã§ããŸãã ãããã£ãŠãå²ãåœãŠãããã¡ã¢ãªã®æ倧éã 8 GB ã«å¶éã§ããŸãã ããã¯ãçŸåšã®ããŒããã³ã³ãããŒããšã« 8 GB ãè¶
ããã¡ã¢ãªãŒã確å®ã«å²ãåœãŠãããšãã§ããªãå Žåã«åœ¹ç«ã¡ãŸãã 詳现ãªä»æ§ãšåäœã¡ã«ããºã ã«ã€ããŠã¯ã
ããã«ãVPAã«ã¯èå³æ·±ãã¬ã³ã¡ã³ãæ©èœïŒVPA RecommenderïŒããããŸãã ãã¹ãŠã®ã¢ãžã¥ãŒã«ã®ãªãœãŒã¹äœ¿çšéãš OOM ã€ãã³ããç£èŠããå±¥æŽã¡ããªã¯ã¹ã«åºã¥ãã€ã³ããªãžã§ã³ããªã¢ã«ãŽãªãºã ã«åºã¥ããŠæ°ããã¡ã¢ãªãš CPU æéã®å€ãææ¡ããŸãã ããã ãã³ãã«ãååŸããŠãæšå¥šããããªãœãŒã¹å€ãè¿ã API ããããŸãã
VPA Recommender ã¯ãªãœãŒã¹ã®ãå¶éãã远跡ããªãããšã«æ³šæããŠãã ããã ããã«ãããã¢ãžã¥ãŒã«ãããŒãå ã®ãªãœãŒã¹ãç¬å ããå¯èœæ§ããããŸãã 倧éã®ã¡ã¢ãªã CPU ã®æ¶è²»ãé¿ããããã«ãåå空éã¬ãã«ã§å¶éãèšå®ããããšããå§ãããŸãã
é«ã¬ãã«ã® VPA æäœã¹ããŒã :
- VPA ã¯ãã€ã³ã¹ããŒã«äžã«æå®ãããã¡ããªãã¯å€ãããã©ã«ãã® 10 ç§ééã§ç¶ç¶çã«ãã§ãã¯ããŸãã
- æå®ããããããå€ã«éãããšãVPA ã¯å²ãåœãŠããããªãœãŒã¹ã®éãå€æŽããããšããŸãã
- VPA ã¯ããããã€ã¡ã³ã/ã¬ããªã±ãŒã·ã§ã³ ã³ã³ãããŒã©ãŒå ã®ãªãœãŒã¹ã®æ°ãæŽæ°ããŸãã
- ã¢ãžã¥ãŒã«ãåèµ·åããããšããã¹ãŠã®æ°ãããªãœãŒã¹ãäœæãããã€ã³ã¹ã¿ã³ã¹ã«é©çšãããŸãã
VPA ã¯å¿
èŠãªéã®ãªãœãŒã¹ãè¿œå ããŸã
VPA ã䜿çšããå Žåã¯ã次ã®ç¹ã«æ³šæããŠãã ããã
- ã¹ã±ãŒãªã³ã°ã«ã¯ãããã®å¿ é ã®åèµ·åãå¿ èŠã§ãã ããã¯ãå€æŽåŸã®åäœãäžå®å®ã«ãªãã®ãé¿ããããã«å¿ èŠã§ãã ä¿¡é Œæ§ã確ä¿ããããã«ãã¢ãžã¥ãŒã«ã¯åèµ·åãããæ°ããå²ãåœãŠããããªãœãŒã¹ã«åºã¥ããŠããŒãéã§åæ£ãããŸãã
- VPA ãš HPA ã¯ãŸã çžäºã«äºææ§ããªããããåããããäžã§å®è¡ã§ããŸããã åãã¯ã©ã¹ã¿ãŒå ã§äž¡æ¹ã®ã¹ã±ãŒãªã³ã° ã¡ã«ããºã ã䜿çšããŠããå Žåã¯ããããã®ã¡ã«ããºã ãåããªããžã§ã¯ãäžã§ã¢ã¯ãã£ãåãããªãããã«èšå®ããŠãã ããã
- VPA ã¯ãéå»ãšçŸåšã®äœ¿çšç¶æ³ã®ã¿ã«åºã¥ããŠããªãœãŒã¹ã«å¯Ÿããã³ã³ãããŒã®ãªã¯ãšã¹ãã調æŽããŸãã ãªãœãŒã¹äœ¿çšéã®å¶éã¯èšå®ãããŸããã ã¢ããªã±ãŒã·ã§ã³ãæ£ããåäœããããŸããŸãå€ãã®ãªãœãŒã¹ãåŒãç¶ãå§ãããšããåé¡ãçºçããå¯èœæ§ããããŸããããã«ãããKubernetes ããã®ãããããªãã«ããããšã«ãªããŸãã
- VPA ã¯ãŸã éçºã®åæ段éã«ãããŸãã è¿ãå°æ¥ã«ã·ã¹ãã ãå€æŽãããå¯èœæ§ãããããšã«åããŠãã ããã ã«ã€ããŠèªãããšãã§ããŸã
æ¢ç¥ã®å¶éäºé Оéçºèšç» ã ãããã£ãŠãVPA ãš HPA ã®å ±åéçšãããã³ãããã®åçŽèªåã¹ã±ãŒãªã³ã° ããªã·ãŒ (ããšãã°ãç¹å¥ãªã©ãã«ãVPA ãå¿ èŠã) ãåããã¢ãžã¥ãŒã«ã®å±éãå®è£ ããèšç»ããããŸãã
Kubernetes ã¯ã©ã¹ã¿ãŒã®èªåã¹ã±ãŒãªã³ã°
ã¯ã©ã¹ã¿ãŒ ãªãŒãã¹ã±ãŒã©ãŒ (CA) ã¯ãåŸ æ©äžã®ãããã®æ°ã«åºã¥ããŠããŒãã®æ°ãå€æŽããŸãã ã·ã¹ãã ã¯ä¿çäžã®ã¢ãžã¥ãŒã«ãå®æçã«ãã§ãã¯ããããå€ãã®ãªãœãŒã¹ãå¿ èŠã§ãããã¯ã©ã¹ã¿ãŒãèšå®ãããå¶éãè¶ ããŠããªãå Žåã¯ã¯ã©ã¹ã¿ãŒ ãµã€ãºãå¢ãããŸãã CA ã¯ã¯ã©ãŠã ãµãŒãã¹ ãããã€ããŒãšéä¿¡ããããã«è¿œå ã®ããŒããèŠæ±ããããã¢ã€ãã«ç¶æ ã®ããŒãã解æŸãããããŸãã CA ã®æåã®äžè¬å©çšå¯èœãªããŒãžã§ã³ã¯ãKubernetes 1.8 ã§å°å ¥ãããŸããã
SA æäœã®é«ã¬ãã«ã®ã¹ããŒã :
- CA ã¯ãããã©ã«ãã® 10 ç§ééã§ä¿çäžã®ã¢ãžã¥ãŒã«ããã§ãã¯ããŸãã
- ã¯ã©ã¹ã¿ãŒã«å²ãåœãŠãããååãªãªãœãŒã¹ããªãããã« XNUMX ã€ä»¥äžã®ããããã¹ã¿ã³ãã€ç¶æ ã«ãªã£ãŠããå Žåãã¯ã©ã¹ã¿ãŒã¯ XNUMX ã€ä»¥äžã®è¿œå ããŒãã®ããããžã§ãã³ã°ãè©Šã¿ãŸãã
- ã¯ã©ãŠã ãµãŒãã¹ ãããã€ããŒãå¿ èŠãªããŒããå²ãåœãŠããšããã®ããŒãã¯ã¯ã©ã¹ã¿ãŒã«åå ããããããæäŸã§ããããã«ãªããŸãã
- Kubernetes ã¹ã±ãžã¥ãŒã©ã¯ãä¿çäžã®ããããæ°ããããŒãã«åæ£ããŸãã ãã®åŸãäžéšã®ã¢ãžã¥ãŒã«ãåŸ æ©ç¶æ ã®ãŸãŸã§ããå Žåãããã»ã¹ãç¹°ãè¿ãããæ°ããããŒããã¯ã©ã¹ã¿ãŒã«è¿œå ãããŸãã
ã¯ã©ãŠãå
ã®ã¯ã©ã¹ã¿ãŒããŒãã®èªåããããžã§ãã³ã°
CA ã䜿çšããå Žåã¯ã次ã®ç¹ãèæ ®ããŠãã ããã
- CA ã¯ãCPU è² è·ã«é¢ä¿ãªããã¯ã©ã¹ã¿ãŒå ã®ãã¹ãŠã®ããããå®è¡ã§ããäœå°ã確ä¿ããŸãã ãŸããã¯ã©ã¹ã¿ãŒå ã«äžå¿ èŠãªããŒãããªãããšã確èªããããšããŸãã
- CA ã¯ãçŽ 30 ç§åŸã«ã¹ã±ãŒãªã³ã°ã®å¿ èŠæ§ãç»é²ããŸãã
- ããŒããäžèŠã«ãªããšãCA ã¯ããã©ã«ã㧠10 åéåŸ æ©ããŠããã·ã¹ãã ãã¹ã±ãŒã«ã¢ãŠãããŸãã
- èªåã¹ã±ãŒãªã³ã° ã·ã¹ãã ã«ã¯ãšã¯ã¹ãã³ããšããæŠå¿µããããŸãã ãããã¯ãæ°ããããŒããè¿œå ããããŒãã®ã°ã«ãŒããéžæããããã®ããŸããŸãªæŠç¥ã§ãã
- ãªãã·ã§ã³ã¯è²¬ä»»ãæã£ãŠäœ¿çšããŠãã ãã ã¯ã©ã¹ã¿ãŒãªãŒãã¹ã±ãŒã©ãŒ.kubernetes.io/safe-to-evict (true)ã å€æ°ã®ããããã€ã³ã¹ããŒã«ããå ŽåããŸãã¯ãããã®å€ãããã¹ãŠã®ããŒãã«åæ£ããŠããå Žåãã¯ã©ã¹ã¿ãŒãã¹ã±ãŒã«ã¢ãŠãããæ©èœãå€§å¹ ã«å€±ãããŸãã
- 䜿çš
ãããç Žå£äºç® ããããåé€ãããã®ãé²ãããã§ããããããåé€ããããšãã¢ããªã±ãŒã·ã§ã³ã®äžéšãå®å šã«ç Žæããå¯èœæ§ããããŸãã
Kubernetes ãªãŒãã¹ã±ãŒã©ãŒãçžäºã«å¯Ÿè©±ããæ¹æ³
å®å šã«èª¿åãããã«ã¯ãèªåã¹ã±ãŒãªã³ã°ãããã ã¬ãã« (HPA/VPA) ãšã¯ã©ã¹ã¿ãŒ ã¬ãã«ã®äž¡æ¹ã§é©çšããå¿ èŠããããŸãã ãããã¯æ¯èŒçç°¡åã«çžäºäœçšããŸãã
- HPA ãŸã㯠VPA ã¯ãããã ã¬ããªã«ãŸãã¯æ¢åã®ãããã«å²ãåœãŠããããªãœãŒã¹ãæŽæ°ããŸãã
- èšç»ãããã¹ã±ãŒãªã³ã°ã«ååãªããŒãããªãå ŽåãCA ã¯åŸ æ©ç¶æ ã®ãããã®ååšã«æ°ã¥ããŸãã
- CA ã¯æ°ããããŒããå²ãåœãŠãŸãã
- ã¢ãžã¥ãŒã«ã¯æ°ããããŒãã«é åžãããŸãã
å調ç㪠Kubernetes ã¹ã±ãŒã«ã¢ãŠã ã·ã¹ãã
Kubernetes èªåã¹ã±ãŒãªã³ã°ã§ããããééã
èªåã¹ã±ãŒãªã³ã°ãå®è£ ããããšãããšãdevops ãééããäžè¬çãªåé¡ãããã€ããããŸãã
HPA ãš VPA ã¯ãã¡ããªã¯ã¹ãšäžéšã®å±¥æŽããŒã¿ã«äŸåããŸãã å²ãåœãŠããããªãœãŒã¹ãäžååãªå Žåãã¢ãžã¥ãŒã«ã¯æå°åãããã¡ããªã¯ã¹ãçæã§ããªããªããŸãã ãã®å Žåãèªåã¹ã±ãŒãªã³ã°ã¯æ±ºããŠè¡ãããŸããã
ã¹ã±ãŒãªã³ã°æäœèªäœã¯æéã«ææã§ãã ãŠãŒã¶ãŒãåé¡ãé害ã«æ°ã¥ãåã«ãã¢ãžã¥ãŒã«ãšã¯ã©ã¹ã¿ãŒãè¿ éã«æ¡åŒµããããšèããŠããŸãã ãããã£ãŠãããããšã¯ã©ã¹ã¿ãŒã®å¹³åã¹ã±ãŒãªã³ã°æéãèæ ®ããå¿ èŠããããŸãã
çæ³çãªã·ããªãª - 4 å:
- 30ç§ã ã¿ãŒã²ãã ã¡ããªãã¯ã®æŽæ°: 30 ïœ 60 ç§ã
- 30ç§ã HPA ã¯ã¡ããªãã¯å€ããã§ãã¯ããŸã: 30 ç§ã
- 2ç§æªæºã§ãã ããããäœæããã1 ç§éã®åŸ æ©ç¶æ ã«ãªããŸãã
- 2ç§æªæºã§ãã CA ã¯åŸ æ©äžã®ã¢ãžã¥ãŒã«ã確èªããããããžã§ãã³ã° ããŒãã«åŒã³åºããéä¿¡ããŸã: 1 ç§ã
- 3åã ã¯ã©ãŠã ãããã€ããŒãããŒããå²ãåœãŠãŸãã K8 ã¯ãæºåãã§ãããŸã§æ倧 10 åéåŸ æ©ããŸã (ããã€ãã®èŠå ã«ãã£ãŠç°ãªããŸã)ã
ææªã® (ããçŸå®çãª) ã·ããªãª - 12 å:
- 30ç§ã ã¿ãŒã²ããææšãæŽæ°ããŸãã
- 30ç§ã HPA ã¯ã¡ããªãã¯å€ããã§ãã¯ããŸãã
- 2ç§æªæºã§ãã ããããäœæãããã¹ã¿ã³ãã€ç¶æ ã«ãªããŸãã
- 2ç§æªæºã§ãã CA ã¯åŸ æ©äžã®ã¢ãžã¥ãŒã«ã確èªããããŒããããããžã§ãã³ã°ããããã®åŒã³åºããè¡ããŸãã
- 10åã ã¯ã©ãŠã ãããã€ããŒãããŒããå²ãåœãŠãŸãã K8s ã¯æºåãã§ãããŸã§åŸ æ©ããŸãã åŸ ã¡æéã¯ããã³ããŒã®é 延ãOS ã®é 延ããµããŒã ããŒã«ãªã©ã®ããã€ãã®èŠå ã«ãã£ãŠç°ãªããŸãã
ã¯ã©ãŠããããã€ããŒã®ã¹ã±ãŒãªã³ã°ã¡ã«ããºã ãšåœç€Ÿã® CA ãæ··åããªãã§ãã ããã åŸè 㯠Kubernetes ã¯ã©ã¹ã¿ãŒå ã§å®è¡ãããã¯ã©ãŠã ãããã€ã㌠ãšã³ãžã³ã¯ããŒãåæ£ããŒã¹ã§åäœããŸãã ããããã¢ããªã±ãŒã·ã§ã³ã§äœãèµ·ãã£ãŠããã®ãã¯ããããŸããã ãããã®ã·ã¹ãã ã¯äžŠè¡ããŠåäœããŸãã
Kubernetes ã§ã¹ã±ãŒãªã³ã°ã管çããæ¹æ³
- Kubernetes ã¯ããªãœãŒã¹ç®¡çããã³ãªãŒã±ã¹ãã¬ãŒã·ã§ã³ ããŒã«ã§ãã ããããšã¯ã©ã¹ã¿ãŒ ãªãœãŒã¹ã管çããããã®æäœã¯ãKubernetes ããã¹ã¿ãŒããããã®éèŠãªãã€ã«ã¹ããŒã³ã§ãã
- HPA ãš VPA ãèæ ®ãããããã®ã¹ã±ãŒã©ããªãã£ã®ããžãã¯ãç解ããŸãã
- CA ã¯ãããããšã³ã³ãããŒã®ããŒãºãããç解ããŠããå Žåã«ã®ã¿äœ¿çšããŠãã ããã
- ã¯ã©ã¹ã¿ãŒãæé©ã«æ§æããã«ã¯ãããŸããŸãªã¹ã±ãŒãªã³ã° ã·ã¹ãã ãã©ã®ããã«é£æºããŠæ©èœããããç解ããå¿ èŠããããŸãã
- ã¹ã±ãŒãªã³ã°æéãèŠç©ãããšãã¯ãææªã®å Žåãšæè¯ã®å Žåã®ã·ããªãªã念é ã«çœ®ããŠãã ããã
åºæïŒ habr.com