Senk rate lè w ap deplwaye premye aplikasyon an sou Kubernetes

Senk rate lè w ap deplwaye premye aplikasyon an sou KubernetesEchwe pa Aris Dreamer

Anpil moun panse ke li se ase yo transfere aplikasyon an nan Kubernetes (swa lè l sèvi avèk Helm oswa manyèlman) - epi pral gen kontantman. Men, se pa tout bagay ki senp konsa.

Ekip Mail.ru Cloud Solutions tradui yon atik pa enjenyè DevOps Julian Gindy. Li di ki pyèj konpayi li te rankontre pandan pwosesis migrasyon an pou ou pa mache sou menm rato a.

Premye etap: Mete kanpe Demann Pod ak Limit

Ann kòmanse pa mete yon anviwònman pwòp kote gous nou yo pral kouri. Kubernetes se gwo nan orè pod ak failover. Men, li te tounen soti ke orè a pafwa pa ka mete yon gous si li difisil pou estime konbyen resous li bezwen pou travay avèk siksè. Sa a se kote demann pou resous ak limit parèt. Gen anpil deba sou pi bon apwòch pou tabli demann ak limit. Pafwa li sanble ke sa a se reyèlman plis nan yon atizay pase yon syans. Men apwòch nou an.

Pod demann se valè prensipal ki itilize pa orè a pou mete gous la nan fason optimal.

Nan Dokiman Kubernetes: Etap filtre a defini yon seri nœuds kote yo ka pwograme yon Pod. Pou egzanp, filtè PodFitsResources tcheke pou wè si yon node gen ase resous pou satisfè demann resous espesifik nan yon gous.

Nou itilize demann aplikasyon yo yon fason pou nou ka estime konbyen resous an reyalite Aplikasyon an bezwen li pou fonksyone byen. Nan fason sa a orè a ka realistikman mete nœuds yo. Okòmansman, nou te vle egzamine demann pou asire ase resous pou chak Pod, men nou te remake tan orè a te ogmante anpil, epi kèk Pods pa t pwograme nèt, kòmsi pa te gen okenn demann resous pou yo.

Nan ka sa a, pwogramè a ta souvan "peze" gous yo epi yo pa kapab repwograme yo paske avyon kontwòl la pa te gen okenn lide ki kantite resous aplikasyon an ta bezwen, ki se yon eleman kle nan algorithm nan orè.

Limit gous se yon limit ki pi klè pou yon gous. Li reprezante kantite maksimòm resous ke gwoup la pral asiyen nan veso a.

Ankò, soti nan dokiman ofisyèl yo: Si yon veso gen yon limit memwa 4 GiB, Lè sa a, kubelet la (ak egzekite veso a) ap aplike li. Ègzekutabl la anpeche veso a itilize plis pase limit resous espesifye a. Pa egzanp, lè yon pwosesis nan yon veso ap eseye sèvi ak plis pase kantite memwa pèmèt, nwayo sistèm lan mete fen nan pwosesis la ak yon erè "soti nan memwa" (OOM).

Yon veso ka toujou itilize plis resous pase demann resous la espesifye, men li pa janm ka itilize plis pase limit la. Valè sa a difisil pou mete kòrèkteman, men li trè enpòtan.

Idealman, nou vle egzijans resous yon gous yo chanje pandan sik lavi yon pwosesis san yo pa entèfere ak lòt pwosesis nan sistèm nan - sa a se objektif pou fikse limit.

Malerezman, mwen pa ka bay enstriksyon espesifik sou ki valè yo mete, men nou menm nou respekte règ sa yo:

  1. Sèvi ak yon zouti tès chaj, nou simulation yon nivo de baz nan trafik epi obsève itilizasyon resous gous (memwa ak processeur).
  2. Mete demann gous yo nan yon valè abitrèman ki ba (ak yon limit resous apeprè 5 fwa valè demann lan) epi obsève. Lè demann yo nan yon nivo twò ba, pwosesis la pa ka kòmanse, souvan sa ki lakòz erè ekzekisyon Go kripte.

