CNI-ի կատարողականի գնահատում Kubernetes-ի համար 10G ցանցի համար (օգոստոս 2020)

CNI-ի կատարողականի գնահատում Kubernetes-ի համար 10G ցանցի համար (օգոստոս 2020)

TL; DR. Բոլոր CNI-ները աշխատում են այնպես, ինչպես պետք է, բացառությամբ Kube-Router-ի և Kube-OVN-ի, Calico-ն, բացառությամբ MTU-ի ավտոմատ հայտնաբերման, լավագույնն է:

Իմ անցյալ ստուգումների հոդված-թարմացում (2018 и 2019), փորձարկման պահին ես օգտագործում եմ Kubernetes 1.19 Ubuntu 18.04-ում թարմացված CNI-ներով 2020 թվականի օգոստոսի դրությամբ:

Նախքան չափումների մեջ մտնելը...

Ի՞նչ նորություններ կան 2019 թվականի ապրիլից:

  • Կարող եք փորձարկել ձեր սեփական կլաստերի վրա. Դուք կարող եք փորձարկել ձեր սեփական կլաստերի վրա՝ օգտագործելով մեր գործիքը Kubernetes ցանցի չափանիշ: knb
  • Նոր անդամներ են հայտնվել
  • Նոր սցենարներ. Ընթացիկ ստուգումները կատարում են «Pod-to-Pod» ցանցի կատարողականի թեստեր, և ավելացվել է նոր «Pod-to-Service» սկրիպտը, որն իրականացնում է թեստերը ավելի մոտ իրական աշխարհի պայմաններին: Գործնականում ձեր Pod with API-ն աշխատում է բազայի հետ՝ որպես ծառայություն, և ոչ թե Pod ip հասցեի միջոցով (իհարկե մենք ստուգում ենք և՛ TCP, և՛ UDP երկու սցենարների համար)։
  • Ռեսուրսների սպառում. յուրաքանչյուր թեստ այժմ ունի իր ռեսուրսների համեմատությունը
  • Հավելվածի թեստերի հեռացում. մենք այլևս չենք կատարում HTTP, FTP և SCP թեստեր, քանի որ մեր արդյունավետ համագործակցությունը համայնքի և CNI սպասարկողների հետ բացահայտել է Iperf արդյունքների միջև TCP-ի և curl արդյունքների միջև բացը CNI-ի գործարկման հետաձգման պատճառով (Pod-ի առաջին մի քանի վայրկյանները): ստարտափ, որը բնորոշ չէ իրական պայմաններում):
  • Բաց աղբյուր. բոլոր թեստային աղբյուրները (սկրիպտներ, yml կարգավորումներ և բնօրինակ «հում» տվյալներ) հասանելի են այստեղ

Հղման փորձարկման արձանագրություն

Արձանագրությունը մանրամասն նկարագրված է այստեղԽնդրում ենք նկատի ունենալ, որ այս հոդվածը Ubuntu 18.04-ի մասին է լռելյայն միջուկով:

Գնահատման համար CNI ընտրելը

Այս թեստավորման նպատակն է համեմատել CNI-ները, որոնք կազմաձևված են մեկ yaml ֆայլի հետ (հետևաբար, բոլոր սկրիպտներով տեղադրվածները, ինչպիսիք են VPP-ը և այլն, բացառված են):

Համեմատության համար մեր ընտրած CNI-ները.

  • Antrea v.0.9.1
  • Calico v3.16
  • Canal v3.16 (Flannel ցանց + Calico ցանցային քաղաքականություն)
  • Կիլիում 1.8.2
  • Ֆլանել 0.12.0
  • Kube-երթուղիչը վերջին (2020–08–25)
  • WeaveNet 2.7.0

MTU-ի կարգավորում CNI-ի համար

Առաջին հերթին մենք ստուգում ենք ավտոմատ MTU հայտնաբերման ազդեցությունը TCP-ի կատարողականի վրա.

CNI-ի կատարողականի գնահատում Kubernetes-ի համար 10G ցանցի համար (օգոստոս 2020)

MTU-ի ազդեցությունը TCP-ի կատարողականի վրա

