Kubernetes Network Plugin (CNI) 10 Гбит/с желіден жоғары эталон нәтижелері (Жаңартылған: 2019 ж. сәуір)

Kubernetes Network Plugin (CNI) 10 Гбит/с желіден жоғары эталон нәтижелері (Жаңартылған: 2019 ж. сәуір)
Бұл менің жаңартуым алдыңғы эталон, ол қазір Kubernetes 1.14 жүйесінде 2019 жылдың сәуіріндегі соңғы CNI нұсқасымен жұмыс істейді.

Ең алдымен, Cilium командасына алғыс айтқым келеді: жігіттер метрика мониторингінің сценарийлерін тексеруге және түзетуге көмектесті.

2018 жылдың қарашасынан бері не өзгерді

Міне, содан бері не өзгерді (егер сізді қызықтырса):

Фланель ең жылдам және қарапайым CNI интерфейсі болып қала береді, бірақ әлі де желі саясаттары мен шифрлауды қолдамайды.

Романаға енді қолдау көрсетілмейді, сондықтан біз оны эталоннан алып тастадық.

WeaveNet енді кіру және шығу үшін желілік саясаттарды қолдайды! Бірақ өнімділік төмендеді.

Calico бағдарламасында ең жақсы өнімділік үшін ең үлкен пакет өлшемін (MTU) қолмен конфигурациялау қажет. Calico CNI орнатудың екі нұсқасын ұсынады, сондықтан сіз бөлек ETCD репозиторийінсіз жасай аласыз:

  • деректер қоймасы ретінде Kubernetes API күйін сақтау (кластер өлшемі < 50 түйін);
  • K8S API жүйесіндегі жүктемені жеңілдету үшін Typha проксиі бар деректер қоймасы ретінде Kubernetes API күйін сақтау (кластер өлшемі > 50 түйін).

Calico қолдауын жариялады қолданбалы деңгейдегі саясаттар қолданба деңгейіндегі қауіпсіздік үшін Istio жоғарғы жағында.

Cilium енді шифрлауды қолдайды! Cilium IPSec туннельдерімен шифрлауды қамтамасыз етеді және шифрланған WeaveNet желісіне балама ұсынады. Бірақ WeaveNet шифрлау қосылған Cilium-қа қарағанда жылдамырақ.

Cilium енді кірістірілген ETCD операторының арқасында оңайырақ болады.

Cilium командасы жадты тұтынуды және CPU шығындарын азайту арқылы CNI салмағын азайтуға тырысты, бірақ оның бәсекелестері әлі де жеңіл.

Эталондық контекст

Эталон 10 Гб Supermicro қосқышы бар үш виртуалды емес Supermicro серверінде іске қосылады. Серверлер қосқышқа пассивті DAC SFP+ кабельдері арқылы тікелей қосылады және жұмбо жақтаулары бар (MTU 9000) бір VLAN желісінде конфигурацияланады.

Docker 1.14.0 нұсқасы бар Ubuntu 18.04 LTS жүйесінде орнатылған Kubernetes 18.09.2 (осы шығарылымдағы әдепкі Docker нұсқасы).

Қайта шығару мүмкіндігін жақсарту үшін біз әрқашан бірінші түйінде басты конфигурациялауды шештік, эталонның сервер бөлігін екінші серверге, ал клиент бөлігін үшіншіге орналастырдық. Мұны істеу үшін біз Kubernetes орналастыруларында NodeSelector пайдаланамыз.

Біз бенчмарк нәтижелерін келесі шкала бойынша сипаттаймыз:

Kubernetes Network Plugin (CNI) 10 Гбит/с желіден жоғары эталон нәтижелері (Жаңартылған: 2019 ж. сәуір)

Эталон үшін CNI таңдау

Бұл бөлімдегі тізімдегі CNI үшін ғана эталон kubeadm көмегімен бір негізгі кластерді құру туралы Ресми Kubernetes құжаттамасын қараңыз. 9 CNI ішінен біз тек 6-ын аламыз: орнату қиын және/немесе құжаттамаға (Romana, Contiv-VPP және JuniperContrail/TungstenFabric) сәйкес конфигурациясыз жұмыс істемейтіндерін алып тастаймыз.

Біз келесі CNI-ларды салыстырамыз:

  • Calico v3.6
  • Canal v3.6 (негізінен желіге арналған фланель + брандмауэр ретінде Calico)
  • Cilium 1.4.2
  • Фланель 0.11.0
  • Kube-маршрутизатор 0.2.5
  • WeaveNet 2.5.1

