αααααΆαα
αα
α»ααααααααΆααααααααα»α
ααΆααααΌα αααα»αα ααα’ααα»αααααααα»α Ciliumα αα»αααααΆααα½ααααα»ααα·αα·ααα αα·ααααααααΌαααααααΈααααα½ααα·αα·αααααααααα
α’αααΈαααααΆαααααΆααααααΌαα αΆααααΆααααΈαααα·α ααα·ααΆααααΆα 2018
αααααΆα’αααΈαααααΆαααααΆααααααΌαααΆααααΈαααααααα (ααααα·αααΎα’αααα αΆααα’αΆαααααα)α
Flannel αα ααααΆα ααα»α αααααΆαα CNI ααΏααααα»α αα·αααΆαααααααα»α ααα»αααααα αααα·αααΆαααααααααΆααααααααΆα αα·αααΆαα’αα·αααααΈαα
Romana αα·αβααααΌαβααΆαβααΆααααβαααβαα ααΌα ααααβααΎαβααΆαβααβααΆβα ααβααΈβαααα
α₯α‘αΌαααα WeaveNet ααΆαααααααααΆααααααααΆααααααΆαα Ingress αα·α Egress! ααα»ααααααα·αααΆαααΆαααα α»αα
αα αααα»α Calico α’ααααα ααααααΌαααααααα ααΆααααααααααα ααααα ααα’αα·ααααΆ (MTU) ααααααααααΆααααααΎαααΆαααα’αααα»αα Calico ααααααααααΎαααΈααααααΆααααΆαααα‘αΎα CNI ααΌα ααααα’αααα’αΆα ααααΎααΆααααααααΆαααααΆαα ETCD ααΆα ααααα‘ααα
- ααΆααααααΆαα»αααααΆαααΆααα αααα»α Kubernetes API ααΆααααΆαααα·αααααα (ααα αα ααααα < 50 nodes);
- ααΆααααααΆαα»αααααΆαααΆααα αααα»α Kubernetes API ααΆααααΆαααα·αααααααααααΆαααααΌααααΈ Typha ααΎααααΈαααααΆαααααα»ααα ααΎ K8S API (ααα αα ααααα > 50 nodes)α
Calico ααΆααααααΆαααΆαααα
α₯α‘αΌαααα Cilium ααΆααααααΆαα’αα·αααααΈα! Cilium αααααααΌαααΆαα’αα·αααααΈαααΆαα½αααΉαααααΌαααΌααααααααΈ IPSec αα·ααααααααΌααααααΎααααα½ααααααΆα WeaveNet αααααΆαα’αα·αααααΈαα ααα»αααα WeaveNet ααΏαααΆα Cilium ααΆαα½αααΉαααΆαααΎαααΆαα’αα·αααααΈαα
α₯α‘αΌαααα Cilium ααΆαααΆαααΆααααα½ααααα»αααΆαααΆαααααααΆα α’ααα»αα ααααααααα·ααααα·αα ETCD αααααααΆααααααΆαα½αα
αααα»α Cilium ααΆαααααΆααΆαααΆααααααααααααααα½αα ααα½αααΈ CNI αααααααα½ααααααΆαααααααααΆαααααΎααααΆααα’αααα αα αΆα αα·αααααα CPU ααα»ααααααΌααααααααααααΆαα ααααααΆαααΆααα»αα
ααα·ααααα
αααααααΆαααααΌαααΆαααααΎαααΆαααΎαααΆαααΈααα Supermicro ααααα·ααααααΆαα·αααα·αα ααα½α 10 ααΆαα½αααΉααα»αααΆαα Supermicro 9000 Gb α αααΆαααΈαααααααΌαααΆαααααΆαααααααααΆαααα αα»αααΆααααΆαααααααα DAC SFP+ α’αααα α αΎαααααΌαααΆαααααααα ααΆαααααααααα ααΎ VLAN ααΌα ααααΆααΆαα½αααΉαααα»α jumbo (MTU XNUMX) α
Kubernetes 1.14.0 ααΆαααα‘αΎααα ααΎ Ubuntu 18.04 LTS ααΆαα½α Docker 18.09.2 (αααα Docker ααααΆαααΎααα αααα»αααΆαα ααααααΆαααα)α
ααΎααααΈαααααα’ααααααΆαααα·αα‘αΎααα·α ααΎαααΆααααααα α α·αααααααααα ααΆαααααααααααα ααΎααααΆααααΈαα½αααΆαα·α αα ααΆααααααααααΆαααΈαααααααααα ααΎαααΆαααΈαααααΈααΈα αα·αααααααααΆαααΈαααααααα ααΎααΈααΈα ααΎααααΈααααΎααΌα αααα ααΎαααααΎ NodeSelector αααα»αααΆαααΆααα±ααααααΎααααΆαα Kubernetes α
ααΎαααΉααααααΆα’αααΈαααααααααααΎααΆαααααααΆαααΆααααααα
ααΆαααααΎαααΎα CNI αααααΆαααααααααΆα
αααααΊααΆααααααααΆαααα CNI ααΈαααααΈαα
αααα»ααααααααα»αααααα
ααΎαααΉααααααααα CNIs ααΆααααααα
- Calico v3.6
- Canal v3.6 (ααΆααααΆαα Flannel αααααΆαααααααΆα + Calico ααΆαααααΆααααααΎα)
- Cilium 1.4.2
- Flannel 0.11.0
- Kube-router 0.2.5
- WeaveNet 2.5.1
ααΆαααααα
ααΆαααα‘αΎα CNI ααΆααααααΆααααα½α α αααΆααα’αΆααααααααααΌαααααααΎαααΉαααΆαααααααααΎαα CNIs ααΆααα’ααααΈαααααΊααΆαααΆαααΆααααα½ααααα»αααΆαααα‘αΎα (ααΆαα½αααΆααααααααΆαα½α α¬ααΈα)α
ααΌα αααααΎαααΆααα·ααΆα αααΆαααΈααα αα·ααα»αααΆααααααΌαααΆαααααααα ααΆααααααααααΆαα½αααα»α jumbo ααααΌαααΆαααΎα (ααΎαααααα MTU αα 9000) α ααΎαααΉααααααΆαα α·αααααααα·αααΎ CNI ααααα MTU αααααααααααααααα·αααααα’ααααΎααΆααααααααααα’αΆααΆαααααα ααααααΆαααΆαααααααΆααα Cilium αα·α Flannel ααα»αααααααααααααααααααΏααααα CNIs ααααα αααααΆαααααΎαα ααΎ GitHub ααΎααααΈααααααααΆαααααΎα MTU αααααααααααααααα· ααα»ααααααΎαααΉαααααααα ααΆααααααααααΆααααααααααΆαααααΆααααααΌα ConfigMap αααααΆαα Calico, Canal αα·α Kube-router α¬ααααααΆααα’αααααα·ααααΆααααααΆαα WeaveNet α
ααΎααΆααααα αΆα’αααΈααΆαα½α MTU αα·αααααΉαααααΌα? ααααΆααααΆαααααααα αΆαααΈααΆααα»αααααΆαααΆα WeaveNet ααΆαα½αααΉα MTU ααααΆαααΎα αα·αααα»α jumbo ααααΌαααΆαααΎαα
ααΎ MTU αααααΆαααααααα αΌαα
αααααΆαααΌα
ααααα
?
ααΎαααΆαααΎαααΈααααααα MTU ααΆαααΆααααααΆαααααααΆααααΆαα’αα»αααα α₯α‘αΌααααααΌαααΎαααΈααααααα CNIs ααααααΎααααααααΆαααααααααααααααα·α
CNI ααααΎα MTU αααααααααααααααα·
ααααΆα αααααα αΆαααΆα’αααααααΌαααααααα ααΆαααααααα MTU αααααΆαα Calico, Canal, Kube-router αα·α WeaveNet αααααΆααααααΎαααΆαααα’αααα»αα Cilium αα·α Flannel α’αΆα ααααα MTU ααααααα½αα―αααΆααααΆαααααΉαααααΌααααααααΆαααΆααααααααΆαα½αα‘αΎαα
ααααα·αα»α
ααΎαααΉααααααααααα»ααααα·ααΆα CNI αααα»ααα·αααααΆαααΈαα αααααααΆααααα»αααΆαα’αα·αααααΈααα·αααααααααααΆααααααΌα αα·αααΆαα’αα»αααααααααΆααααααααΆα Kubernetes (ααα’ααααΎααΆαααΆααααααα·αααααΆαα αα·ααααα―αααΆα)α
ααΆααα CNIs ααΈαααα»ααααααααα’αα·αααααΈααα·αααααα: Cilium αα·α WeaveNet α ααΆαα’αα·αααααΈα WeaveNet ααΎαααααΎαααΆαααααααααααΆααααααααΆααα’αα·αααααΈαααΆα’αααααα·ααααΆα CNI α IN
α ααααβααΆαβα’αα»ααααβααααααααΆαβαααααΆαβααΆαβαααααα Calico, Canal, Cilium αα·α WeaveNetαααα’αααα’αΆα ααααααα ααΆαααααααα Ingress αα·α Egress rulesα αααααΆαα Kube-ααααααα ααΆαα αααΆαααααααΆαααα Ingress αα·α Flannel αα·αααΆααααααΆααααααααΆαααΆαααααααα
αααααΊααΆααααααααα»αα
αααααααααααααΆαααααΆαα’αα»αααααα»ααααα·ααΆα
ααα·αααΆα
αααααααΆαααααααα αΆαααΈααΆαααααααΆααααΆαααααααΎααΆαααααααΆαα αα ααΆααααΈααααααΆαααααΎαααααααΈαα½ααα ααΎαααΆαααααααααΎαααΆααααα TCP αα·α UDP (αααααααΎ iperf3) αααααα·ααΈαα·αααΌα ααΆ HTTP (ααΆαα½α Nginx αα·α curl) α¬ FTP (ααΆαα½α vsftpd αα·α curl) α αΎαααΈαααα»αααΆαα’αα»αααααααααα·ααΈαααααααΎααΆαα’αα·αααααΈαααα’ααααΎ SCP (αααααααΎαααΆαααΈαααααα αα·ααααΆαααΈααα OpenSSH) α
αααααΆααααΆαααααΎαααααααΆααα’αα ααΎαααΆαα’αα»αααααααααααΆααααααα (αααααΆααααααααα) ααΎααααΈααααααααααααΎαααΆα CNI ααΆαα½αααΉαααααΎαααΆααααααΆαααΎαα αα ααΈαααααΎαααααΎααΆαααααααΆαααΌα ααααΆ ααα»ααααααΆααααα
- ααΏα = ααα’ααΆαα
- ααΉαααααΌα = ααα’α
- ααα = ααΌα αααα
- αααα α = α’αΆααααα
ααΎαααΉααα·ααα CNIs αααααΆαααααααα·αααααΉαααααΌααα α αΎαααΉααααα αΆααααααααααααααΆαα CNIs ααΆαα½αααΉα MTU ααααΉαααααΌαα (α αααΆαα Cilium αα·αααααΆ MTU ααΆαααααΉαααααΌααα ααααα·αααΎα’αααααΎαααΆαα’αα·αααααΈα ααΌα ααααα’αααααΉαααααΌαααΆααααααα MTU ααααααα 8900 αα αααα»ααααα 1.4 α αααααααααΆαα 1.5 ααααΎααΆαααααααααααααααα·α )
αααααΊααΆααααααα
ααΆαα’αα»αααα TCP
CNIs ααΆααα’ααααααΎαααΆαααΆαααα’αα αααα»α TCP benchmark α CNI αααβααΆαβααΆαβα’αα·αααααΈαβαα βααΊαβαααβααααΆαβααΈβαααααβααΆαβα’αα·αααααΈαβααΆαβαααααβααααα
ααΆαα’αα»αααα UDP
αα ααΈαααααααα CNIs ααΆααα’αααααα»αααααΎαααΆαααα’α CNI ααΆαα½αααΉαααΆαα’αα·αααααΈαααΆααααα αΆαααααααααααΎαααααΌα ααααΆα Cilium αα ααΈαααααααΆαααααα½ααααααααααααααα·α ααα»ααααααΆααΆαααααΉααα 2,3% ααααα αααΆαα»ααα ααΌα ααααα αΎαααΆαα·ααααααΆααααααα’αΆααααααααααα αα»αααααα ααΆααΆααα Cilium αα·α Flannel ααα»ααααααααααααα MTU ααααααα½αα―αααΆαααααΉαααααΌα α αΎαααΆαααααααΊααΆαααααααααααα½ααααααααααΆαααΆααααααααααααααΆαα½αα‘αΎαα
α α»ααααααα·ααΈαα·ααα·α? ααΌα αααα’αααα’αΆα ααΎαααΆαα’αα»ααααααΆααΌαα αααααΆαα HTTP ααΊααΆαααΆα TCP ααααα·α α αααααΈααΆα’αααααααΎ HTTP ααΆαα½α TCP ααααα ααΎαααΆαααααααα ααΆαααααααα iperf3 αα αααα»ααααααααΆα TCP ααΎααααΈαααααΆαααΆαα αΆααααααΎαααΊααααααΉααααααΆααααα HTTP benchmark α αααααααααΆααααΎααΆαααα’αα ααΈαααα Kube-router ααΆαα’αααααααααααα αααΆααααΆαα ααα»αααα WeaveNet αα·αααΆαααααΎαααΆαααα’ααα αααα αα 20% α’αΆαααααααΆαααααααα Cilium αα·α WeaveNet ααΆαα½αααΉαααΆαα’αα·αααααΈαααΎααα αα·αααΆααααα α
ααΆαα½αααΉα FTP αααααΆαα·ααΈααΆααααααΆαααΌαααααΆαααΎ TCP αα½ααααααααα αααααααα»αααααΆα Flannel αα·α Kube-router ααααΎααΆαααΆαααα ααα»αααα Calico, Canal αα·α Cilium αα ααΆααααααααααα·α α αΎαααΊαααΆααααααααααα αα 10% α WeaveNet ααΊαα ααΈααααα 17% ααα»αααα WeaveNet αααααΆαα’αα·αααααΈαααΊ 40% ααΆααα»α Cilium αααααΆαα’αα·αααααΈαα
ααΆαα½α SCP ααΎαα’αΆα ααΎαααΎαααααΆααααΆααΎααΆαα’αα·αααααΈα SSH ααΆααααααααα»ααααΆαα ααααΎααα CNIs ααΆααα’αααααα»αααααΎαααΆαααΆαααα’ ααα»αααα WeaveNet αααα»αααααΊααααΆααααααααα Cilium αα·α WeaveNet ααΆαα½αααΉαααΆαα’αα·αααααΈαααααΌαααΆαααααΉααα»αααΆα’αΆααααααααα»ααααααΆαααααΆαα’αα·αααααΈαααΈααα (SSH + CNI) α
αααααΊααΆααΆααΆαααααααααΆαα½αααΉαααααααα
ααΆαααααΎααααΆααααααΆα
α₯α‘αΌααααααΌαααααααααααΈααααααα CNI ααααΎααααΆααααααΆααααααααααα»αααααα (ααα‘α»ααααααααα TCP, 10 Gbps) α αα αααα»αααΆαααααΎαααααααΆαα’αα»ααααααΎααααααααα CNI ααΆαα½ααααααα (αααααΆααααααααα) α αααααΆααααΆαααααΎααααΆααααααΆα ααΌααααα αΆα Kubernetes αα»ααα (αααααΆαααααααααΆα) αααααααΆα CNI α αΎαααΎαααΆααΎααααΆαααααααααα»ααααΆαααα CNI ααααΎααααΆααα
α αΌαα αΆααααααΎαααΆαα½αααΉαααΆαα αα αΆαα αααααΊααΆαααααααααααααααΆαα RAM ααααααααΆαα (αα·αααΆαααααα αΌαααα·ααααααα’αΆαααα αα·αααααΆαααααααΆαα) αααα»α MB ααα‘α»αααααααααα
ααΆαααααΎααααΆααα’αααα
αα
αΆα
Flannel αα·α Kube-router ααΆααααα αΆαααααααααααα’ - ααααΉααα 50 MB ααα»αααααα Calico αα·α Canal ααΈαα½ααααΆα 70 α WeaveNet ααααΎααααΆαααααΆαα
αααΆααααΆαα§ααααααααααααα - 130 MB α αΎα Cilium ααααΎααααΆααα
αααΎαααααα
400 α
α₯α‘αΌααααααΌααα·αα·αααααΎαααΆαααααΎααααΆαααααααααΆαααα CPU α αα½ααααααααΆααα ααααΆααααΆααααα αΆααα·αααΎαααΆααααα ααα»αααα ppm αααααΊ 38 ppm αααααΆαα "αααααα" ααΊ 3,8% α αααααΆααααααα
ααΆαααααΎααααΆαααααΈααΈααΌ
Calico, Canal, Flannel αα·α Kube-router ααΆαααααα·αααααΆα CPU ααααΆαα - αα 2% α αααΎαααΆα Kubernetes αααααααΆα CNI α WeaveNet ααΆαααΆαααΊααααΆαααΆαααΆαα½αααΉα 5% αααααααααααΆαααα Cilium αα 7% α
αααααΊααΆααα ααααΈααααααααααΆαααααΎααααΆααααααΆαα
αααααα
ααΆααΆααααααΆαααααααααΆααα’ααα
αααααααααααααΆαααΌαα
ααα ααααΈααααα·ααααΆα
αα αααααα α»αααααα αααα»αααΉααααα ααααα·αααααααΎααααααα ααΌαα αΆαααΆ ααααααααΆαααααααααΆαααααααΆααααααΆααααααΆαααααα½ααα ααΎα αααααααΌα αααα»α (3 ααααΆαα)α ααΆαα·αα’αα»ααααα ααααα ααααααα (<50 nodes) α¬ααΆααααααΆαααααΆαααΆα‘ααααα
αααα»αααΌαααααΆαα±ααααααΎ CNIs ααΆααααααα’αΆαααααααΎααααΆααΈαααΌα
- ααΎα’αααααΆααα αααα»αα αααααααααα’αααα ααααΆαααααααΆαααααΆααα·α αα½α (RAM ααΆα αααΎα GB ααααΌαααΆα αααΎα) α αΎαα’ααααα·αααααΌαααΆααα»αααΆααα»ααααα·ααΆααα - ααααΎαααΎα Flannel. αααααΊααΆ CNIs αααααΆαααααα·αααααΆααααα»ααα½αα α αΎαααΆα’αΆα ααααΎααΆαααΆαα½αααααΆααααααααααΆα αααΎααααααα (amd64, arm, arm64 ααΆααΎα)α ααΎαααΈαααααααααααΊααΆαα½ααααα»αα ααααααΈα (αα½ααααααΊ Cilium) CNI αααα’αΆα ααααα MTU αααααααααααααααα· ααΌα ααααα’ααααα·αα αΆαααΆα αααααααα ααΆααααααααα’αααΈαααααα Kube-router ααααααααααα ααα»ααααααΆαα·αααΆααααααααααααααΆααα α αΎαα’αααααΉαααααΌαααααααα ααΆαααααααα MTU αααααα
- ααΎααααΌαααΆα α’αα·αααααΈααααααΆα ααΎααααΈαα»ααααα·ααΆα αα WeaveNet. αα»αααααα αααααΆααααα α MTU ααααα·αααΎα’ααααααα»αααααΎααα»α jumbo α αΎαααΎαααΆαα’αα·αααααΈαααααααααΆααααΆααααααααΆααααΆααααα’αααααα·ααααΆαα ααα»ααααααΆααΆααΆααααααΎαααΆααααα»αααΆαααααα α’αααΈααΆαα’αα»αααα - αααααΊααΆαααααααααΆαα’αα·αααααΈαα
- αααααΆαα ααΆαααααΎααααΆααααααααΆα αααα»αααααΆα ααΆααΈααΌα. CNI αααααααΌαααΆαααααΎααααΆαααααΆαααΌααααΌααΆααα αααα»αα§αααααααΆαααααααΆα Kubernetes αααααα (Kops, Kubespray, Rancher ααΆααΎα)α ααΌα ααΉα WeaveNet ααααΌαααααΆααααΆααααααα ααΆαααααααα MTU αα αααα»α ConfigMap ααααα·αααΎααααΎααα»α jumbo α ααΆααΆα§ααααααα α»αα»αααΆααααααΆαααααα·αααααΆααααα»αααααααααααααΆαααααΎααααΆααααααΆα ααΆαα’αα»αααα αα·ααα»ααααα·ααΆαα
α αΎαα α»αααααααααα»αααααΆαα’αααα±ααααααΎααΆαααΆαα’αα·αααααα αααΈααΈαααΌα. CNI αααααΆααααα»ααααααααααΆαααααααααΎααΆαα αααΎαααΎααα·ααααααααα½ααα (αααααααα·ααα ααΆααααααααααΆα ααΆαα’αα»αααα αα»ααααα·ααΆα α ααααα...) α αΎααα½αααααΆααααααΆααα½αα±ααα αΆααα’αΆααααααααΆααα
ααααΆααααΆααααααΎαααΎααααααΆααααΆαααααΎαααΎα CNI
ααααα: www.habr.com