2017幎ã«æåã®Kubernetesã¯ã©ã¹ã¿ãŒã®äœæãéå§ããŸããïŒããŒãžã§ã³K8s 1.9.4ããïŒã 2ã€ã®ã¯ã©ã¹ã¿ãŒããããŸããã 1ã€ã¯ãã¢ã¡ã¿ã«ãRHELä»®æ³ãã·ã³ããã1ã€ã¯AWSEC2ã¯ã©ãŠãã§åäœããŸããã
çŸåšãåœç€Ÿã®ã€ã³ãã©ã¹ãã©ã¯ãã£ã«ã¯ã400ãè¶ ããä»®æ³ãã·ã³ãè€æ°ã®ããŒã¿ã»ã³ã¿ãŒã«åæ£ããŠããŸãããã®ãã©ãããã©ãŒã ã¯ã400äžè¿ãã®ã¢ã¯ãã£ãããã€ã¹ã®å·šå€§ãªãããã¯ãŒã¯ãé§åãããå¯çšæ§ã®é«ãããã·ã§ã³ã¯ãªãã£ã«ã«ãªã¢ããªã±ãŒã·ã§ã³ããã³ã·ã¹ãã ã®åºç€ãšããŠæ©èœããŸãã
æçµçã«ãKubernetesã¯ç§ãã¡ã®ç掻ã楜ã«ããŠãããŸãããããããžã®éã¯åä»ã§ãå®å šãªãã©ãã€ã ã®å€æŽãå¿ èŠã§ãããäžé£ã®ã¹ãã«ãšããŒã«ã ãã§ãªããèšèšãšæèãžã®ã¢ãããŒããå®å šã«å€åããŸãããç§ãã¡ã¯å€ãã®æ°ãããã¯ãããžãŒãç¿åŸããã€ã³ãã©ã¹ãã©ã¯ãã£éçºãšããŒã éçºã«å€é¡ã®æè³ãããªããã°ãªããŸããã§ããã
ããã¯ã3幎éã«ããã£ãŠKubernetesãæ¬çªç°å¢ã§äœ¿çšããããšããåŠãã éèŠãªæèšã§ãã
1.Javaã¢ããªã±ãŒã·ã§ã³ã®é¢çœã話
ãã€ã¯ããµãŒãã¹ãšã³ã³ããåã«é¢ããŠã¯ããšã³ãžãã¢ã¯ãäž»ã«ãã®æªåé«ãäžå®å šãªã¡ã¢ãªç®¡çã®ããã«ãJavaãæ¬é ããåŸåããããŸãããã ããä»æ¥ã§ã¯ç¶æ³ãç°ãªããJavaã®ã³ã³ãããšã®äºææ§ã¯è¿å¹ŽåäžããŠããŸããçµå±ã®ãšãããApacheKafkaãElasticsearchã®ãããªäººæ°ã®ããã·ã¹ãã ã§ããJavaã§å®è¡ãããŸãã
2017ã 2018幎ã«ã¯ãäžéšã®ã¢ããªã±ãŒã·ã§ã³ãJavaããŒãžã§ã³8ã§å®è¡ãããŸããã圌ãã¯ãã°ãã°Dockerã®ãããªã³ã³ããåãããç°å¢ã§æ©èœããããšãæåŠããããŒãã¡ã¢ãªã®åé¡ãšã¬ããŒãžã³ã¬ã¯ã¿ã®äžé©åãªäœæ¥ã®ããã«ã¯ã©ãã·ã¥ããŸãããçµå±ã®ãšããããããã®åé¡ã¯ãJVMãLinuxã³ã³ããåã¡ã«ããºã ïŒ
cgroups
ããã³namespaces
ïŒãå®è¡ã§ããªãããšãåå ã§ããã
ãã以æ¥ãOracleã¯Javaã®ã³ã³ããã®äžçãšã®äºææ§ãæ¹åããããã«å€å€§ãªåªåãæã£ãŠããŸãããæ©æã®Javaã®ããŒãžã§ã³8ã®ããã«ãå®éšçãªJVMãã©ã°ã¯ããããã®åé¡ã«å¯ŸåŠããããã«ç»å ŽïŒ
XX:+UnlockExperimentalVMOptions
åã³XX:+UseCGroupMemoryLimitForHeap.
ãããããã¹ãŠã®æ¹åã«ããããããã誰ãJavaã¯ãŸã é床ã«ã¡ã¢ãªéçŽãPythonã«æ¯ã¹ãŠèµ·åãé ãããšã«æªãè©å€ãæã£ãŠãããšäž»åŒµããªãã ããããŸãã¯è¡ããããã¯äž»ã«ãJVMããã³ClassLoaderã®ã¡ã¢ãªç®¡çã®è©³çŽ°ã«ãããã®ã§ãã
ä»æ¥ãæã ãããã°æã£ãŠããããŒãžã§ã³11以äžã䜿çšããããã®Javaã§åäœããããã«ãæã ã¯å°ãªããšãè©ŠããŠã¿ãŸãããŸããKubernetesã®ã¡ã¢ãªå¶éã¯ãJVMã®æ倧ããŒãã¡ã¢ãªå¶éããã1 GBé«ããªã£ãŠããŸãïŒ
-Xmx
ïŒ ïŒå¿µã®ããïŒãã€ãŸããJVMãããŒãã¡ã¢ãªã«8 GBã䜿çšããå Žåãã¢ããªã±ãŒã·ã§ã³ã®Kubernetesã¡ã¢ãªå¶éã¯9GBã«èšå®ãããŸãããããã®å¯Ÿçãšæ¹åã®ãããã§ãç掻ã¯å°ã楜ã«ãªããŸããã
2.Kubernetesã©ã€ããµã€ã¯ã«ã«é¢é£ããæŽæ°
Kubernetesã®ã©ã€ããµã€ã¯ã«ç®¡çïŒæŽæ°ãè¿œå ïŒã¯ãç¹ã«ã¯ã©ã¹ã¿ãŒããã¢ã¡ã¿ã«ãŸãã¯ä»®æ³ãã·ã³ã«åºã¥ããŠããå Žåãé¢åã§é£ããããšã§ããæ°ããããŒãžã§ã³ã«ã¢ããã°ã¬ãŒãããã«ã¯ãæ°ããã¯ã©ã¹ã¿ãŒãäœæããŠããã¯ãŒã¯ããŒãããã®ã¯ã©ã¹ã¿ãŒã«è»¢éããæ¹ãã¯ããã«ç°¡åã§ããããšãå€æããŸãããæ¢åã®ãµã€ãã®ã¢ããã°ã¬ãŒãã¯ãå€å€§ãªåŽåãšæ éãªèšç»ã䌎ããããåçŽã«å®è¡äžå¯èœã§ãã
ããã¯ãKubernetesã«ã¯ãã¢ããã°ã¬ãŒãæã«èæ ®ã§ããªããå¯åãããŒããå€ãããããã§ããã¯ã©ã¹ã¿ãæ©èœããããã«ã¯ãDockerããCalicoãFlannelãªã©ã®CNIãã©ã°ã€ã³ãŸã§ãããããã¹ãŠã®ã³ã³ããŒãã³ãããŸãšããŠåéããå¿ èŠããããŸãã KubesprayãKubeOneãkopsãkube-awsãªã©ã®ãããžã§ã¯ãã¯ãããã»ã¹ãããããç°¡çŽ åããŸãããæ¬ ç¹ããªãããã§ã¯ãããŸããã
Kubesprayã䜿çšããŠRHELä»®æ³ãã·ã³ã«ã¯ã©ã¹ã¿ãŒããããã€ããŸããã圌ã¯èªåãåªããŠããããšã蚌æãããKubesprayã«ã¯ãããŒãã®äœæãè¿œå ãåé€ãããŒãžã§ã³ã®æŽæ°ãããã³æ¬çªç°å¢ã§Kubernetesãæäœããããã«å¿ èŠãªã»ãŒãã¹ãŠã®ã¹ã¯ãªããããããŸããããšã¯ãããã¢ããã°ã¬ãŒãã¹ã¯ãªããã«ã¯ããã€ããŒããŒãžã§ã³ã§ãã¹ãããããŠã¯ãªããªããšããèŠåã䌎ããŸãããã€ãŸããç®çã®ããŒãžã§ã³ã«å°éããã«ã¯ããŠãŒã¶ãŒã¯ãã¹ãŠã®äžéããŒãžã§ã³ãã€ã³ã¹ããŒã«ããå¿ èŠããããŸããã
ããã§ã®äž»ãªãã€ã³ãã¯ãKubernetesã䜿çšããäºå®ãããå ŽåããŸãã¯ãã§ã«äœ¿çšããŠããå Žåã¯ãK8sã®ã©ã€ããµã€ã¯ã«ã«é¢é£ããæé ãšãããããœãªã¥ãŒã·ã§ã³ã«ã©ã®ããã«é©åããããæ€èšããããšã§ããå€ãã®å Žåãã¯ã©ã¹ã¿ãŒãææ°ã®ç¶æ ã«ä¿ã€ããããã¯ã©ã¹ã¿ãŒãäœæããŠå®è¡ããæ¹ãç°¡åã§ãã
3.ãã«ãããŠãããã€ããŸã
ãã«ããšãããã€ã¡ã³ãã®ãã€ãã©ã€ã³ãä¿®æ£ããå¿ èŠããããšããäºå®ã«åããŠãã ãããKubernetesãžã®ç§»è¡ã«äŒŽãããããã®ããã»ã¹ã¯æ ¹æ¬çã«å€åããŸãããJenkinsãã€ãã©ã€ã³ãåæ§ç¯ããã ãã§ãªããHelmãªã©ã®ããŒã«ã䜿çšããŠãGitã®æ§ç¯ãšæäœãDockerã€ã¡ãŒãžã®ã¿ã°ä»ããHelmãã£ãŒãã®ããŒãžã§ã³ç®¡çã®ããã®æ°ããæŠç¥ãéçºããŸããã
ã³ãŒããKubernetesãããã€ã¡ã³ããã¡ã€ã«ãDockerfilesãDockerã€ã¡ãŒãžãHelmãã£ãŒããç¶æããããã®åäžã®æŠç¥ãšãããããã¹ãŠãçµã³ä»ããæ¹æ³ãå¿ èŠã«ãªããŸãã
äœåºŠãç¹°ãè¿ããåŸã次ã®å³ã«èœã¡çããŸããã
- ã¢ããªã±ãŒã·ã§ã³ã³ãŒããšãã®ãã«ã ãã£ãŒãã¯ãç°ãªããªããžããªã«ãããŸããããã«ãããããããäºãã«ç¬ç«ããŠããŒãžã§ã³ç®¡çã§ããŸãïŒã»ãã³ãã£ãã¯ããŒãžã§ã³ç®¡çïŒã
- , , . , ,
app-1.2.0
charts-1.1.0
. (values
) Helm, patch- (,1.1.0
1.1.1
). (RELEASE.txt
) . - , Apache Kafka Redis ( ), . , Docker- Helm-. Docker- , .
(. .: Open Source- Kubernetes â werf â , .)
4. Liveness Readiness ( )
Kubernetesã®æŽ»æ§ãšæºåã®ãã§ãã¯ã¯ãã·ã¹ãã ã®åé¡ã«èªåŸçã«å¯ŸåŠããã®ã«æé©ã§ããé害ãçºçãããšãã«ã³ã³ãããåèµ·åãããç°åžžãªãã€ã³ã¹ã¿ã³ã¹ãããã©ãã£ãã¯ããªãã€ã¬ã¯ãã§ããŸãããã ããç¶æ³ã«ãã£ãŠã¯ããããã®ãã§ãã¯ãäž¡åã®å£ã«å€ãããã¢ããªã±ãŒã·ã§ã³ã®èµ·åãšå埩ã«åœ±é¿ãäžããå¯èœæ§ããããŸãïŒããã¯ãã¡ãã»ãŒãžã³ã°ãã©ãããã©ãŒã ãããŒã¿ããŒã¹ãªã©ã®ã¹ããŒããã«ã¢ããªã±ãŒã·ã§ã³ã«ç¹ã«åœãŠã¯ãŸããŸãïŒã
ç§ãã¡ã®ã«ãã«ã¯åœŒãã®ç ç²è ã«ãªããŸãããç§ãã¡ã¯3ã®ã¹ããŒããã«èšå®ããŠãã
Broker
ã®ãš3Zookeeper
ãšã®ãreplicationFactor
= 3ãminInSyncReplica
= 2.ã©ã³ãã ãªã¯ã©ãã·ã¥ãŸãã¯ã¯ã©ãã·ã¥åŸã«ãKafkaãåèµ·åãããšåé¡ãçºçããŸãããèµ·åæã«ãKafkaã¯ç Žæããã€ã³ããã¯ã¹ãä¿®æ£ããããã«è¿œå ã®ã¹ã¯ãªãããå®è¡ããŸãããããã«ã¯ãåé¡ã®é倧床ã«å¿ããŠ10ã30åããããŸããããã®é
延ã«ããã掻æ§ãã¹ããç¶ç¶çã«å€±æããKubernetesãã匷å¶çµäºãããŠKafkaãåèµ·åããŸããããã®çµæãKafkaã¯ã€ã³ããã¯ã¹ãä¿®æ£ããã ãã§ãªããéå§ããããšããã§ããŸããã
åœæã®å¯äžã®è§£æ±ºç
initialDelaySeconds
ã¯ã掻æ§ãã¹ãèšå®ã®ãã©ã¡ãŒã¿ãŒã調æŽããŠãã³ã³ãããŒã®èµ·ååŸã«ã®ã¿ãã§ãã¯ãå®è¡ãããããã«ããããšã§ããããã¡ãããäž»ãªèª²é¡ã¯ãã©ã®é
延ãèšå®ãããã決å®ããããšã§ããé害ãçºçããåŸã®åã
ã®éå§ã«ã¯æ倧1æéãããå Žåãããããããèæ
®ã«å
¥ããå¿
èŠããããŸããäžæ¹ã§ãinitialDelaySeconds
ãé
ãKubernetesã¯ãã³ã³ããã®èµ·åäžã®é害ã«å¿çããŸãã
ãã®å Žåãã¹ã€ãŒãã¹ãããã¯ã
initialDelaySeconds
ãã¹ãŠã®é害ç¶æ³ïŒãã£ã¹ã¯é害ããããã¯ãŒã¯ã®åé¡ãã·ã¹ãã ã¯ã©ãã·ã¥ãªã©ïŒã§ã¢ããªã±ãŒã·ã§ã³ãæ£åžžã«èµ·åããã®ã«ååãªæéãäžããªããã埩å
åã®èŠä»¶ã«æé©ãªå€ã§ãã
æŽæ°ïŒKubernetesã®æè¿ã®ããŒãžã§ã³ã§ã¯ãã¹ã¿ãŒãã¢ãããããŒããšåŒã°ãã3çªç®ã®ã¿ã€ãã®ãã¹ããç»å ŽããŸããã1.16ãªãªãŒã¹ä»¥éã¯ã¢ã«ãã¡çãšããŠã1.18以éã¯ããŒã¿çãšããŠå©çšã§ããŸãã
ã¹ã¿ãŒãã¢ãããããŒãã¯ãã³ã³ãããèµ·åãããŸã§æºåãã§ãã¯ãšæŽ»æ§ãã§ãã¯ãç¡å¹ã«ããããšã§äžèšã®åé¡ã解決ããããã«ãã£ãŠã¢ããªã±ãŒã·ã§ã³ãæ£åžžã«èµ·åã§ããããã«ããŸãã
5.å€éšIPã®æäœ
çµå±ã®ãšãããéçãªå€éšIPã䜿çšããŠãµãŒãã¹ã«ã¢ã¯ã»ã¹ãããšãã«ãŒãã«ã®æ¥ç¶è¿œè·¡ã¡ã«ããºã ã«å€§ããªå§åãããããŸãã泚ææ·±ãèããªããšããå£ãããå¯èœæ§ããããŸãã
ç§ãã¡ã®ã¯ã©ã¹ã¿ãŒã§ã¯
Calico
ãCNIãšBGP
ã«ãŒãã£ã³ã°ãããã³ã«ã®äž¡æ¹ã䜿çšããå¢çã«ãŒã¿ãŒãšå¯Ÿè©±ããŸããä¹
éšãããã·ã¢ãŒããæå¹ã«ãªãiptables
ãŸãã Kubernetesã§éåžžã«å¿ãããµãŒãã¹ïŒæ¯æ¥æ°çŸäžã®æ¥ç¶ãåŠçããïŒãžã®ã¢ã¯ã»ã¹ãå€éšIPãä»ããŠéããŸãããœãããŠã§ã¢å®çŸ©ã®ãããã¯ãŒãã³ã°ã«ç±æ¥ããSNATãšãã¹ãã³ã°ã®ãããKubernetesã«ã¯ããããã¹ãŠã®è«çãããŒã远跡ããã¡ã«ããºã ãå¿
èŠã§ãããã®ãããK8sã¯ãããã®ã³ã¢ããŒã«onntrack
ãnetfilter
..ã圌ãã®å©ããåããŠãéçIPãžã®å€éšæ¥ç¶ã管çããéçIPã¯ãµãŒãã¹ã®å
éšIPã«å€æãããæåŸã«ãããã®IPã¢ãã¬ã¹ã«å€æãããŸãããããŠãããã¯ãã¹ãŠããŒãã«conntrack
ãšiptablesã䜿çšããŠè¡ãããŸãã
ãã ããããŒãã«ã®å¯èœæ§ã¯
conntrack
ç¡å¶éã§ã¯ãããŸãããå¶éã«éãããšãKubernetesã¯ã©ã¹ã¿ãŒïŒããæ£ç¢ºã«ã¯ãã³ã¢ã®OSã«ãŒãã«ïŒã¯æ°ããæ¥ç¶ãåãå
¥ããããšãã§ããªããªããŸãã RHELã§ã¯ããã®å¶éã¯æ¬¡ã®ããã«ç¢ºèªã§ããŸãã
$ sysctl net.netfilter.nf_conntrack_count net.netfilter.nf_conntrack_maxnet.netfilter.nf_conntrack_count = 167012
net.netfilter.nf_conntrack_max = 262144
ãã®å¶éãåé¿ãã1ã€ã®æ¹æ³ã¯ãè€æ°ã®ããŒãããšããžã«ãŒã¿ãŒãšçµã¿åãããŠãéçIPãžã®çä¿¡æ¥ç¶ãã¯ã©ã¹ã¿ãŒå šäœã«åæ£ãããããã«ããããšã§ããã¯ã©ã¹ã¿å ã«å€æ°ã®ãã·ã³ãããå Žåããã®ã¢ãããŒãã§ã¯ãããŒãã«ã®ãµã€ãºãå€§å¹ ã«å¢ãããŠ
conntrack
ãéåžžã«å€æ°ã®çä¿¡æ¥ç¶ãåŠçã§ããŸãã
2017幎ã«æåã«å§ãããšããããã¯ç§ãã¡ãå®å šã«æ··ä¹±ãããŸãããããããæ¯èŒçæè¿ïŒ2019幎4æã«ïŒãã£ãªã³ãããžã§ã¯ãã¯ãaptã®ã¿ã€ãã«ã®äžã«è©³çŽ°ãªèª¿æ»ãå ¬è¡šæ¥ç¶è¿œè·¡ã¯ãã¯ãããªãã®åéã§ããªããïŒããã«ããããšã®ããã«ç¿»èš³ããã·ã¢èª-çŽTRANSLã¯ïŒã
æ¬åœã«Kubernetesãå¿ èŠã§ããïŒ
3幎ãçµã¡ãŸããããç§ãã¡ã¯æ¥ã æ°ããããšãçºèŠã»åŠã³ç¶ããŠããŸãã Kubernetesã¯ãç¹ã«ç°å¢ã®éå§ãšçšŒåã®ç¶æã®åéã§ãç¬èªã®äžé£ã®èª²é¡ã䌎ãè€éãªãã©ãããã©ãŒã ã§ããããã¯ããªãã®èãæ¹ã建ç¯ããã¶ã€ã³ã«å¯Ÿããæ 床ãå€ããã§ããããããŒã ã®ã¹ã±ãŒã«ã¢ãããšã¢ããã°ã¬ãŒãã«å¯ŸåŠããå¿ èŠããããŸãã
äžæ¹ãã¯ã©ãŠãã§äœæ¥ããKubernetesããµãŒãã¹ãšããŠäœ¿çšã§ããããã«ãããšããã©ãããã©ãŒã ã®ä¿å®ïŒå éšãããã¯ãŒã¯ã®CIDRã®æ¡åŒµãKubernetesã®æŽæ°ãªã©ïŒã«é¢é£ããã»ãšãã©ã®å¿é ããªããªããŸãã
ä»æ¥ãç§ãã¡ã¯èªåèªèº«ã«å°ããäž»ãªè³ªåãæ¬åœã«ããããšãç解ããããã«ãªããŸããKubernetesãå¿ èŠã§ããïŒåé¡ãã©ãã»ã©ã°ããŒãã«ã§ãããããããŠKubernetesãããã«å¯ŸåŠããã®ã«åœ¹ç«ã€ãã©ãããè©äŸ¡ããã®ã«åœ¹ç«ã¡ãŸãã
åé¡ã¯ãKubernetesãžã®ç§»è¡ã«ã¯è²»çšãããããšããããšã§ãããããã£ãŠããŠãŒã¹ã±ãŒã¹ã®å©ç¹ïŒããã³ãã©ãããã©ãŒã ãã©ã®çšåºŠãã©ã®ããã«æŽ»çšãããïŒã¯ãæ¯ââæãäŸ¡æ Œãæ£åœåããã¯ãã§ãããããããªããKubernetesã¯ããªãã®çç£æ§ãå€§å¹ ã«åäžãããããšãã§ããŸãã
ãã¯ãããžãŒã®ããã®ãã¯ãããžãŒã¯ç¡æå³ã§ããããšãå¿ããªãã§ãã ããã
翻蚳è ããã®PS
ç§ãã¡ã®ããã°ãèªãã§ãã ããïŒ