Referans konsomasyon CPU pou Istio ak Linkerd

Referans konsomasyon CPU pou Istio ak Linkerd

Entwodiksyon

Nou nan Shopify te kòmanse deplwaye Istio kòm yon may sèvis. Nan prensip, tout bagay anfòm, eksepte pou yon sèl bagay: li chè.

В pibliye referans pou Istio li di:

Avèk Istio 1.1, prokurasyon an konsome apeprè 0,6 vCPU (nwayo vityèl) pou chak 1000 demann pou chak segonn.

Pou premye rejyon an nan may sèvis la (2 proxy sou chak bò koneksyon an), nou pral gen 1200 nwayo jis pou prokurasyon an, nan yon pousantaj de yon milyon demann pou chak segonn. Dapre kalkilatris pri Google la, li travay apeprè $ 40 / mwa / nwayo pou konfigirasyon n1-standard-64, sa vle di, rejyon sa a sèlman ap koute nou plis pase 50 mil dola pa mwa pou 1 milyon demann pa segonn.

Ivan Sim (Ivan Sim) vizyèlman konpare reta sèvis may ane pase a e li te pwomèt menm bagay la pou memwa ak processeur, men li pa t mache:

Aparamman, values-istio-test.yaml pral seryezman ogmante demann CPU. Si mwen te fè matematik mwen kòrèkteman, ou bezwen apeprè 24 nwayo CPU pou panèl kontwòl la ak 0,5 CPU pou chak proxy. Mwen pa gen sa anpil. Mwen pral repete tès yo lè yo jwenn plis resous pou mwen.

Mwen te vle wè pou tèt mwen ki jan pèfòmans Istio a sanble ak yon lòt may sèvis sous louvri: Linkerd.

Sèvis enstalasyon may

Premye a tout, mwen enstale li nan yon gwoup supergloo:

$ 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!

Mwen te itilize SuperGloo paske li fè bootstrapping may sèvis la pi fasil. Mwen pat oblije fè anpil bagay. Nou pa sèvi ak SuperGloo nan pwodiksyon, men li se ideyal pou yon travay konsa. Mwen te oblije itilize literalman yon koup nan kòmandman pou chak may sèvis. Mwen te itilize de grap pou izòlman - youn chak pou Istio ak Linkerd.

Eksperyans lan te fèt sou Google Kubernetes Engine. Mwen te itilize Kubernetes 1.12.7-gke.7 ak yon pisin nan nœuds n1-standard-4 ak dechèl otomatik ne (minimòm 4, maksimòm 16).

Lè sa a, mwen enstale tou de sèvis may soti nan liy lan lòd.

Premye Linkerd:

$ 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 |
+---------+--------------+---------+---------------------------+

Lè sa a, 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      |
+---------+------------+---------+---------------------------+

Aksidan-bouk la te pran kèk minit, ak Lè sa a, panno kontwòl yo estabilize.

(Remak: SuperGloo sèlman sipòte Istio 1.0.x pou kounye a. Mwen repete eksperyans lan ak Istio 1.1.3, men pa t remake okenn diferans aparan.)

Mete kanpe Istio Otomatik Deplwaman

Pou fè Istio enstale sidecar Envoy la, nou itilize sidecar injector - MutatingAdmissionWebhook. Nou pa pral pale sou li nan atik sa a. Kite m 'jis di ke sa a se yon kontwolè ki kontwole aksè nan tout nouvo gous ak dinamik ajoute yon sidecar ak initContainer, ki responsab pou travay. iptables.

Nou nan Shopify te ekri pwòp kontwolè aksè nou an pou aplike sidecars, men pou referans sa a mwen te itilize kontwolè ki vini ak Istio. Kontwolè a enjekte sidecars pa default lè gen yon chemen kout nan espas non an 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

Mete kanpe otomatik deplwaman Linkerd