параметр

CNI орнату оңайырақ болса, біздің алғашқы әсеріміз соғұрлым жақсы болады. Эталондағы барлық CNI орнату өте оңай (бір немесе екі пәрменмен).

Жоғарыда айтқанымыздай, серверлер мен коммутаторлар қосулы жұмбо жақтауларымен конфигурацияланған (біз MTU-ны 9000-ге орнаттық). Егер CNI адаптер конфигурациясына негізделген MTU-ны автоматты түрде анықтаса, біз қуанамыз. Алайда мұны тек Cilium мен Flannel басқарды. Қалған CNI жүйелерінде GitHub жүйесінде автоматты MTU табуды қосу сұраулары бар, бірақ біз оны Calico, Canal және Kube-маршрутизаторға арналған ConfigMap картасын өзгерту немесе WeaveNet үшін орта айнымалы мәнін беру арқылы қолмен конфигурациялаймыз.

Дұрыс емес MTU мәселесі қандай? Бұл диаграмма әдепкі MTU және қосулы жұмбо кадрлары бар WeaveNet арасындағы айырмашылықты көрсетеді:

Kubernetes Network Plugin (CNI) 10 Гбит/с желіден жоғары эталон нәтижелері (Жаңартылған: 2019 ж. сәуір)
MTU өткізу қабілетіне қалай әсер етеді?

Біз MTU өнімділігі үшін қаншалықты маңызды екенін көрдік, енді біздің CNI оны автоматты түрде қалай анықтайтынын көрейік:

Kubernetes Network Plugin (CNI) 10 Гбит/с желіден жоғары эталон нәтижелері (Жаңартылған: 2019 ж. сәуір)
CNI MTU-ны автоматты түрде анықтайды

График оңтайлы өнімділік үшін Calico, Canal, Kube-роутер және WeaveNet үшін MTU конфигурациялау қажет екенін көрсетеді. Cilium және Flannel ешбір баптаусыз MTU-ны өздері дұрыс анықтай алды.

Қауіпсіздік

Біз CNI қауіпсіздігін екі аспектіде салыстырамыз: жіберілетін деректерді шифрлау мүмкіндігі және Kubernetes желілік саясаттарын жүзеге асыру (құжаттамаға емес, нақты сынақтарға негізделген).

Тек екі CNI деректерді шифрлайды: Cilium және WeaveNet. Шифрлау WeaveNet CNI ортасының айнымалысы ретінде шифрлау құпия сөзін орнату арқылы қосылады. IN құжаттама WeaveNet оны күрделі түрде сипаттайды, бірақ бәрі қарапайым. Шифрлау Цилиум пәрмендер арқылы, Kubernetes құпияларын жасау және demonSet модификациясы арқылы конфигурацияланады (WeaveNet-ке қарағанда сәл күрделірек, бірақ Cilium-да қадамдық нұсқаулар).

Желілік саясатты жүзеге асыруға келсек, олар табысқа жетті Calico, Canal, Cilium және WeaveNet, онда кіру және шығу ережелерін конфигурациялауға болады. Үшін Kube-маршрутизатор Тек кіру ережелері бар және Фланель Желілік саясаттар мүлдем жоқ.

Міне, жалпы нәтижелер:

Kubernetes Network Plugin (CNI) 10 Гбит/с желіден жоғары эталон нәтижелері (Жаңартылған: 2019 ж. сәуір)
Қауіпсіздік өнімділігінің эталондық нәтижелері

өнімділік

Бұл эталон әрбір сынақтың кемінде үш жұмысы бойынша орташа өткізу қабілеттілігін көрсетеді. Біз TCP және UDP өнімділігін (iperf3 көмегімен), HTTP (Nginx және curl көмегімен) немесе FTP (vsftpd және curl көмегімен) сияқты нақты қолданбаларды және сайып келгенде, SCP негізіндегі шифрлауды (клиент пен OpenSSH серверін пайдалану) пайдаланып қолданба өнімділігін тексереміз.

Барлық сынақтар үшін біз CNI өнімділігін жергілікті желі өнімділігімен салыстыру үшін жалаңаш металды (жасыл сызық) орындадық. Мұнда біз бірдей масштабты қолданамыз, бірақ түсті:

  • Сары = өте жақсы
  • Апельсин = жақсы
  • Көк = солай
  • Қызыл = жаман