Նույնիսկ ավելի մեծ բաց է հայտնաբերվում UDP-ի օգտագործման ժամանակ.

CNI-ի կատարողականի գնահատում Kubernetes-ի համար 10G ցանցի համար (օգոստոս 2020)
MTU-ի ազդեցությունը UDP-ի կատարողականի վրա

Հաշվի առնելով թեստերում բացահայտված աշխատանքի հսկա ազդեցությունը, մենք ցանկանում ենք հույսի նամակ ուղարկել բոլոր CNI սպասարկողներին. խնդրում ենք ավելացնել ավտոմատ MTU հայտնաբերումը CNI-ին: Դուք կփրկեք ձագերին, միաեղջյուրներին և նույնիսկ ամենասիրունին՝ փոքրիկ Դևոպին:

Այնուամենայնիվ, եթե Ձեզ անհրաժեշտ է օգտագործել CNI առանց ավտոմատ MTU հայտնաբերման աջակցության, կարող եք այն ձեռքով կարգավորել՝ կատարողականություն ստանալու համար: Խնդրում ենք նկատի ունենալ, որ դա վերաբերում է Calico-ին, Canal-ին և WeaveNet-ին:

CNI-ի կատարողականի գնահատում Kubernetes-ի համար 10G ցանցի համար (օգոստոս 2020)
Իմ փոքրիկ խնդրանքը ուղեկցող CNI-ներին...

CNI թեստավորում. չմշակված տվյալներ

Այս բաժնում մենք կհամեմատենք CNI-ն ճիշտ MTU-ի հետ (որոշվում է ավտոմատ կերպով կամ սահմանվում է ձեռքով): Այստեղ հիմնական նպատակն է ցույց տալ չմշակված տվյալները գրաֆիկներում:

Գույնի լեգենդ.

  • մոխրագույն - նմուշ (այսինքն՝ մերկ երկաթ)
  • կանաչ - 9500 Մբիթ/վրկ թողունակություն
  • դեղին - թողունակությունը 9000 Մբիթ/վրկ-ից բարձր
  • նարնջագույն - 8000 Մբիթ/վրկ թողունակություն
  • կարմիր - 8000 Մբիթ/վրկ-ից ցածր թողունակություն
  • կապույտ - չեզոք (կապված չէ թողունակության հետ)

Առանց բեռի ռեսուրսների սպառում

Առաջին հերթին ստուգեք ռեսուրսների սպառումը, երբ կլաստերը «քնած է»:

CNI-ի կատարողականի գնահատում Kubernetes-ի համար 10G ցանցի համար (օգոստոս 2020)
Առանց բեռի ռեսուրսների սպառում

Pod-to-Pod

Այս սցենարը ենթադրում է, որ հաճախորդի Pod-ը ուղղակիորեն միանում է սերվերի Pod-ին՝ օգտագործելով իր IP հասցեն:

CNI-ի կատարողականի գնահատում Kubernetes-ի համար 10G ցանցի համար (օգոստոս 2020)
Pod-to-Pod սցենար

TCP

Pod-to-Pod TCP արդյունքները և համապատասխան ռեսուրսների սպառումը.

CNI-ի կատարողականի գնահատում Kubernetes-ի համար 10G ցանցի համար (օգոստոս 2020)

CNI-ի կատարողականի գնահատում Kubernetes-ի համար 10G ցանցի համար (օգոստոս 2020)

UDP

Pod-to-Pod UDP արդյունքները և համապատասխան ռեսուրսների սպառումը.

CNI-ի կատարողականի գնահատում Kubernetes-ի համար 10G ցանցի համար (օգոստոս 2020)

CNI-ի կատարողականի գնահատում Kubernetes-ի համար 10G ցանցի համար (օգոստոս 2020)

Pod-to-Service

Այս բաժինը վերաբերում է իրական օգտագործման դեպքերին, հաճախորդը Pod-ը միանում է սերվերի Pod-ին ClusterIP ծառայության միջոցով:

CNI-ի կատարողականի գնահատում Kubernetes-ի համար 10G ցանցի համար (օգոստոս 2020)
Pod-to-Service սցենար