Pou mete kanpe Linkerd sidecar embedding, nou itilize anotasyon (mwen te ajoute yo manyèlman atravè 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 Fault Tolerance Simulator

Nou bati yon similatè tolerans fòt ki rele Istio pou fè eksperyans ak trafik inik nan Shopify. Nou te bezwen yon zouti pou kreye yon topoloji koutim ki ta reprezante yon pòsyon espesifik nan graf sèvis nou an, dinamikman configuré pou modèl chaj travay espesifik yo.

Enfrastrikti Shopify la anba gwo chaj pandan lavant flash. An menm tan an, Shopify rekòmande vandè yo kenbe lavant sa yo pi souvan. Gwo kliyan pafwa avèti sou yon vant flash te planifye. Gen lòt ki mennen yo san atann pou nou nenpòt ki lè nan jounen an oswa nan mitan lannwit.

Nou te vle similatè rezistans nou an pou modèl workflows ki koresponn ak topoloji ak chaj travay ki te akable enfrastrikti Shopify nan tan lontan an. Objektif prensipal itilize yon may sèvis se ke nou bezwen fyab ak tolerans fay nan nivo rezo a, epi li enpòtan pou nou ke may sèvis la efektivman fè fas ak chaj ki te deja deranje sèvis yo.

Nan kè a nan similatè tolerans fay la se yon ne travayè, ki aji kòm yon ne sèvis may. Nœud travayè a ka konfigirasyon estatik nan demaraj oswa dinamik atravè yon API REST. Nou itilize konfigirasyon dinamik nan nœuds travayè yo pou kreye workflows nan fòm tès regresyon.

Men yon egzanp nan yon pwosesis konsa:

  • Nou lanse 10 serveurs kòm bar sèvis ki retounen yon repons 200/OK apre 100 ms.
  • Nou lanse 10 kliyan - chak voye 100 demann pou chak segonn bar.
  • Chak 10 segonn nou retire 1 sèvè epi kontwole erè 5xx sou kliyan an.

Nan fen workflow la, nou egzamine mòso bwa yo ak mezi yo epi tcheke si tès la te pase. Sa a se fason nou aprann sou pèfòmans nan may sèvis nou an epi fè yon tès regresyon teste sipozisyon nou yo sou tolerans fay.

(Remak: Nou ap panse sou apwovizyone louvri similatè tolerans fay Istio, men nou poko pare pou fè sa.)

Istio simulateur tolerans fòt pou sèvis may referans

Nou ap mete plizyè nœuds k ap travay nan similatè a:

  • irs-client-loadgen: 3 kopi ki voye 100 demann pa segonn pou chak irs-client.
  • irs-client: 3 kopi ki resevwa demann lan, tann 100ms epi voye demann lan bay irs-server.
  • irs-server: 3 kopi ki retounen 200/OK apre 100 ms.

Avèk konfigirasyon sa a, nou ka mezire yon sikilasyon ki estab ant 9 pwen final. Sidecars nan irs-client-loadgen и irs-server resevwa 100 demann pa segonn, epi irs-client — 200 (ap fèk ap rantre ak sòtan).

Nou swiv itilizasyon resous yo DataDogpaske nou pa gen yon grap Prometheus.

Jwenn

Panno kontwòl

Premyèman, nou egzamine konsomasyon CPU a.

Referans konsomasyon CPU pou Istio ak Linkerd
Linkerd kontwòl panèl ~ 22 millicore

Referans konsomasyon CPU pou Istio ak Linkerd
Istio kontwòl panèl: ~ 750 millicore

Panèl kontwòl Istio itilize apeprè 35 fwa plis resous CPUpase Linkerd. Natirèlman, tout bagay enstale pa default, ak istio-telemetry konsome yon anpil nan resous processeur isit la (li ka enfim pa enfim kèk fonksyon). Si nou retire eleman sa a, nou toujou jwenn plis pase 100 millicores, sa vle di 4 fwa plispase Linkerd.

Sidecar proxy

Lè sa a, nou teste itilizasyon yon prokurasyon. Ta dwe gen yon relasyon lineyè ak kantite demann, men pou chak sidecar gen kèk anlè ki afekte koub la.

Referans konsomasyon CPU pou Istio ak Linkerd
Linkerd: ~ 100 millicores pou irs-client, ~ 50 millicores pou irs-client-loadgen

Rezilta yo sanble lojik, paske proxy kliyan an resevwa de fwa plis trafik pase proxy loadgen a: pou chak demann sòtan soti nan loadgen, kliyan gen yon sèl fèk ap rantre ak yon sèl sòtan.

Referans konsomasyon CPU pou Istio ak Linkerd
Istio/Envoy: ~155 millicores pou irs-client, ~75 millicores pou irs-client-loadgen

Nou wè rezilta menm jan an pou Istio sidecars.

Men, an jeneral, proxy Istio/Envoy konsome apeprè 50% plis resous CPUpase Linkerd.

Nou wè menm konplo a sou bò sèvè a:

Referans konsomasyon CPU pou Istio ak Linkerd
Linkerd: ~ 50 millicore pou irs-sèvè

Referans konsomasyon CPU pou Istio ak Linkerd
Istio/Envoy: ~80 millicore pou irs-sèvè

Sou bò sèvè, sidecar Istio/Envoy konsome apeprè 60% plis resous CPUpase Linkerd.

Konklizyon

Prokurasyon Istio Envoy la konsome 50% plis CPU pase Linkerd sou kantite travay simulation nou an. Panèl kontwòl Linkerd la konsome anpil mwens resous pase Istio, espesyalman pou eleman debaz yo.

Nou toujou ap reflechi sou fason pou diminye depans sa yo. Si ou gen lide, tanpri pataje!

Sous: www.habr.com

Add nouvo kòmantè