Mwen remake ke pi wo limit resous fè orè pi difisil paske gous la bezwen yon ne sib ak ase resous ki disponib.

Imajine yon sitiyasyon kote ou gen yon sèvè entènèt ki lejè ak yon limit resous trè wo, tankou 4 GB memwa. Pwosesis sa a ap gen anpil chans bezwen pou yo echèl orizontal, epi chak nouvo gous ap bezwen pwograme sou yon ne ki gen omwen 4 GB memwa ki disponib. Si pa gen okenn nœud sa a, gwoup la dwe prezante yon nouvo nœud pou trete gous sa a, sa ki ka pran kèk tan. Li enpòtan pou reyalize yon diferans minimòm ant demann resous yo ak limit pou asire dekale rapid ak lis.

Etap De: Mete kanpe Liveness ak Preparasyon Tès

Sa a se yon lòt sijè sibtil ki souvan diskite nan kominote Kubernetes la. Li enpòtan pou w gen yon bon konpreyansyon sou Liveness ak tès Preparasyon yo paske yo bay yon mekanis pou operasyon ki estab nan lojisyèl an epi minimize D '. Sepandan, yo ka seryezman afekte pèfòmans aplikasyon w lan si yo pa configuré kòrèkteman. Anba a se yon rezime de sa tou de echantiyon yo ye.

Lavi montre si veso a ap kouri. Si li echwe, kubelet la touye veso a epi politik rekòmanse a pèmèt li. Si veso a pa ekipe ak yon Sond Liveness, Lè sa a, eta default la pral reyisi - jan sa endike nan Dokiman Kubernetes.

Sond Liveness yo ta dwe bon mache, sa vle di pa konsome anpil resous, paske yo kouri souvan epi yo ta dwe enfòme Kubernetes ke aplikasyon an ap kouri.

Si ou mete opsyon pou kouri chak segonn, sa pral ajoute 1 demann pou chak segonn, kidonk ou dwe konnen resous adisyonèl yo pral mande pou trete trafik sa a.

Nan konpayi nou an, tès Liveness teste eleman debaz yo nan yon aplikasyon, menm si done yo (pa egzanp, ki soti nan yon baz done aleka oswa kachèt) pa konplètman disponib.

Nou te mete yon pwen final "sante" nan aplikasyon yo ki tou senpleman retounen yon kòd repons 200. Sa a se yon endikatè ke pwosesis la ap kouri epi li kapab jere demann (men se pa trafik ankò).

Eseye Preparasyon pou endike si veso a pare pou sèvi demann yo. Si sonde preparasyon an echwe, kontwolè pwen final la retire adrès IP gous la nan pwen final tout sèvis ki matche gous la. Sa a se tou deklare nan dokiman Kubernetes la.

Sond preparasyon yo konsome plis resous, paske yo dwe frape backend la nan yon fason pou montre ke aplikasyon an pare pou aksepte demann.

Gen anpil deba nan kominote a sou si wi ou non pou jwenn aksè nan baz done a dirèkteman. Lè nou konsidere tèt yo (chèk yo souvan, men yo ka kontwole), nou te deside ke pou kèk aplikasyon, preparasyon pou sèvi trafik la sèlman apre yo fin tcheke ke dosye yo retounen nan baz done a. Esè preparasyon ki byen fèt yo te asire pi wo nivo disponiblite yo epi yo elimine tan yo pandan deplwaman.

Si w deside fè rechèch sou baz done a pou teste aplikasyon w lan pare, asire w ke li bon mache ke posib. Ann pran demann sa a:

SELECT small_item FROM table LIMIT 1

Men yon egzanp sou fason nou konfigirasyon de valè sa yo nan Kubernetes:

livenessProbe: 
 httpGet:   
   path: /api/liveness    
   port: http 
readinessProbe:  
 httpGet:    
   path: /api/readiness    
   port: http  periodSeconds: 2

