Entwodiksyon
Nou nan
В
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 (
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:
Sèvis enstalasyon may
Premye a tout, mwen enstale li nan yon gwoup
$ 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
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 repons200/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 chakirs-client
.irs-client
: 3 kopi ki resevwa demann lan, tann 100ms epi voye demann lan bayirs-server
.irs-server
: 3 kopi ki retounen200/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
Jwenn
Panno kontwòl
Premyèman, nou egzamine konsomasyon CPU a.
Linkerd kontwòl panèl ~ 22 millicore
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.
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.
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:
Linkerd: ~ 50 millicore pou irs-sèvè
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