Біз қате конфигурацияланған CNI-ларды алмаймыз және тек дұрыс MTU бар CNI нәтижелерін көрсетеміз. (Ескерту: шифрлауды қоссаңыз, Cilium MTU-ны дұрыс есептемейді, сондықтан 8900 нұсқасында MTU мәнін 1.4-ге дейін қолмен азайтуға тура келеді. Келесі 1.5 нұсқасы мұны автоматты түрде жасайды.)

Міне нәтижелер:

Kubernetes Network Plugin (CNI) 10 Гбит/с желіден жоғары эталон нәтижелері (Жаңартылған: 2019 ж. сәуір)
TCP өнімділігі

Барлық CNI TCP эталонында жақсы нәтиже көрсетті. Шифрлауы бар CNI әлдеқайда артта қалды, себебі шифрлау қымбат.

Kubernetes Network Plugin (CNI) 10 Гбит/с желіден жоғары эталон нәтижелері (Жаңартылған: 2019 ж. сәуір)
UDP өнімділігі

Мұнда да барлық CNI жақсы жұмыс істейді. Шифрлауы бар CNI дерлік бірдей нәтиже көрсетті. Cilium бәсекелестіктен сәл артта қалды, бірақ бұл тек 2,3% жалаңаш металл, сондықтан бұл жаман нәтиже емес. Тек Cilium және Flannel MTU-ны өздері дұрыс анықтағанын ұмытпаңыз, бұл олардың ешқандай қосымша конфигурациясыз нәтижелері.

Kubernetes Network Plugin (CNI) 10 Гбит/с желіден жоғары эталон нәтижелері (Жаңартылған: 2019 ж. сәуір)

Нақты қолданба туралы не деуге болады? Көріп отырғаныңыздай, HTTP үшін жалпы өнімділік TCP-ге қарағанда біршама төмен. HTTP протоколын TCP көмегімен пайдалансаңыз да, HTTP эталонына әсер ететін баяу бастауды болдырмау үшін TCP эталонында iperf3 конфигурациясын жасадық. Мұнда барлығы жақсы жұмыс жасады. Kube-роутердің айқын артықшылығы бар, бірақ WeaveNet жақсы жұмыс істемеді: жалаңаш металдан шамамен 20% нашар. Шифрланған Cilium және WeaveNet шынымен қайғылы көрінеді.

Kubernetes Network Plugin (CNI) 10 Гбит/с желіден жоғары эталон нәтижелері (Жаңартылған: 2019 ж. сәуір)

TCP негізіндегі басқа протокол FTP көмегімен нәтижелер әртүрлі болады. Фланель және Кубе-маршрутизатор жұмыс істейді, бірақ Calico, Canal және Cilium сәл артта қалды және жалаңаш металға қарағанда шамамен 10% баяу. WeaveNet 17%-ға артта қалды, бірақ шифрланған WeaveNet шифрланған Cilium-тан 40% алда.

Kubernetes Network Plugin (CNI) 10 Гбит/с желіден жоғары эталон нәтижелері (Жаңартылған: 2019 ж. сәуір)

SCP көмегімен SSH шифрлауының бізге қанша тұратынын бірден көре аламыз. Барлық дерлік CNI жақсы жұмыс істейді, бірақ WeaveNet қайтадан артта қалды. Шифрлауы бар Cilium және WeaveNet қос шифрлаудың (SSH + CNI) арқасында ең нашар деп күтілуде.

Нәтижелері бар жиынтық кесте:

Kubernetes Network Plugin (CNI) 10 Гбит/с желіден жоғары эталон нәтижелері (Жаңартылған: 2019 ж. сәуір)

Ресурстарды тұтыну

Енді CNI ауыр жүктемелер кезінде ресурстарды қалай тұтынатынын салыстырайық (TCP тасымалдау кезінде, 10 Гбит/с). Өнімділік сынақтарында біз CNI-ді жалаң металлмен (жасыл сызық) салыстырамыз. Ресурстарды тұтыну үшін CNI жоқ таза Кубернеттерді (күлгін сызық) көрсетейік және CNI қанша қосымша ресурстарды тұтынатынын көрейік.

Есте сақтаудан бастайық. Мұнда тасымалдау кезінде МБ-дағы түйіндердің ЖЖҚ (буферсіз және кэшсіз) орташа мәні берілген.