Ou ka ajoute kèk opsyon konfigirasyon adisyonèl:

  • initialDelaySeconds - konbyen segonn ki pral pase ant lansman veso a ak kòmansman anlanse sond yo.
  • periodSeconds — entèval ap tann ant echantiyon kouri.
  • timeoutSeconds — kantite segonn apre yo konsidere gous la kòm ijans. Delè nòmal.
  • failureThreshold se kantite echèk tès yo anvan yo voye yon siyal rekòmanse nan gous la.
  • successThreshold se kantite esè ki gen siksè anvan gous la tranzisyon nan eta pare a (apre yon echèk lè gous la kòmanse oswa refè).

Twazyèm etap: Mete Règ Rezo Default Pod la

Kubernetes gen yon topografi rezo "plat", pa default tout gous kominike dirèkteman youn ak lòt. Nan kèk ka sa a pa dezirab.

Yon pwoblèm sekirite potansyèl se ke yon atakè ka itilize yon sèl aplikasyon vilnerab pou voye trafik nan tout gous sou rezo a. Menm jan nan anpil domèn sekirite, prensip pi piti privilèj aplike isit la. Idealman, règleman rezo yo ta dwe endike klèman ki koneksyon ant gous yo pèmèt ak kilès ki pa.

Pou egzanp, sa ki annapre yo se yon règleman senp ki refize tout trafik fèk ap rantre pou yon espas non patikilye:

---
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:  
 name: default-deny-ingress
spec:  
 podSelector: {}  
 policyTypes:  
   - Ingress

Vizyalizasyon konfigirasyon sa a:

Senk rate lè w ap deplwaye premye aplikasyon an sou Kubernetes
(https://miro.medium.com/max/875/1*-eiVw43azgzYzyN1th7cZg.gif)
Plis detay isit la.

Etap Kat: Konpòtman Custom ak Hooks ak Init Containers

Youn nan objektif prensipal nou yo se te bay deplwaman nan Kubernetes san D' pou devlopè yo. Sa a se difisil paske gen anpil opsyon pou fèmen aplikasyon yo ak divilge resous yo itilize yo.

Difikilte patikilye leve ak Nginx. Nou remake ke lè deplwaye Pods sa yo nan sekans, koneksyon aktif yo te koupe anvan yo konplete avèk siksè.

Apre rechèch vaste sou entènèt la, li te tounen soti ke Kubernetes pa rete tann pou koneksyon Nginx yo fin itilize tèt yo anvan fèmen gous la. Avèk èd zen an pre-sispann, nou aplike fonksyonalite sa yo ak konplètman debarase m de tan an:

lifecycle: 
 preStop:
   exec:
     command: ["/usr/local/bin/nginx-killer.sh"]

Men, nginx-killer.sh:

#!/bin/bash
sleep 3
PID=$(cat /run/nginx.pid)
nginx -s quit
while [ -d /proc/$PID ]; do
   echo "Waiting while shutting down nginx..."
   sleep 10
done

Yon lòt paradigm trè itil se itilizasyon resipyan init pou okipe lansman aplikasyon espesifik yo. Sa a itil espesyalman si ou gen yon pwosesis migrasyon baz done ki gen anpil resous ki dwe kouri anvan aplikasyon an kòmanse. Ou kapab tou presize yon limit resous ki pi wo pou pwosesis sa a san yo pa mete yon limit konsa pou aplikasyon prensipal la.

Yon lòt konplo komen se jwenn aksè nan sekrè nan veso init la, ki bay kalifikasyon sa yo nan modil prensipal la, ki anpeche aksè san otorizasyon nan sekrè nan modil aplikasyon prensipal la tèt li.

Kòm dabitid, yon quote soti nan dokiman an: init kontenè yo kouri san danje kòd itilizatè oswa sèvis piblik ki ta ka konpwomèt sekirite imaj veso aplikasyon an. Lè w kenbe zouti ki pa nesesè yo separe, ou limite sifas atak imaj veso aplikasyon an.

Etap senk: Konfigirasyon Kernel

Finalman, ann pale sou yon teknik ki pi avanse.

Kubernetes se yon platfòm trè fleksib ki pèmèt ou kouri chaj travay nenpòt kòman ou wè anfòm. Nou gen yon kantite aplikasyon trè efikas ki gen anpil resous entansif. Apre nou te fin fè anpil tès chaj, nou te jwenn ke youn nan aplikasyon yo te gen yon tan difisil pou kenbe ak chaj trafik yo te espere lè paramèt Kubernetes yo te anvigè.

Sepandan, Kubernetes pèmèt ou kouri yon veso privilejye ki sèlman chanje paramèt nwayo pou yon gous espesifik. Men sa nou itilize pou chanje kantite maksimòm koneksyon ouvè:

initContainers:
  - name: sysctl
     image: alpine:3.10
     securityContext:
         privileged: true
      command: ['sh', '-c', "sysctl -w net.core.somaxconn=32768"]

Sa a se yon teknik ki pi avanse ki souvan pa nesesè. Men, si aplikasyon w lan ap konbat pou fè fas ak yon chaj lou, ou ka eseye ajiste kèk nan paramèt sa yo. Plis enfòmasyon sou pwosesis sa a ak anviwònman diferan valè - kòm toujou nan dokiman ofisyèl yo.

Nan konklizyon

Pandan ke Kubernetes ka sanble tankou yon solisyon ki pa nan bwat la, gen kèk etap kle ki dwe pran pou kenbe aplikasyon yo mache san pwoblèm.

Pandan tout migrasyon an nan Kubernetes, li enpòtan pou swiv "sik tès chaj la": kouri aplikasyon an, teste li anba chaj, obsève mezi yo ak konpòtman dekale, ajiste konfigirasyon an ki baze sou done sa a, Lè sa a, repete sik sa a ankò.

Fè reyalis sou trafik espere epi eseye ale pi lwen pase li pou wè ki eleman kraze an premye. Avèk apwòch iteratif sa a, sèlman kèk nan rekòmandasyon ki nan lis yo ka ase pou reyalize siksè. Oswa li ka mande plis personnalisation apwofondi.

Toujou poze tèt ou kesyon sa yo:

  1. Konbyen resous aplikasyon yo konsome epi ki jan kantite lajan sa a pral chanje?
  2. Ki egzijans reyèl dekale yo? Konbyen trafik aplikasyon an ap okipe an mwayèn? E trafik pik?
  3. Konbyen fwa sèvis la pral bezwen ogmante? Konbyen rapidman nouvo gous yo bezwen kanpe ak fonksyone pou resevwa trafik?
  4. Ki jan grasye gous fèmen? Èske li nesesè nan tout? Èske li posib pou reyalize deplwaman san D'?
  5. Ki jan pou misyon pou minimize risk sekirite ak limite domaj nan nenpòt gous konpwomèt? Èske gen nenpòt sèvis ki gen otorizasyon oswa aksè ke yo pa bezwen?

Kubernetes bay yon platfòm enkwayab ki pèmèt ou sèvi ak pi bon pratik pou deplwaye plizyè milye sèvis nan yon gwoup. Sepandan, tout aplikasyon yo diferan. Pafwa aplikasyon mande yon ti kras plis travay.

Erezman, Kubernetes bay anviwònman ki nesesè yo reyalize tout objektif teknik yo. Lè w itilize yon konbinezon de demann resous ak limit, sond Liveness ak Preparasyon, kontenè init, politik rezo, ak ajisteman nwayo koutim, ou ka reyalize pèfòmans segondè ansanm ak tolerans fay ak évolutivité rapid.

Ki lòt bagay pou li:

  1. Pi bon pratik ak pi bon pratik pou kouri kontenè ak Kubernetes nan anviwònman pwodiksyon.
  2. 90+ Zouti itil pou Kubernetes: Deplwaman, Jesyon, Siveyans, Sekirite ak plis ankò.
  3. Chanèl nou an alantou Kubernetes nan Telegram.

Sous: www.habr.com

Add nouvo kòmantè