Srovnávací výsledky Kubernetes Network Plugin (CNI) v síti 10 Gb/s (aktualizováno: duben 2019)

Srovnávací výsledky Kubernetes Network Plugin (CNI) v síti 10 Gb/s (aktualizováno: duben 2019)
Toto je moje aktualizace předchozí benchmark, který nyní běží na Kubernetes 1.14 s nejnovější verzí CNI od dubna 2019.

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 zásady na úrovni aplikace na vrcholu Istio pro zabezpečení na úrovni aplikace.

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:

Srovnávací výsledky Kubernetes Network Plugin (CNI) v síti 10 Gb/s (aktualizováno: duben 2019)

Výběr CNI pro benchmark

Toto je benchmark pouze pro CNI ze seznamu v části o vytvoření jednoho hlavního clusteru pomocí kubeadm Podívejte se na oficiální dokumentaci Kubernetes. Z 9 CNI vezmeme pouze 6: vyloučíme ty, které se obtížně instalují a/nebo nefungují bez konfigurace podle dokumentace (Romana, Contiv-VPP a JuniperContrail/TungstenFabric).

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:

Srovnávací výsledky Kubernetes Network Plugin (CNI) v síti 10 Gb/s (aktualizováno: duben 2019)
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í:

Srovnávací výsledky Kubernetes Network Plugin (CNI) v síti 10 Gb/s (aktualizováno: duben 2019)
CNI automaticky detekuje MTU

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 dokumentace WeaveNet to popisuje složitě, ale vše se dělá jednoduše. Šifrování cilium konfigurováno pomocí příkazů, vytvářením tajemství Kubernetes a úpravou daemonSet (trochu složitější než ve WeaveNet, ale Cilium má krok za krokem instrukce).

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:

Srovnávací výsledky Kubernetes Network Plugin (CNI) v síti 10 Gb/s (aktualizováno: duben 2019)
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:

Srovnávací výsledky Kubernetes Network Plugin (CNI) v síti 10 Gb/s (aktualizováno: duben 2019)
Výkon TCP

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é.

Srovnávací výsledky Kubernetes Network Plugin (CNI) v síti 10 Gb/s (aktualizováno: duben 2019)
Výkon UDP

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.

Srovnávací výsledky Kubernetes Network Plugin (CNI) v síti 10 Gb/s (aktualizováno: duben 2019)

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ě.

Srovnávací výsledky Kubernetes Network Plugin (CNI) v síti 10 Gb/s (aktualizováno: duben 2019)

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.

Srovnávací výsledky Kubernetes Network Plugin (CNI) v síti 10 Gb/s (aktualizováno: duben 2019)

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:

Srovnávací výsledky Kubernetes Network Plugin (CNI) v síti 10 Gb/s (aktualizováno: duben 2019)

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.

Srovnávací výsledky Kubernetes Network Plugin (CNI) v síti 10 Gb/s (aktualizováno: duben 2019)
Spotřeba paměti

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:

Srovnávací výsledky Kubernetes Network Plugin (CNI) v síti 10 Gb/s (aktualizováno: duben 2019)
spotřeba CPU

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ů:

Srovnávací výsledky Kubernetes Network Plugin (CNI) v síti 10 Gb/s (aktualizováno: duben 2019)

Výsledky

Tabulka se všemi výsledky:

Srovnávací výsledky Kubernetes Network Plugin (CNI) v síti 10 Gb/s (aktualizováno: duben 2019)
Obecné výsledky benchmarku

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.

Srovnávací výsledky Kubernetes Network Plugin (CNI) v síti 10 Gb/s (aktualizováno: duben 2019)
Vizuální diagram pro výběr CNI

Zdroj: www.habr.com

Přidat komentář