Kubernetes Network Plugin (CNI) 10 Гбит/с желіден жоғары эталон нәтижелері (Жаңартылған: 2019 ж. сәуір)
Жадты тұтыну

Фланель және Kube-роутер тамаша нәтиже көрсетті - бар болғаны 50 МБ. Calico және Canal әрқайсысында 70 бар. WeaveNet басқаларға қарағанда көбірек тұтынады - 130 МБ, ал Cilium 400-ге дейін пайдаланады.
Енді CPU уақытын тұтынуды тексерейік. Назар аударарлық: диаграммада пайыздар емес, промилле көрсетілген, яғни «жалаңаш темір» үшін 38 ppm 3,8% құрайды. Міне нәтижелер:

Kubernetes Network Plugin (CNI) 10 Гбит/с желіден жоғары эталон нәтижелері (Жаңартылған: 2019 ж. сәуір)
CPU тұтыну

Calico, Canal, Flannel және Kube-маршрутизаторы өте тиімді процессор – CNI жоқ Кубернеттерге қарағанда 2%-ға ғана артық. WeaveNet қосымша 5%, одан кейін Cilium 7% арқылы әлдеқайда артта қалды.

Мұнда ресурстарды тұтынудың қысқаша мазмұны берілген:

Kubernetes Network Plugin (CNI) 10 Гбит/с желіден жоғары эталон нәтижелері (Жаңартылған: 2019 ж. сәуір)

Нәтижелері

Барлық нәтижелері бар кесте:

Kubernetes Network Plugin (CNI) 10 Гбит/с желіден жоғары эталон нәтижелері (Жаңартылған: 2019 ж. сәуір)
Жалпы эталондық нәтижелер

қорытынды

Соңғы бөлімде нәтижелер туралы өзімнің субъективті пікірімді білдіремін. Есіңізде болсын, бұл эталон тек өте кішкентай кластерде (3 түйін) бір қосылымның өткізу қабілетін тексереді. Ол үлкен кластерлерге (<50 түйін) немесе параллель қосылымдарға қолданылмайды.

Мен сценарийге байланысты келесі CNI пайдалануды ұсынамын:

  • Сіздің кластеріңізде бар ма? ресурстары аз түйіндер (бірнеше ГБ жедел жады, бірнеше ядро) және сізге қауіпсіздік мүмкіндіктері қажет емес - таңдаңыз Фланель. Бұл ең үнемді CNI-лардың бірі. Және ол әртүрлі архитектуралармен (amd64, arm, arm64 және т.б.) үйлесімді. Бұған қоса, бұл MTU-ны автоматты түрде анықтай алатын екі (екіншісі Cilium) CNI бірі, сондықтан ештеңені конфигурациялаудың қажеті жоқ. Kube-маршрутизатор да қолайлы, бірақ ол стандартты емес және сізге MTU қолмен конфигурациялау қажет болады.
  • Қажет болса желіні шифрлау қауіпсіздік үшін алыңыз WeaveNet. Jumbo жақтауларын пайдалансаңыз, MTU өлшемін көрсетуді ұмытпаңыз және орта айнымалысы арқылы құпия сөзді көрсету арқылы шифрлауды қосыңыз. Бірақ өнімділік туралы ұмытқан дұрыс - бұл шифрлау құны.
  • үшін қалыпты пайдалану Мен кеңес беремін Calico. Бұл CNI әртүрлі Kubernetes орналастыру құралдарында (Kops, Kubespray, Rancher және т.б.) кеңінен қолданылады. WeaveNet сияқты, Jumbo жақтауларын пайдалансаңыз, ConfigMap бағдарламасында MTU конфигурациялауды ұмытпаңыз. Бұл ресурстарды тұтыну, өнімділік және қауіпсіздік тұрғысынан тиімді көп функциялы құрал.

Соңында мен сізге дамуды қадағалауға кеңес беремін Цилиум. Бұл CNI-де өз өнімінде көп жұмыс істейтін (мүмкіндіктер, ресурстарды үнемдеу, өнімділік, қауіпсіздік, кластерлеу...) өте белсенді команда бар және олардың өте қызықты жоспарлары бар.

Kubernetes Network Plugin (CNI) 10 Гбит/с желіден жоғары эталон нәтижелері (Жаңартылған: 2019 ж. сәуір)
CNI таңдау үшін визуалды диаграмма

Ақпарат көзі: www.habr.com

пікір қалдыру