Toto je moje aktualizace
Nejprve chci poděkovat týmu Cilium: kluci mi pomohli zkontrolovat a opravit skripty sledování metrik.
Co se změnilo od listopadu 2018
Co se od té doby změnilo (pokud vás to zajímá):
Flannel zůstává nejrychlejším a nejjednodušším rozhraním CNI, ale stále nepodporuje síťové zásady a šifrování.
Romana již není podporována, proto jsme ji z benchmarku odstranili.
WeaveNet nyní podporuje síťové zásady pro Ingress a Egress! Produktivita se ale snížila.
V Calico stále musíte ručně nakonfigurovat maximální velikost paketu (MTU) pro nejlepší výkon. Calico nabízí dvě možnosti instalace CNI, takže se obejdete bez samostatného úložiště ETCD:
- stav uložení v Kubernetes API jako úložiště dat (velikost clusteru < 50 uzlů);
- stav ukládání v Kubernetes API jako datové úložiště s Typha proxy pro zmírnění zátěže K8S API (velikost clusteru > 50 uzlů).
Calico oznámilo podporu
Cilium nyní podporuje šifrování! Cilium poskytuje šifrování pomocí IPSec tunelů a nabízí alternativu k šifrované síti WeaveNet. WeaveNet je ale rychlejší než Cilium s povoleným šifrováním.
Cilium se nyní snadněji nasazuje díky vestavěnému operátoru ETCD.
Tým Cilium se pokusil snížit hmotnost svého CNI snížením spotřeby paměti a nákladů na CPU, ale jeho konkurenti jsou stále lehčí.
Kontext benchmarku
Benchmark běží na třech nevirtualizovaných serverech Supermicro s 10Gb přepínačem Supermicro. Servery jsou připojeny přímo k přepínači pomocí pasivních kabelů DAC SFP+ a jsou konfigurovány na stejné VLAN s jumbo rámy (MTU 9000).
Kubernetes 1.14.0 nainstalovaný na Ubuntu 18.04 LTS s Dockerem 18.09.2 (výchozí verze Dockeru v tomto vydání).
Pro zlepšení reprodukovatelnosti jsme se rozhodli vždy konfigurovat master na prvním uzlu, serverovou část benchmarku umístit na druhý server a klientskou část na třetí. K tomu používáme NodeSelector v nasazeních Kubernetes.
Výsledky benchmarku popíšeme na následující škále:
Výběr CNI pro benchmark
Toto je benchmark pouze pro CNI ze seznamu v části
Porovnáme následující CNI:
- Calico v3.6
- Canal v3.6 (v podstatě Flannel pro sítě + Calico jako firewall)
- Cilium 1.4.2
- Flanel 0.11.0
- Kube-router 0.2.5
- WeaveNet 2.5.1
Instalace
Čím jednodušší je instalace CNI, tím lepší bude náš první dojem. Všechny CNI z benchmarku se velmi snadno instalují (pomocí jednoho nebo dvou příkazů).
Jak jsme řekli, servery a přepínač jsou nakonfigurovány s povolenými jumbo rámce (MTU jsme nastavili na 9000). Byli bychom rádi, kdyby CNI automaticky určilo MTU na základě konfigurace adaptérů. To se však podařilo pouze Ciliu a Flanelu. Zbytek CNI má na GitHubu požadavky na přidání automatického zjišťování MTU, ale nakonfigurujeme to ručně změnou ConfigMap pro Calico, Canal a Kube-router nebo předáním proměnné prostředí pro WeaveNet.
Jaký je problém s nesprávným MTU? Tento diagram ukazuje rozdíl mezi WeaveNet se zapnutým výchozím MTU a jumbo snímky:
Jak MTU ovlivňuje propustnost?
Viděli jsme, jak důležitá je MTU pro výkon, nyní se podívejme, jak ji naše CNI automaticky určují:
Graf ukazuje, že pro optimální výkon musíte nakonfigurovat MTU pro Calico, Canal, Kube-router a WeaveNet. Cilium a Flannel byli schopni sami správně určit MTU bez jakéhokoli nastavení.
zabezpečení
Bezpečnost CNI porovnáme ve dvou aspektech: schopnost šifrovat přenášená data a implementace síťových zásad Kubernetes (na základě reálných testů, nikoli dokumentace).
Data šifrují pouze dvě CNI: Cilium a WeaveNet. Šifrování WeaveNet povoleno nastavením šifrovacího hesla jako proměnné prostředí CNI. V
Pokud jde o implementaci síťové politiky, uspěli Calico, Canal, Cilium a WeaveNet, ve kterém můžete nakonfigurovat pravidla Ingress a Egress. Pro Kube-router existují pravidla pouze pro Ingress a Flanel Neexistují vůbec žádné síťové zásady.
Zde jsou celkové výsledky:
Výsledky srovnávání výkonu v oblasti bezpečnosti
Производительность
Tento benchmark ukazuje průměrnou propustnost během alespoň tří běhů každého testu. Testujeme výkon TCP a UDP (pomocí iperf3), reálné aplikace jako HTTP (s Nginx a curl) nebo FTP (s vsftpd a curl) a nakonec výkon aplikací pomocí šifrování na bázi SCP (pomocí klienta a serveru OpenSSH).
U všech testů jsme provedli benchmark holého kovu (zelená čára), abychom porovnali výkon CNI s výkonem nativní sítě. Zde používáme stejné měřítko, ale v barvě:
- Žlutá = velmi dobrá
- Oranžová = dobrá
- Modrá = tak-tak
- Červená = špatná
Nebudeme brát nesprávně nakonfigurované CNI a zobrazíme pouze výsledky pro CNI se správnou MTU. (Poznámka: Cilium správně nevypočítá MTU, pokud povolíte šifrování, takže budete muset ručně snížit MTU na 8900 ve verzi 1.4. Další verze, 1.5, to dělá automaticky.)
Zde jsou výsledky:
Všechny CNI si vedly dobře v benchmarku TCP. CNI s šifrováním značně zaostává, protože šifrování je drahé.
I zde se všem CNI daří dobře. CNI s šifrováním vykázal téměř stejný výsledek. Cilium trochu zaostává za konkurencí, ale je to jen 2,3 % holého kovu, takže to není špatný výsledek. Nezapomeňte, že pouze Cilium a Flannel určili MTU správně sami a toto jsou jejich výsledky bez jakékoli další konfigurace.
A co skutečná aplikace? Jak vidíte, celkový výkon pro HTTP je o něco nižší než pro TCP. I když používáte HTTP s TCP, nakonfigurovali jsme iperf3 v benchmarku TCP, abychom se vyhnuli pomalému startu, který by ovlivnil benchmark HTTP. Všichni zde odvedli dobrou práci. Kube-router má jasnou výhodu, ale WeaveNet si nevedl dobře: asi o 20 % horší než holý kov. Cilium a WeaveNet s šifrováním vypadají opravdu smutně.
S FTP, dalším protokolem založeným na TCP, se výsledky liší. Flannel a Kube-router to dělají, ale Calico, Canal a Cilium jsou trochu pozadu a jsou asi o 10 % pomalejší než holý kov. WeaveNet je pozadu až o 17 %, ale šifrovaný WeaveNet je o 40 % před šifrovaným Ciliem.
S SCP okamžitě vidíme, kolik nás stojí šifrování SSH. Téměř všechny CNI jsou na tom dobře, ale WeaveNet opět zaostává. Cilium a WeaveNet s šifrováním jsou na tom podle očekávání nejhůře kvůli dvojitému šifrování (SSH + CNI).
Zde je souhrnná tabulka s výsledky:
Spotřeba zdrojů
Nyní porovnejme, jak CNI spotřebovává zdroje při velkém zatížení (během TCP přenosu, 10 Gbps). Ve výkonnostních testech porovnáváme CNI s holým kovem (zelená čára). Pro spotřebu zdrojů si ukažme čisté Kubernetes (fialová čára) bez CNI a podívejme se, kolik dalších zdrojů CNI spotřebovává.
Začněme pamětí. Zde je průměrná hodnota RAM uzlů (bez vyrovnávací paměti a mezipaměti) v MB během přenosu.
Flannel a Kube-router ukázaly vynikající výsledky - pouze 50 MB. Calico a Canal mají každý 70. WeaveNet jednoznačně spotřebuje více než ostatní – 130 MB a Cilium jich spotřebuje až 400.
Nyní zkontrolujeme spotřebu času CPU. Pozoruhodný: diagram neukazuje procenta, ale ppm, to znamená, že 38 ppm pro „holé železo“ je 3,8 %. Zde jsou výsledky:
Calico, Canal, Flannel a Kube-router jsou velmi efektivní na CPU – pouze o 2 % více než Kubernetes bez CNI. WeaveNet výrazně zaostává s 5 % navíc, následovaný Ciliem se 7 %.
Zde je souhrn spotřeby zdrojů:
Výsledky
Tabulka se všemi výsledky:
Závěr
V poslední části vyjádřím svůj subjektivní názor na výsledky. Pamatujte, že tento benchmark testuje pouze propustnost jednoho připojení na velmi malém clusteru (3 uzly). Neplatí pro velké clustery (<50 uzlů) nebo paralelní připojení.
V závislosti na scénáři doporučuji používat následující CNI:
- Máte ve svém clusteru uzly s malým počtem zdrojů (několik GB RAM, několik jader) a nepotřebujete bezpečnostní funkce – vyberte si Flanel. Jedná se o jeden z nákladově nejefektivnějších CNI. A je kompatibilní s celou řadou architektur (amd64, arm, arm64 atd.). Navíc je to jeden ze dvou (druhý je Cilium) CNI, který dokáže automaticky určit MTU, takže nemusíte nic konfigurovat. Kube-router je také vhodný, ale není standardní a budete muset ručně nakonfigurovat MTU.
- V případě potřeby zašifrovat síť pro jistotu vezměte WeaveNet. Pokud používáte jumbo snímky, nezapomeňte zadat velikost MTU a povolit šifrování zadáním hesla prostřednictvím proměnné prostředí. Ale je lepší zapomenout na výkon - to jsou náklady na šifrování.
- pro běžné použití Radím Kaliko. Toto CNI je široce používáno v různých nástrojích pro nasazení Kubernetes (Kops, Kubespray, Rancher atd.). Stejně jako u WeaveNet nezapomeňte nakonfigurovat MTU v ConfigMap, pokud používáte jumbo snímky. Jedná se o multifunkční nástroj, který je efektivní z hlediska spotřeby zdrojů, výkonu a zabezpečení.
A nakonec radím sledovat vývoj cilium. Toto CNI má velmi aktivní tým, který hodně pracuje na svém produktu (funkce, úspora zdrojů, výkon, bezpečnost, clustering...) a mají velmi zajímavé plány.
Vizuální diagram pro výběr CNI
Zdroj: www.habr.com