Kubernetes Network Plugin (CNI) 10 Гбит/сек тармактан жогору бааланган натыйжалар (Жаңыртылган: 2019-жылдын апрель айы)

Kubernetes Network Plugin (CNI) 10 Гбит/сек тармактан жогору бааланган натыйжалар (Жаңыртылган: 2019-жылдын апрель айы)
Бул менин жаңыртуусум мурунку эталон, ал азыр Kubernetes 1.14-де 2019-жылдын апрелине карата акыркы CNI версиясы менен иштейт.

Биринчиден, мен Cilium командасына ыраазычылык билдиргим келет: балдар метрикалык мониторинг сценарийлерин текшерүүгө жана оңдоого жардам беришти.

2018-жылдын ноябрынан бери эмне өзгөрдү

Мына ошондон бери эмне өзгөрдү (эгер сизди кызыктырса):

Фланел эң тез жана эң жөнөкөй CNI интерфейси бойдон калууда, бирок дагы эле тармак саясатын жана шифрлөөнү колдобойт.

Romana мындан ары колдоого алынбайт, ошондуктан биз аны эталондук көрсөткүчтөн алып салдык.

WeaveNet азыр Ingress жана Egress үчүн тармак саясатын колдойт! Бирок өндүрүмдүүлүк төмөндөп кеткен.

Каликодо сиз дагы эле эң жакшы иштеши үчүн максималдуу пакет өлчөмүн (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+ кабелдери аркылуу которгучка түздөн-түз туташтырылган жана ошол эле VLANда jumbo рамкалары менен конфигурацияланган (MTU 9000).

Docker 1.14.0 менен Ubuntu 18.04 LTSке орнотулган Kubernetes 18.09.2 (бул чыгарылыштагы демейки Docker версиясы).

Репродуктивдүүлүктү жакшыртуу үчүн биз ар дайым биринчи түйүндө мастерди конфигурациялоону чечтик, эталондун сервер бөлүгүн экинчи серверге, ал эми кардар бөлүгүн үчүнчүгө жайгаштырууну чечтик. Бул үчүн биз Kubernetes жайылтууларында NodeSelector колдонобуз.

Биз төмөнкү шкала боюнча эталондук натыйжаларды сүрөттөп берет:

Kubernetes Network Plugin (CNI) 10 Гбит/сек тармактан жогору бааланган натыйжалар (Жаңыртылган: 2019-жылдын апрель айы)

Эталон үчүн CNI тандоо

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

Биз төмөнкү CNIлерди салыштырабыз:

  • Calico v3.6
  • Canal v3.6 (негизинен тармак үчүн Flannel + Firewall катары 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 менен Jumbo алкактары иштетилген ортосундагы айырманы көрсөтөт:

Kubernetes Network Plugin (CNI) 10 Гбит/сек тармактан жогору бааланган натыйжалар (Жаңыртылган: 2019-жылдын апрель айы)
MTU өткөрүү жөндөмдүүлүгүнө кандай таасир этет?

Биз MTU иштеши үчүн канчалык маанилүү экенин көрдүк, эми CNIлер аны кантип автоматтык түрдө аныктаарын карап көрөлү:

Kubernetes Network Plugin (CNI) 10 Гбит/сек тармактан жогору бааланган натыйжалар (Жаңыртылган: 2019-жылдын апрель айы)
CNI автоматтык түрдө MTU аныктайт

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

коопсуздук

Биз CNI коопсуздугун эки аспектиде салыштырабыз: берилүүчү маалыматтарды шифрлөө мүмкүнчүлүгү жана Kubernetes тармак саясатын ишке ашыруу (документтерге эмес, реалдуу сыноолорго негизделген).

Эки гана CNI маалыматтарды шифрлейт: Cilium жана WeaveNet. Шифрлөө WeaveNet шифрлөө сырсөзүн CNI чөйрө өзгөрмө катары коюу менен иштетилген. IN документтер WeaveNet аны татаал жол менен сүрөттөйт, бирок баары жөнөкөй жасалат. Шифрлөө кирпич буйруктар менен конфигурацияланган, Kubernetes сырларын түзүү жана daemonSet модификациясы аркылуу (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 Performance

Бардык 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-жылдын апрель айы)

FTP менен, башка TCP негизиндеги протокол, натыйжалар ар кандай болот. Фланел жана Кубе-роутер ишти аткарышат, бирок 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 жок таза Kubernetes (кызгылт көк сызык) көрсөтүп, CNI канча кошумча ресурс керектелерин көрөлү.

Эстутумдан баштайлы. Бул жерде түйүндөрдүн оперативдүү эс тутумунун орточо мааниси (буферлерди жана кэш кошпогондо) өткөрүп берүү учурунда МБдагы.

Kubernetes Network Plugin (CNI) 10 Гбит/сек тармактан жогору бааланган натыйжалар (Жаңыртылган: 2019-жылдын апрель айы)
Эстутум керектөө

Flannel жана Kube-роутер мыкты натыйжаларды көрсөттү - болгону 50 МБ. Calico жана Canal ар биринде 70 бар. WeaveNet башкаларга караганда көбүрөөк керектейт - 130 МБ, ал эми Cilium 400гө чейин колдонот.
Эми CPU убакыт керектөөсүн текшерип көрөлү. Белгилей кетчү нерсе: диаграммада пайыздар эмес, промилле көрсөтүлгөн, башкача айтканда, “жылаңач темир” үчүн 38 промилле 3,8% түзөт. Бул жерде жыйынтыктар:

Kubernetes Network Plugin (CNI) 10 Гбит/сек тармактан жогору бааланган натыйжалар (Жаңыртылган: 2019-жылдын апрель айы)
CPU керектөө

Calico, Canal, Flannel жана Kube-роутер CPU абдан натыйжалуу - CNI жок Kubernetes караганда 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 алкактарын колдонсоңуз, MTUны ConfigMap ичинде конфигурациялоону унутпаңыз. Бул ресурстарды керектөө, аткаруу жана коопсуздук жагынан эффективдүү көп функциялуу курал.

Акыр-аягы, мен сизге өнүгүүнү ээрчүүнү сунуштайм кирпич. Бул CNI өз өнүмүнө (функциялар, ресурстарды үнөмдөө, аткаруу, коопсуздук, кластерлөө...) боюнча көп иштеген абдан активдүү командага ээ жана алардын абдан кызыктуу пландары бар.

Kubernetes Network Plugin (CNI) 10 Гбит/сек тармактан жогору бааланган натыйжалар (Жаңыртылган: 2019-жылдын апрель айы)
CNI тандоо үчүн визуалдык диаграмма

Source: www.habr.com

Комментарий кошуу