TCP

Pod-to-Service TCP արդյունքները և համապատասխան ռեսուրսների սպառումը.

CNI-ի կատարողականի գնահատում Kubernetes-ի համար 10G ցանցի համար (օգոստոս 2020)

CNI-ի կատարողականի գնահատում Kubernetes-ի համար 10G ցանցի համար (օգոստոս 2020)

UDP

Pod-to-Service UDP արդյունքները և համապատասխան ռեսուրսների սպառումը.

CNI-ի կատարողականի գնահատում Kubernetes-ի համար 10G ցանցի համար (օգոստոս 2020)

CNI-ի կատարողականի գնահատում Kubernetes-ի համար 10G ցանցի համար (օգոստոս 2020)

Ցանցային քաղաքականության աջակցություն

Վերոնշյալ բոլորի մեջ միակը, ով չի աջակցում քաղաքականությանը, Ֆլանելն է։ Բոլոր մյուսները ճիշտ են իրականացնում ցանցային քաղաքականությունը, ներառյալ ներգնա և ելքային: Հիանալի աշխատանք:

CNI կոդավորումը

Ստուգված CNI-ների թվում կան այնպիսիք, որոնք կարող են ծածկագրել ցանցային փոխանակումը Pods-ի միջև.

  • Antrea օգտագործելով IPsec
  • Calico օգտագործելով մետաղալարեր
  • Cilium օգտագործելով IPsec
  • WeaveNet օգտագործելով IPsec

Շրջանառություն

Քանի որ ավելի քիչ CNI-ներ են մնացել, եկեք բոլոր սցենարները դնենք մեկ գրաֆիկի մեջ.

CNI-ի կատարողականի գնահատում Kubernetes-ի համար 10G ցանցի համար (օգոստոս 2020)

Ռեսուրսների սպառում

Այս բաժնում մենք կգնահատենք այն ռեսուրսները, որոնք օգտագործվում են TCP-ում և UDP-ում Pod-to-Pod հաղորդակցությունը մշակելիս: Pod-to-Service գրաֆիկը գծելու իմաստ չկա, քանի որ այն լրացուցիչ տեղեկատվություն չի տրամադրում:

CNI-ի կատարողականի գնահատում Kubernetes-ի համար 10G ցանցի համար (օգոստոս 2020)

CNI-ի կատարողականի գնահատում Kubernetes-ի համար 10G ցանցի համար (օգոստոս 2020)

Այս ամենը միասին դնելով

Փորձենք կրկնել բոլոր գրաֆիկները, մենք այստեղ մի փոքր սուբյեկտիվություն ներկայացրինք՝ իրական արժեքները փոխարինելով «vwry fast», «low» և այլն բառերով։

CNI-ի կատարողականի գնահատում Kubernetes-ի համար 10G ցանցի համար (օգոստոս 2020)

Եզրակացություն և իմ եզրակացությունները

Սա մի փոքր սուբյեկտիվ է, քանի որ ես փոխանցում եմ արդյունքների իմ մեկնաբանությունը։

Ուրախ եմ, որ հայտնվեցին նոր CNI-ներ, Antrea-ն լավ կատարեց, շատ գործառույթներ իրականացվեցին նույնիսկ վաղ տարբերակներում՝ ավտոմատ MTU հայտնաբերում, կոդավորում և հեշտ տեղադրում:

Եթե ​​համեմատենք կատարողականը, ապա բոլոր CNI-ները լավ են աշխատում, բացառությամբ Kube-OVN-ի և Kube-Router-ի: Kube-Router-ը նույնպես չկարողացավ հայտնաբերել MTU-ն, ես փաստաթղթերում որևէ տեղ այն կարգավորելու միջոց չգտա (այստեղ հարցումը բաց է այս թեմայով):

Ռեսուրսների սպառման առումով, Cilium-ը դեռ օգտագործում է ավելի շատ օպերատիվ հիշողություն, քան մյուսները, բայց արտադրողը ակնհայտորեն թիրախավորում է մեծ կլաստերները, ինչը ակնհայտորեն նույնը չէ, ինչ երեք հանգույցների կլաստերի վրա փորձարկումը: Kube-OVN-ը նույնպես սպառում է CPU-ի և RAM-ի շատ ռեսուրսներ, սակայն այն երիտասարդ CNI է, որը հիմնված է Open vSwitch-ի վրա (ինչպես Antrea-ն, այն ավելի լավ է աշխատում և ավելի քիչ սպառում):

