Ievads
Mes esam ieksa
Š
Izmantojot Istio 1.1, starpniekserveris patÄrÄ aptuveni 0,6 vCPU (virtuÄlos kodolus) uz 1000 pieprasÄ«jumiem sekundÄ.
PirmajÄ pakalpojumu tÄ«kla reÄ£ionÄ (2 starpniekserveri katrÄ savienojuma pusÄ) mums bÅ«s 1200 kodoli tikai starpniekserveram ar Ätrumu viens miljons pieprasÄ«jumu sekundÄ. SaskaÅÄ ar Google izmaksu kalkulatoru konfigurÄcijai tas ir aptuveni 40 ASV dolÄri mÄnesÄ«. n1-standard-64
, tas ir, Å”is reÄ£ions vien mums izmaksÄs vairÄk nekÄ 50 tÅ«kstoÅ”us dolÄru mÄnesÄ« par 1 miljonu pieprasÄ«jumu sekundÄ.
Ivans Sim (
AcÄ«mredzot vÄrtÄ«bas-istio-test.yaml nopietni palielinÄs CPU pieprasÄ«jumus. Ja esmu pareizi aprÄÄ·inÄjis, jums ir nepiecieÅ”ami aptuveni 24 CPU kodoli vadÄ«bas panelim un 0,5 CPU katram starpniekserveram. Man nav tik daudz. PÄrbaudes atkÄrtoÅ”u, kad man tiks pieŔķirti vairÄk lÄ«dzekļu.
Es gribÄju pats pÄrliecinÄties, cik Istio veiktspÄja ir lÄ«dzÄ«ga citam atvÄrtÄ pirmkoda pakalpojumu tÄ«klam:
Servisa tÄ«kla uzstÄdÄ«Å”ana
PirmkÄrt, es to instalÄju klasterÄ«
$ supergloo init
installing supergloo version 0.3.12
using chart uri https://storage.googleapis.com/supergloo-helm/charts/supergloo-0.3.12.tgz
configmap/sidecar-injection-resources created
serviceaccount/supergloo created
serviceaccount/discovery created
serviceaccount/mesh-discovery created
clusterrole.rbac.authorization.k8s.io/discovery created
clusterrole.rbac.authorization.k8s.io/mesh-discovery created
clusterrolebinding.rbac.authorization.k8s.io/supergloo-role-binding created
clusterrolebinding.rbac.authorization.k8s.io/discovery-role-binding created
clusterrolebinding.rbac.authorization.k8s.io/mesh-discovery-role-binding created
deployment.extensions/supergloo created
deployment.extensions/discovery created
deployment.extensions/mesh-discovery created
install successful!
Es izmantoju SuperGloo, jo tas ievÄrojami atvieglo pakalpojuma tÄ«kla sÄknÄÅ”anu. Man nebija daudz jÄdara. SuperGloo ražoÅ”anÄ neizmantojam, taÄu tas ir ideÄli piemÄrots Å”Ädam uzdevumam. Man bija burtiski jÄizmanto pÄris komandas katram pakalpojuma tÄ«klam. IzolÄcijai izmantoju divus klasterus - pa vienam Istio un Linkerd.
Eksperiments tika veikts Google Kubernetes Engine. Es izmantoju Kubernetes 1.12.7-gke.7
un mezglu kopums n1-standard-4
ar automÄtisku mezglu mÄrogoÅ”anu (minimums 4, maksimums 16).
PÄc tam es instalÄju abus pakalpojumu tÄ«klus no komandrindas.
PirmÄ saite:
$ supergloo install linkerd --name linkerd
+---------+--------------+---------+---------------------------+
| INSTALL | TYPE | STATUS | DETAILS |
+---------+--------------+---------+---------------------------+
| linkerd | Linkerd Mesh | Pending | enabled: true |
| | | | version: stable-2.3.0 |
| | | | namespace: linkerd |
| | | | mtls enabled: true |
| | | | auto inject enabled: true |
+---------+--------------+---------+---------------------------+
Tad Istio:
$ supergloo install istio --name istio --installation-namespace istio-system --mtls=true --auto-inject=true
+---------+------------+---------+---------------------------+
| INSTALL | TYPE | STATUS | DETAILS |
+---------+------------+---------+---------------------------+
| istio | Istio Mesh | Pending | enabled: true |
| | | | version: 1.0.6 |
| | | | namespace: istio-system |
| | | | mtls enabled: true |
| | | | auto inject enabled: true |
| | | | grafana enabled: true |
| | | | prometheus enabled: true |
| | | | jaeger enabled: true |
+---------+------------+---------+---------------------------+
AvÄrijas cilpa ilga dažas minÅ«tes, un tad vadÄ«bas paneļi stabilizÄjÄs.
(PiezÄ«me: SuperGloo pagaidÄm atbalsta tikai Istio 1.0.x. Es atkÄrtoju eksperimentu ar Istio 1.1.3, bet nepamanÄ«ju nekÄdu ievÄrojamu atŔķirÄ«bu.)
Istio automÄtiskÄs izvietoÅ”anas iestatÄ«Å”ana
Lai Istio uzstÄdÄ«tu blakusvÄÄ£a Envoy, mÄs izmantojam blakusvÄÄ£a inžektoru ā MutatingAdmissionWebhook
. Å ajÄ rakstÄ mÄs par to nerunÄsim. Ä»aujiet man tikai teikt, ka Å”is ir kontrolieris, kas uzrauga piekļuvi visiem jaunajiem podiem un dinamiski pievieno blakusvÄÄ£i un initContainer, kas ir atbildÄ«gs par uzdevumiem. iptables
.
MÄs, Shopify, uzrakstÄ«jÄm paÅ”i savu piekļuves kontrolieri, lai ieviestu blakusvÄÄ£us, taÄu Å”im etalonam es izmantoju kontrolieri, kas tiek piegÄdÄts kopÄ ar Istio. Kontrolieris pÄc noklusÄjuma ievada blakusvÄÄ£us, ja nosaukumu telpÄ ir saÄ«sne istio-injection: enabled
:
$ kubectl label namespace irs-client-dev istio-injection=enabled
namespace/irs-client-dev labeled
$ kubectl label namespace irs-server-dev istio-injection=enabled
namespace/irs-server-dev labeled
AutomÄtiskÄs Linkerd izvietoÅ”anas iestatÄ«Å”ana
Lai iestatÄ«tu Linkerd blakusvÄÄ£a iegulÅ”anu, mÄs izmantojam anotÄcijas (es pievienoju tÄs manuÄli, izmantojot kubectl edit
):
metadata:
annotations:
linkerd.io/inject: enabled
$ k edit ns irs-server-dev
namespace/irs-server-dev edited
$ k get ns irs-server-dev -o yaml
apiVersion: v1
kind: Namespace
metadata:
annotations:
linkerd.io/inject: enabled
name: irs-server-dev
spec:
finalizers:
- kubernetes
status:
phase: Active
Istio kļūdu tolerances simulators
MÄs izveidojÄm kļūdu tolerances simulatoru Istio, lai eksperimentÄtu ar Shopify unikÄlo trafiku. Mums bija nepiecieÅ”ams rÄ«ks, lai izveidotu pielÄgotu topoloÄ£iju, kas attÄlotu noteiktu mÅ«su pakalpojumu diagrammas daļu, kas dinamiski konfigurÄta, lai modelÄtu noteiktas darba slodzes.
Flash pÄrdoÅ”anas laikÄ Shopify infrastruktÅ«ra ir pakļauta lielai slodzei. TajÄ paÅ”Ä laikÄ Shopify
MÄs vÄlÄjÄmies, lai mÅ«su noturÄ«bas simulators modelÄtu darbplÅ«smas, kas atbilst topoloÄ£ijÄm un darba slodzÄm, kas iepriekÅ” ir pÄrslogojuÅ”as Shopify infrastruktÅ«ru. Servisa tÄ«kla izmantoÅ”anas galvenais mÄrÄ·is ir tas, ka mums ir nepiecieÅ”ama uzticamÄ«ba un kļūdu tolerance tÄ«kla lÄ«menÄ«, un mums ir svarÄ«gi, lai servisa tÄ«kls efektÄ«vi tiktu galÄ ar slodzÄm, kas iepriekÅ” traucÄja pakalpojumu darbÄ«bu.
Kļūdu pielaides simulatora centrÄ ir darbinieka mezgls, kas darbojas kÄ pakalpojuma tÄ«kla mezgls. Darbinieka mezglu var konfigurÄt statiski startÄÅ”anas laikÄ vai dinamiski, izmantojot REST API. MÄs izmantojam darbinieku mezglu dinamisko konfigurÄciju, lai izveidotu darbplÅ«smas regresijas testu veidÄ.
Å eit ir Å”Äda procesa piemÄrs:
- MÄs palaižam 10 serverus kÄ
bar
pakalpojumu, kas atgriež atbildi200/OK
pÄc 100 ms. - MÄs palaižam 10 klientus ā katrs nosÅ«ta 100 pieprasÄ«jumus sekundÄ
bar
. - Ik pÄc 10 sekundÄm mÄs noÅemam 1 serveri un pÄrraugÄm kļūdas
5xx
uz klientu.
DarbplÅ«smas beigÄs mÄs pÄrbaudÄm žurnÄlus un metriku un pÄrbaudÄm, vai pÄrbaude ir izturÄta. TÄdÄ veidÄ mÄs uzzinÄm par mÅ«su pakalpojumu tÄ«kla veiktspÄju un veicam regresijas testu, lai pÄrbaudÄ«tu mÅ«su pieÅÄmumus par kļūdu toleranci.
(PiezÄ«me: mÄs domÄjam par Istio defektu tolerances simulatora atklÄto avotu iegÅ«Å”anu, taÄu vÄl neesam gatavi to darÄ«t.)
Istio defektu tolerances simulators servisa tīkla etalonam
MÄs uzstÄdÄ«jÄm vairÄkus simulatora darba mezglus:
irs-client-loadgen
: 3 kopijas, kas nosÅ«ta 100 pieprasÄ«jumu sekundÄirs-client
.irs-client
: 3 kopijas, kas saÅem pieprasÄ«jumu, uzgaidiet 100 ms un pÄrsÅ«tiet pieprasÄ«jumu uzirs-server
.irs-server
: 3 replikas, kas atgriežas200/OK
pÄc 100 ms.
Izmantojot Å”o konfigurÄciju, mÄs varam izmÄrÄ«t stabilu satiksmes plÅ«smu starp 9 galapunktiem. BlakusvÄÄ£i iekÅ”Ä irs-client-loadgen
Šø irs-server
saÅemt 100 pieprasÄ«jumus sekundÄ, un irs-client
ā 200 (ienÄkoÅ”ie un izejoÅ”ie).
MÄs izsekojam resursu izmantoÅ”anu
rezultÄtus
Vadības paneļi
PirmkÄrt, mÄs pÄrbaudÄ«jÄm CPU patÄriÅu.
Linkerd vadības panelis ~22 milicore
Istio vadības panelis: ~750 milicore
Istio vadÄ«bas panelis izmanto aptuveni 35 reizes vairÄk CPU resursunekÄ Linkerds. Protams, viss ir instalÄts pÄc noklusÄjuma, un istio-telemetrija Å”eit patÄrÄ daudz procesora resursu (to var atspÄjot, atspÄjojot dažas funkcijas). Ja mÄs noÅemam Å”o komponentu, mÄs joprojÄm iegÅ«stam vairÄk nekÄ 100 milicores, tas ir 4 reizes vairÄknekÄ Linkerds.
BlakusvÄÄ£a starpniekserveris
PÄc tam mÄs pÄrbaudÄ«jÄm starpniekservera izmantoÅ”anu. JÄbÅ«t lineÄrai saistÄ«bai ar pieprasÄ«jumu skaitu, taÄu katrai blakusvÄÄ£im ir dažas pieskaitÄmÄs izmaksas, kas ietekmÄ lÄ«kni.
Linkerd: ~ 100 milicores irs-client, ~ 50 milicores irs-client-loadgen
RezultÄti izskatÄs loÄ£iski, jo klienta starpniekserveris saÅem divreiz vairÄk trafika nekÄ loadgen starpniekserveris: katram izejoÅ”ajam pieprasÄ«jumam no loadgen klientam ir viens ienÄkoÅ”ais un viens izejoÅ”ais.
Istio/Envoy: ~155 milicores irs-client, ~75 milicores irs-client-loadgen
LÄ«dzÄ«gus rezultÄtus redzam arÄ« Istio blakusvÄÄ£iem.
Bet vispÄr Istio/Envoy proxy patÄrÄ par aptuveni 50% vairÄk CPU resursunekÄ Linkerds.
MÄs redzam to paÅ”u shÄmu servera pusÄ:
Linkerd: ~50 milicore irs-serverim
Istio/Envoy: ~80 milicore irs-serverim
Servera pusÄ patÄrÄ blakusvÄÄ£is Istio/Envoy par aptuveni 60% vairÄk CPU resursunekÄ Linkerds.
SecinÄjums
Istio Envoy starpniekserveris patÄrÄ par 50+% vairÄk CPU nekÄ Linkerd mÅ«su simulÄtajÄ darba slodzÄ. Linkerd vadÄ«bas panelis patÄrÄ daudz mazÄk resursu nekÄ Istio, Ä«paÅ”i attiecÄ«bÄ uz galvenajiem komponentiem.
JoprojÄm domÄjam, kÄ Å”Ä«s izmaksas samazinÄt. Ja ir idejas, lÅ«dzu padalieties!
Avots: www.habr.com