ããã¯ç§ã®ã¢ããããŒãã§ã
ãŸãæåã«ãCilium ããŒã ã«æè¬ããããšæããŸãã圌ãã¯ãã¡ããªã¯ã¹ç£èŠã¹ã¯ãªããã®ãã§ãã¯ãšä¿®æ£ãæäŒã£ãŠãããŸããã
2018幎XNUMXæããã®å€æŽç¹
ãã以éã®å€æŽç¹ã¯æ¬¡ã®ãšããã§ã (èå³ãããå Žåã¯)ã
Flannel ã¯äŸç¶ãšããŠæéãã€æãã·ã³ãã«ãª CNI ã€ã³ã¿ãŒãã§ã€ã¹ã§ãããäŸç¶ãšããŠãããã¯ãŒã¯ ããªã·ãŒãšæå·åããµããŒãããŠããŸããã
Romana ã¯ãµããŒããããªããªã£ãããããã³ãããŒã¯ããåé€ããŸããã
WeaveNet ã¯ãIngress ãš Egress ã®ãããã¯ãŒã¯ ããªã·ãŒããµããŒãããããã«ãªããŸããã ããããçç£æ§ã¯äœäžããŸããã
Calico ã§ã¯ãæé«ã®ããã©ãŒãã³ã¹ãåŸãããã«æ倧ãã±ãã ãµã€ãº (MTU) ãæåã§æ§æããå¿ èŠããããŸãã Calico ã«ã¯ãCNI ãã€ã³ã¹ããŒã«ããããã® XNUMX ã€ã®ãªãã·ã§ã³ãçšæãããŠãããããå¥åã® ETCD ãªããžããªãªãã§ã€ã³ã¹ããŒã«ã§ããŸãã
- Kubernetes API ã«ç¶æ ãããŒã¿ ã¹ãã¢ãšããŠä¿åããŸã (ã¯ã©ã¹ã¿ãŒ ãµã€ãº < 50 ããŒã)ã
- K8S API (ã¯ã©ã¹ã¿ãŒ ãµã€ãº > 50 ããŒã) ã®è² è·ã軜æžããããã«ãTypha ãããã·ã䜿çšããŠããŒã¿ ã¹ãã¢ãšã㊠Kubernetes API ã«ç¶æ ãä¿åããŸãã
Calico ããµããŒããçºè¡š
Cilium ãæå·åããµããŒãããããã«ãªããŸããã Cilium ã¯ãIPSec ãã³ãã«ã«ããæå·åãæäŸããæå·åããã WeaveNet ãããã¯ãŒã¯ã®ä»£æ¿æ段ãæäŸããŸãã ãã ããæå·åãæå¹ã«ãããšãWeaveNet 㯠Cilium ãããé«éã«ãªããŸãã
Cilium ã¯ãETCD ãªãã¬ãŒã¿ãŒãçµã¿èŸŒãŸããŠãããããå°å ¥ãç°¡åã«ãªããŸããã
Cilium ããŒã ã¯ãã¡ã¢ãªæ¶è²»éãš CPU ã³ã¹ããåæžããããšã§ CNI ã®ééãããçšåºŠåæžããããšããŸãããã競åä»ç€Ÿã¯äŸç¶ãšããŠè»œéã§ãã
ãã³ãããŒã¯ã®ã³ã³ããã¹ã
ãã®ãã³ãããŒã¯ã¯ã10 Gb Supermicro ã¹ã€ãããåãã 9000 å°ã®éä»®æ³å Supermicro ãµãŒããŒäžã§å®è¡ãããŸãã ãµãŒããŒã¯ããã·ã DAC SFP+ ã±ãŒãã«ãä»ããŠã¹ã€ããã«çŽæ¥æ¥ç¶ããããžã£ã³ã ãã¬ãŒã (MTU XNUMX) ã䜿çšããŠåã VLAN äžã«æ§æãããŸãã
Kubernetes 1.14.0 ã¯ãDocker 18.04 (ãã®ãªãªãŒã¹ã®ããã©ã«ãã® Docker ããŒãžã§ã³) ãåãã Ubuntu 18.09.2 LTS ã«ã€ã³ã¹ããŒã«ãããŠããŸãã
åçŸæ§ãåäžãããããã«ãåžžã«æåã®ããŒãã«ãã¹ã¿ãŒãæ§æãããã³ãããŒã¯ã®ãµãŒããŒéšåã XNUMX çªç®ã®ãµãŒããŒã«é 眮ããã¯ã©ã€ã¢ã³ãéšåã XNUMX çªç®ã®ãµãŒããŒã«é 眮ããããšã«ããŸããã ãããè¡ãã«ã¯ãKubernetes ãããã€ã¡ã³ã㧠NodeSelector ã䜿çšããŸãã
次ã®ã¹ã±ãŒã«ã§ãã³ãããŒã¯çµæã説æããŸãã
ãã³ãããŒã¯ã® CNI ã®éžæ
ããã¯ãã»ã¯ã·ã§ã³ã®ãªã¹ãã«ãã CNI ã®ã¿ã®ãã³ãããŒã¯ã§ãã
次㮠CNI ãæ¯èŒããŸãã
- ãã£ãªã³ v3.6
- Canal v3.6 (åºæ¬çã«ãããã¯ãŒã¯çšã® Flannel + ãã¡ã€ã¢ãŠã©ãŒã«ãšããŠã® Calico)
- ç¹æ¯ 1.4.2
- ãã©ã³ãã« 0.11.0
- Kubeã«ãŒã¿ãŒ0.2.5
- ãŠã£ãŒãããã 2.5.1
ã€ã³ã¹ããŒã«
CNI ã®ã€ã³ã¹ããŒã«ãç°¡åã§ããã°ããã»ã©ã第äžå°è±¡ã¯è¯ããªããŸãã ãã³ãããŒã¯ã®ãã¹ãŠã® CNI ã¯ãã€ã³ã¹ããŒã«ãéåžžã«ç°¡åã§ã (XNUMX ã€ãŸã㯠XNUMX ã€ã®ã³ãã³ãã§)ã
åè¿°ããããã«ããµãŒããŒãšã¹ã€ããã¯ãžã£ã³ã ãã¬ãŒã ãæå¹ã«ããŠæ§æãããŠããŸã (MTU ã 9000 ã«èšå®ããŸãã)ã CNI ãã¢ããã¿ãŒã®æ§æã«åºã¥ã㊠MTU ãèªåçã«æ±ºå®ã§ããã°å¹žãã§ãã ããããããã管çã§ããã®ã¯ã·ãªãŠã ãšãã©ã³ãã«ã ãã§ããã æ®ãã® CNI 㯠GitHub äžã§èªå MTU æ€åºãè¿œå ãããªã¯ãšã¹ããè¡ã£ãŠããŸãããCalicoãCanalãããã³ Kube-router ã® ConfigMap ãå€æŽããããWeaveNet ã®ç°å¢å€æ°ãæž¡ãããšã«ãããæåã§æ§æããŸãã
MTU ãæ£ãããªãå Žåãã©ã®ãããªåé¡ãçºçããŸãã? ãã®å³ã¯ãããã©ã«ãã® MTU ãšãžã£ã³ã ãã¬ãŒã ãæå¹ã«ãªã£ãŠãã WeaveNet ã®éãã瀺ããŠããŸãã
MTU ã¯ã¹ã«ãŒãããã«ã©ã®ãããªåœ±é¿ãäžããŸãã?
MTU ãããã©ãŒãã³ã¹ã«ãšã£ãŠããã«éèŠã§ããããèŠãŠããŸããã次ã«ãCNI ã MTU ãã©ã®ããã«èªåçã«æ±ºå®ããããèŠãŠã¿ãŸãããã
CNI 㯠MTU ãèªåçã«æ€åºããŸã
ã°ã©ãã¯ãæé©ãªããã©ãŒãã³ã¹ãåŸãã«ã¯ãCalicoãCanalãKube-routerãããã³ WeaveNet ã® MTU ãæ§æããå¿ èŠãããããšã瀺ããŠããŸãã Cilium ãš Flannel ã¯ãèšå®ãè¡ããªããŠããMTU èªäœãæ£ãã決å®ã§ããŸããã
ã»ãã¥ãªãã£
CNI ã®ã»ãã¥ãªãã£ããéä¿¡ããŒã¿ã®æå·åæ©èœãš Kubernetes ãããã¯ãŒã¯ ããªã·ãŒã®å®è£ (ããã¥ã¡ã³ãã§ã¯ãªãå®éã®ãã¹ãã«åºã¥ã) ã® XNUMX ã€ã®åŽé¢ã§æ¯èŒããŸãã
ããŒã¿ãæå·åãã CNI ã¯ãCilium ãš WeaveNet ã® XNUMX ã€ã ãã§ãã æå·å ãŠã£ãŒãããã æå·åãã¹ã¯ãŒãã CNI ç°å¢å€æ°ãšããŠèšå®ããããšã§æå¹ã«ãªããŸãã ã§
ãããã¯ãŒã¯æ¿çã®å°å ¥ã«é¢ããŠã¯ã圌ãã¯æåãã CalicoãCanalãCiliumãWeaveNetããã§ãã€ã³ã°ã¬ã¹ ã«ãŒã«ãšãšã°ã¬ã¹ ã«ãŒã«ãæ§æã§ããŸãã ã®ããã« Kubeã«ãŒã¿ãŒ Ingress ã®ã¿ã®ã«ãŒã«ãããã ãã©ã³ãã« ãããã¯ãŒã¯ ããªã·ãŒã¯ãŸã£ãããããŸããã
å šäœçãªçµæã¯æ¬¡ã®ãšããã§ãã
å®å
šæ§èœãã³ãããŒã¯çµæ
ÐÑПОзвПЎОÑелÑМПÑÑÑ
ãã®ãã³ãããŒã¯ã¯ãåãã¹ãã®å°ãªããšã 3 åã®å®è¡ã«ãããå¹³åã¹ã«ãŒãããã瀺ããŸãã TCP ãš UDP (iperfXNUMX ã䜿çš)ãHTTP (Nginx ãšcurl ã䜿çš) ãŸã㯠FTP (vsftpd ãšcurl ã䜿çš) ãªã©ã®å®éã®ã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ããã¹ãããæåŸã« SCP ããŒã¹ã®æå·å (ã¯ã©ã€ã¢ã³ããšãµãŒããŒã® OpenSSH ã䜿çš) ã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ã®ããã©ãŒãã³ã¹ããã¹ãããŸãã
ãã¹ãŠã®ãã¹ãã§ãã㢠ã¡ã¿ã« ãã³ãããŒã¯ (ç·ã®ç·) ãå®è¡ããCNI ã®ããã©ãŒãã³ã¹ãšãã€ãã£ã ãããã¯ãŒã¯ã®ããã©ãŒãã³ã¹ãæ¯èŒããŸããã ããã§ã¯åãã¹ã±ãŒã«ãã«ã©ãŒã§äœ¿çšããŸãã
- é»è² = éåžžã«è¯ã
- ãªã¬ã³ãžïŒè¯ã
- é = ãŸããŸã
- èµ€ = æªã
æ£ããæ§æãããŠããªã CNI ã¯æ¡çšããããæ£ãã MTU ãæ〠CNI ã®çµæã®ã¿ã衚瀺ãããŸãã (泚: æå·åãæå¹ã«ãããšãCilium 㯠MTU ãæ£ããèšç®ããªããããããŒãžã§ã³ 8900 ã§ã¯ MTU ãæå㧠1.4 ã«äžããå¿ èŠããããŸãã次ã®ããŒãžã§ã³ 1.5 ã§ã¯ããããèªåçã«è¡ãããŸãã)
çµæã¯æ¬¡ã®ãšããã§ãã
ãã¹ãŠã® CNI 㯠TCP ãã³ãããŒã¯ã§è¯å¥œãªããã©ãŒãã³ã¹ã瀺ããŸããã æå·åã«ã¯ã³ã¹ããããããããæå·åãåãã CNI ã¯å€§å¹ ã«é ããŠããŸãã
ããã§ãããã¹ãŠã® CNI ã¯é 調ã«é²ãã§ããŸãã æå·åã䜿çšãã CNI ãã»ãŒåãçµæã瀺ããŸããã Cilium ã¯ç«¶å補åã«å°ãé ãããšã£ãŠããŸããããã¢ã¡ã¿ã«ã®ããã 2,3% ãªã®ã§ãæªããªãçµæã§ãã MTU ãèªèº«ã§æ£ãã決å®ããã®ã¯ Cilium ãš Flannel ã ãã§ããããããã¯è¿œå ã®æ§æãè¡ããªãçµæã§ããããšãå¿ããªãã§ãã ããã
å®éã®ã¢ããªã±ãŒã·ã§ã³ã§ã¯ã©ããªãã§ãããã? ã芧ã®ãšãããHTTP ã®å šäœçãªããã©ãŒãã³ã¹ã¯ TCP ããããããã«äœããªããŸãã TCP 㧠HTTP ã䜿çšããå Žåã§ããHTTP ãã³ãããŒã¯ã«åœ±é¿ãäžããã¹ããŒã¹ã¿ãŒããåé¿ããããã«ãTCP ãã³ãããŒã¯ã§ iperf3 ãæ§æããŸããã ããã§ã¯ã¿ããªããé 匵ããŸããã Kube-router ã«ã¯æãããªå©ç¹ããããŸãããWeaveNet ã®ããã©ãŒãã³ã¹ã¯è¯ããªãããã¢ã¡ã¿ã«ãããçŽ 20% æªãã£ãã§ãã æå·åãåãã Cilium ãš WeaveNet ã¯æ¬åœã«æ®å¿µã«æããŸãã
ãã 10 ã€ã® TCP ããŒã¹ã®ãããã³ã«ã§ãã FTP ã§ã¯ãçµæã¯ç°ãªããŸãã Flannel ãš Kube-router ã¯æ©èœããŸãããCalicoãCanalãCilium ã¯å°ãé ããŠããããã¢ã¡ã¿ã«ãããçŽ 17% é ããªããŸãã WeaveNet 㯠40% ãé ããŠããŸãããæå·åããã WeaveNet ã¯æå·åããã Cilium ãã XNUMX% é²ãã§ããŸãã
SCP ã䜿çšãããšãSSH æå·åã«ã©ããããã®ã³ã¹ãããããããããã«ç¢ºèªã§ããŸãã ã»ãŒãã¹ãŠã® CNI ã¯å¥œèª¿ã§ãããWeaveNet ã¯åã³é ãããšã£ãŠããŸãã æå·åã䜿çšãã Cilium ãš WeaveNet ã¯ãäºéæå·å (SSH + CNI) ã«ããææªã§ããããšãäºæ³ãããŸãã
çµæããŸãšããè¡šã¯æ¬¡ã®ãšããã§ãã
è³æºã®æ¶è²»
次ã«ãé«è² è·æïŒTCP 転éæã10 GbpsïŒã§ CNI ãã©ã®ããã«ãªãœãŒã¹ãæ¶è²»ããããæ¯èŒããŠã¿ãŸãããã ããã©ãŒãã³ã¹ ãã¹ãã§ã¯ãCNI ãšãã¢ã¡ã¿ã« (ç·ã®ç·) ãæ¯èŒããŸãã ãªãœãŒã¹æ¶è²»ã«ã€ããŠã¯ãCNI ãå«ãŸãªãçŽç²ãª Kubernetes (玫è²ã®ç·) ã衚瀺ããCNI ãæ¶è²»ããè¿œå ãªãœãŒã¹ã®æ°ã確èªããŠã¿ãŸãããã
èšæ¶ããå§ããŸãããã 以äžã¯ã転éäžã®ããŒãã® RAM (ãããã¡ãŒãšãã£ãã·ã¥ãé€ã) ã®å¹³åå€ (MB åäœ) ã§ãã
Flannel ãš Kube-router ã¯åªããçµæã瀺ããŸãã (ããã 50 MB)ã Calico ãš Canal ã¯ãããã 70 ã§ããWeaveNet ã¯æããã«ä»ã®ãã®ããå€ãæ¶è²»ããŸã - 130 MBãCilium 㯠400 MB ã䜿çšããŸãã
次ã«ãCPU æéã®æ¶è²»éã確èªããŠã¿ãŸãããã 泚ç®ãã¹ã: ãã®å³ã¯ããŒã»ã³ããŒãžã§ã¯ãªããppm ã§ç€ºããŠããŸããã€ãŸããã裞ã®éãã® 38 ppm 㯠3,8% ã§ãã çµæã¯æ¬¡ã®ãšããã§ãã
CalicoãCanalãFlannelãããã³ Kube-router ã¯éåžžã« CPU å¹çãé«ããCNI ã䜿çšããªã Kubernetes ããããã 2% é«ãã ãã§ãã WeaveNet ã¯ããã« 5% ã®å·®ã§å€§ããé ãããšã£ãŠãããCilium ã 7% ã§ç¶ããŸãã
ãªãœãŒã¹æ¶è²»ã®æŠèŠã¯æ¬¡ã®ãšããã§ãã
çµæ
ãã¹ãŠã®çµæãå«ãè¡š:
äžè¬çãªãã³ãããŒã¯çµæ
ãŸãšã
æåŸã®éšåã§ã¯ãçµæã«å¯Ÿããç§ã®äž»èŠ³çãªæèŠãè¿°ã¹ãŸãã ãã®ãã³ãããŒã¯ã¯ãéåžžã«å°èŠæš¡ãªã¯ã©ã¹ã¿ãŒ (3 ããŒã) äžã®åäžæ¥ç¶ã®ã¹ã«ãŒãããã®ã¿ããã¹ãããããšã«æ³šæããŠãã ããã 倧èŠæš¡ãªã¯ã©ã¹ã¿ãŒ (ããŒãæ° 50 æªæº) ã䞊åæ¥ç¶ã«ã¯é©çšãããŸããã
ã·ããªãªã«å¿ããŠã次㮠CNI ã䜿çšããããšããå§ãããŸãã
- ã¯ã©ã¹ã¿ãŒå ã«ãããŸãã ãªãœãŒã¹ãå°ãªãããŒã (æ° GB ã® RAMãè€æ°ã®ã³ã¢) ã»ãã¥ãªãã£æ©èœã¯å¿ èŠãããŸãã - ãéžæããŠãã ãã ãã©ã³ãã«ã ããã¯ãæãã³ã¹ãå¹çã®é«ã CNI ã® 64 ã€ã§ãã ãŸããããŸããŸãªã¢ãŒããã¯ã㣠(amd64ãarmãarmXNUMX ãªã©) ãšäºææ§ããããŸãã ããã«ããã㯠MTU ãèªåçã«æ±ºå®ã§ãã XNUMX ã€ã® CNI (ãã XNUMX ã€ã¯ Cilium) ã®ãã¡ã® XNUMX ã€ã§ãããããäœãèšå®ããå¿ èŠã¯ãããŸããã Kube-router ãé©ããŠããŸãããæšæºã§ã¯ãªããããMTU ãæåã§æ§æããå¿ èŠããããŸãã
- å¿ èŠã«å¿ã㊠ãããã¯ãŒã¯ãæå·åãã å®å šã®ããã«ãåã£ãŠãã ãã ãŠã£ãŒããããã ãžã£ã³ã ãã¬ãŒã ã䜿çšããŠããå Žåã¯ãå¿ããã« MTU ãµã€ãºãæå®ããç°å¢å€æ°ã§ãã¹ã¯ãŒããæå®ããŠæå·åãæå¹ã«ããŠãã ããã ãã ããããã©ãŒãã³ã¹ã®ããšã¯å¿ããã»ããããã§ããããããã¯æå·åã®ã³ã¹ãã§ãã
- ã®ããã« éåžžã®äœ¿çš ÑПвеÑÑÑ ãµã©ãµã ãã® CNI ã¯ãããŸããŸãª Kubernetes ãããã€ã¡ã³ã ããŒã« (KopsãKubesprayãRancher ãªã©) ã§åºã䜿çšãããŠããŸãã WeaveNet ãšåæ§ã«ããžã£ã³ã ãã¬ãŒã ã䜿çšããå Žåã¯ãå¿ ã ConfigMap 㧠MTU ãèšå®ããŠãã ããã ããã¯ããªãœãŒã¹æ¶è²»ãããã©ãŒãã³ã¹ãã»ãã¥ãªãã£ã®ç¹ã§å¹ççãªå€æ©èœããŒã«ã§ãã
ãããŠæåŸã«ãéçºç¶æ³ã«åŸãããšããå§ãããŸãã ç¹æ¯ã ãã® CNI ã«ã¯ã補å (æ©èœããªãœãŒã¹ã®ç¯çŽãããã©ãŒãã³ã¹ãã»ãã¥ãªãã£ãã¯ã©ã¹ã¿ãªã³ã°ãªã©) ã«ç±å¿ã«åãçµãã§ããéåžžã«æŽ»çºãªããŒã ããããéåžžã«èå³æ·±ãèšç»ãæã£ãŠããŸãã
CNI éžæã®ããžã¥ã¢ã«å³
åºæïŒ habr.com