Բոլորը, բացի Flannel-ից, ունեն ցանցային քաղաքականություն: Շատ հավանական է, որ նա երբեք չի աջակցի նրանց, քանի որ նպատակն ավելի պարզ է, քան շոգեխաշած շաղգամը՝ որքան թեթև, այնքան լավ։

Բացի այդ, ի թիվս այլ բաների, գաղտնագրման կատարումը զարմանալի է: Calico-ն ամենահին CNI-ներից մեկն է, սակայն գաղտնագրումն ավելացվել է ընդամենը մի քանի շաբաթ առաջ: Նրանք IPsec-ի փոխարեն ընտրեցին wireguard-ը, և պարզ ասած, այն աշխատում է հիանալի և զարմանալի՝ ամբողջովին խավարելով այլ CNI-ները թեստավորման այս մասում: Իհարկե, ռեսուրսների սպառումն ավելանում է գաղտնագրման շնորհիվ, բայց ձեռք բերված թողունակությունը արժե այն (Calico-ն վեց անգամ բարելավում է գաղտնագրման թեստում՝ համեմատած Cilium-ի հետ, որը երկրորդ տեղում է): Ավելին, Calico-ն կլաստերի մեջ տեղակայելուց հետո ցանկացած պահի կարող եք միացնել wireguard-ը, ինչպես նաև կարող եք կարճ ժամանակով կամ ընդմիշտ անջատել այն, եթե ցանկանում եք: Այնուամենայնիվ, դա աներևակայելի հարմար է: Հիշեցնում ենք ձեզ, որ Calico-ն ներկայումս ավտոմատ կերպով չի հայտնաբերում MTU-ն (այս հնարավորությունը նախատեսված է ապագա տարբերակների համար), այնպես որ համոզվեք, որ կարգավորեք MTU-ն, եթե ձեր ցանցն աջակցում է Jumbo Frames-ին (MTU 9000):

Ի թիվս այլ բաների, նշեք, որ Cilium-ը կարող է գաղտնագրել երթևեկությունը կլաստերային հանգույցների միջև (և ոչ միայն Pods-ի միջև), ինչը կարող է շատ կարևոր լինել հանրային կլաստերային հանգույցների համար:

Որպես եզրակացություն, ես առաջարկում եմ հետևյալ օգտագործման դեպքերը.

  • Պետք է CNI շատ փոքր կլաստերի համար, ԿԱՄ ես անվտանգության կարիք չունեմ: հետ աշխատել Ֆլանել, ամենաթեթև և կայուն CNI (նա նաև ամենահիններից մեկն է, ըստ լեգենդի նա հորինել է Homo Kubernautus-ը կամ Homo Contaitorus-ը։) Ձեզ նույնպես կարող է հետաքրքրել ամենահնարամիտ նախագիծը k3-ականներ, ստուգեք
  • Պետք է CNI կանոնավոր կլաստերի համար: Calico- ն - ձեր ընտրությունը, բայց անհրաժեշտության դեպքում մի մոռացեք կարգավորել MTU-ն: Դուք կարող եք հեշտությամբ և բնականաբար խաղալ ցանցային քաղաքականության հետ, միացնել և անջատել գաղտնագրումը և այլն:
  • Անհրաժեշտ է CNI (շատ) լայնածավալ կլաստերի համարԴե, թեստը ցույց չի տալիս մեծ կլաստերների վարքագիծը, ես ուրախ կլինեմ թեստեր անցկացնել, բայց մենք չունենք հարյուրավոր սերվերներ 10 Գբիտ/վրկ կապով։ Այսպիսով, լավագույն տարբերակը ձեր հանգույցների վրա փոփոխված թեստ կատարելն է, գոնե Calico-ի և Cilium-ի հետ:

Source: www.habr.com

Добавить комментарий