Kuberneteses kasutatavad deploy strateegiad: rolling, recreate, blue/green, canary, dark (A/B testimine)

MĂ€rkus tĂ”lkes: See ĂŒlevaatlik materjal Weaveworksilt tutvustab kĂ”ige populaarsemaid rakenduste vĂ€ljaandmise strateegiaid ja selgitab, kuidas rakendada kĂ”ige arenenumaid neist Kubernetesi operaatori Flaggeriga. See on kirjutatud lihtsas keeles ja sisaldab visuaalseid skeeme, mis aitavad mĂ”ista teemat isegi algajatel inseneridel.

Kuberneteses kasutatavad deploy strateegiad: rolling, recreate, blue/green, canary, dark (A/B testimine)
Skeem on pĂ€rit teisest ĂŒlevaatest vĂ€ljandusstrateegiate kohta, mille on koostanud Container Solutions

Üks suurimaid probleeme tĂ€napĂ€eva pilvaseente rakenduste arendamisel on vĂ€ljaande kiirus. Mikroteenuste lĂ€henemisviisis töötavad arendajad juba tĂ€iesti modulaarsete rakendustega ja kavandavad neid, vĂ”imaldades erinevatele meeskondadele samal ajal koodi kirjutada ja rakenduses muudatusi teha.

LĂŒhematel ja sagedasematel vĂ€ljaannetel on jĂ€rgmised eelised:

  • LĂŒhendatakse turule jĂ”udmise aega.
  • Uued funktsioonid jĂ”uavad kiiremini kasutajateni.
  • Kasutajate tagasiside jĂ”uab kiiremini arendajate meeskonnani. See tĂ€hendab, et meeskond saab funktsioone tĂ€iendada ja probleeme kiiremini lahendada.
  • Arendajate motivatsioon tĂ”useb: rohkemate funktsioonide arendamisel on huvitavam töötada.


Aga vÀljaannete sageduse suurenedes tÔuseb ka risk, et see vÔib negatiivselt mÔjutada rakenduse usaldusvÀÀrsust vÔi kasutajakogemust. Just seetÔttu on tegevus- ja DevOps-meeskondade jaoks oluline ehitada protsessid ja hallata vÀljaandmisstrateegiaid nii, et minimeerida riske tootele ja kasutajatele. (Lisainfot CI/CD töövoogude automatiseerimise kohta leiate siin.)

Selles publikatsioonis arutame erinevaid vÀljaandmisstrateegiaid Kubernetesis, sealhulgas jÀrk-jÀrgulisi vÀljaandeid ja arenenumaid meetodeid, nagu kanarivÀljaanded ja nende variatsioonid.

Juurutamisstrateegiad

On olemas mitmeid erinevaid vÀljaandmisstrateegiaid, mida saab kasutada sÔltuvalt eesmÀrgist. NÀiteks vÔite vajada muudatusi mingis keskkonnas edasiseks testimiseks, vÔi alagrupis kasutajatest/klientidest, vÔi vÔib olla vajalik teostada piiratud testimine kasutajate seas enne mÔne funktsiooni avalikustamist.

Rolling (jĂ€rkjĂ€rguline, â€žĂŒlesehitav“ vĂ€ljaanne)

See on Kubernetes'i standardne juurutamisstrateegia. See vahetab jĂ€rk-jĂ€rgult, ĂŒks haaval, vanade rakenduse versiooniga pod'id uute versiooniga pod'ide vastu - ilma klastris seisakut tekitamata.

Kuberneteses kasutatavad deploy strateegiad: rolling, recreate, blue/green, canary, dark (A/B testimine)

Kubernetes ootab, kuni uued pod'id on tööks valmis (kontrollides neid valmidustestidega), enne kui alustatakse vanade sulgemist. Kui tekib probleem, saab sellise jĂ€rkjĂ€rgulise uuendamise katkestada, peatamata kogu klastrit. YAML-failis, mis kirjeldab juurutamise tĂŒĂŒpi, asendab uus pilt vana:

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: awesomeapp
spec:
  replicas: 3
  template:
    metadata:
      labels:
        app: awesomeapp
    spec:
      containers:
        - name: awesomeapp
          image: imagerepo-user/awesomeapp:new
          ports:
            - containerPort: 8080

JÀrkjÀrgulise uuendamise parameetreid saab tÀpsustada maniifestifailis:

spec:
  replicas: 3
  strategy:
    type: RollingUpdate
    rollingUpdate:
       maxSurge: 25%
       maxUnavailable: 25%  
  template:
  ...

Recreate (uuesti loomine)

Selles kĂ”ige lihtsamas juurutamise tĂŒĂŒbis tapetakse vanad pod'id kĂ”ik korraga ja asendatakse uutega:

Kuberneteses kasutatavad deploy strateegiad: rolling, recreate, blue/green, canary, dark (A/B testimine)

Asjakohane maniifesteeritud nÀeb vÀlja ligikaudu nii:

spec:
  replicas: 3
  strategy:
    type: Recreate
  template:
  ...

Blue/Green (sinine/roheline juurutamine)

Sinise-kase juurutamise strateegia (mĂ”nikord nimetatakse seda ka punase/musta sĂŒsteemiks) hĂ”lmab vana (rohelise) ja uue (sinise) versiooni rakenduse samaaegset juurutamist. PĂ€rast mĂ”lema versiooni paigutamist saavad tavakasutajad juurdepÀÀsu rohelisele, samal ajal kui sinine on kĂ€tketud QA meeskonnale automaatsete testide lĂ€biviimiseks lĂ€bi eraldi teenuse vĂ”i otseportide suunamise:

Kuberneteses kasutatavad deploy strateegiad: rolling, recreate, blue/green, canary, dark (A/B testimine)

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: awesomeapp-02
spec:
  template:
    metadata:
      labels:
        app: awesomeapp
        version: "02"

PĂ€rast seda, kui sinine (uus) versioon on testitud ja selle release on heaks kiidetud, lĂŒlitatakse teenus sellele ĂŒle, samal ajal kui roheline (vana) suletakse:

apiVersion: v1
kind: Service
metadata:
  name: awesomeapp
spec:
  selector:
    app: awesomeapp
    version: "02"
...

Canary (kanaride juurutamine)

Kanari juurutamised on sarnased sinise-rohelise sĂŒsteemiga, kuid paremini hallatud ja kasutavad proportsionaalset jĂ€rkjĂ€rgulist lĂ€henemist. Sellesse tĂŒĂŒpi kuulub mitmeid erinevaid strateegiaid, sealhulgas „varjatud” kĂ€ivitamised ja A/B testimine.

Seda strateegiat rakendatakse, kui on vajalik testida uut funktsionaalsust, tavaliselt rakenduse tagapool. LĂ€henemise olemus seisneb kahe praktiliselt identse serveri loomises: ĂŒks teenindab peaaegu kĂ”iki kasutajaid, samas kui teine, uute funktsioonidega, teenindab vaid vĂ€ikest alagruppi kasutajatest, mille jĂ€rel vĂ”rreldakse nende töö tulemusi. Kui kĂ”ik lĂ€heb ladusalt, viiakse uus versioon jĂ€rk-jĂ€rgult kogu infrastruktuuri.

Kuigi seda strateegiat saab teostada ainult Kubernetes'e vahenditega, asendades vanad pod'id uute vastu, on palju mugavam ja lihtsam kasutada teenuste mesh'i nagu Istio.

NÀiteks vÔivad teil olla kaks erinevat manifesti Git'is: tavaline versioon sildiga 0.1.0 ja "kanaari" versioon sildiga 0.2.0. Muutes kaalu Istio virtuaalses vÀravas, saab hallata liikluse jaotust nende kahe deployment'i vahel:

Kuberneteses kasutatavad deploy strateegiad: rolling, recreate, blue/green, canary, dark (A/B testimine)

Samm-sammuline juhend kanaari deployment'ide rakendamiseks Istio abil leiate materjalist GitOps töövood Istio'ga. (MÀrkus tÔlke kohta.: Oleme samuti tÔlkinud materjali kanaari vÀljalaskmise kohta Istios siin.)

Kanaari deployment'id Weaveworks Flagger'iga

Weaveworks Flagger vÔimaldab hÔlpsasti ja tÔhusalt hallata kanaari vÀljalaskmisi.

Flagger automatiseerib nendega töötamise. See kasutab liikumise ja liikluse suunamise jaoks Istio vĂ”i AWS App Mesh'i ning tulemuste analĂŒĂŒsimiseks Prometheuse mÔÔdikuid. Lisaks saab kanaari deployment'ide analĂŒĂŒsi tĂ€iendada veebiluhtidega vastuvĂ”tu testide, koormustestide ja muude kontrollide lĂ€biviimiseks.

Kubernetes'i deployment'i ja vajadusel pod'ide horisontaalse skalimise (HPA) alusel loob Flagger objektide kogumeid (Kubernetes'i deployment'id, ClusterIP teenused ja Istio vĂ”i App Mesh'i virtuaalsed teenused) kanaari deployment'ide analĂŒĂŒside ja rakendamise jaoks:

Kuberneteses kasutatavad deploy strateegiad: rolling, recreate, blue/green, canary, dark (A/B testimine)

Rakendades juhtimistsĂŒklit (control loop), suunab Flagger jĂ€rk-jĂ€rgult liikluse kanaari serverile, samas mÔÔtes vĂ”tmenĂ€itajate, nĂ€iteks edukate HTTP-pĂ€ringute osakaalu, keskmise pĂ€ringu kestuse ja pod'ide tervise nĂ€itajaid. KPI (vĂ”tmenĂ€itajate) analĂŒĂŒsi pĂ”hjal kanaari osa kas tĂ”useb vĂ”i langeb, ning analĂŒĂŒsi tulemused avaldatakse Slackis. Selle protsessi kirjelduse ja demonstrooimis saate leida materjalist Progressive Delivery for App Mesh.

Kuberneteses kasutatavad deploy strateegiad: rolling, recreate, blue/green, canary, dark (A/B testimine)

Tume (peidetud) vÔi A/B-juhtimised

Peidetud juurdevĂ”tt on veel ĂŒks kanarbiku strateegia variatsioon (mille jaoks vĂ”ib Flagger samuti töötada). Erinevus peidetud ja kanarbiku juurdevĂ”tte vahel on see, et peidetud juurdevĂ”tt tegeleb esikĂŒljega, mitte tagakĂŒljega, nagu kanarbiku.

Teine nimi nendele juurdevÔttedele on A/B-testimine. Selle asemel, et avada uue funktsiooni juurdevÔtt kÔigile kasutajatele, pakutakse seda ainult piiratud osale neist. Tavaline on, et need kasutajad ei tea, et nad on esimesena testijad (seetÔttu ka termin "peidetud juurdevÔtt").

Funktsionaalsuse lĂŒlitite kaudu (feature toggles) ja teiste tööriistade abil saab jĂ€lgida, kuidas kasutajad uue funktsiooniga suhtlevad, kas see köidab neid vĂ”i peavad nad uut kasutajaliidest segaseks, ja muid mÔÔdikuid.

Kuberneteses kasutatavad deploy strateegiad: rolling, recreate, blue/green, canary, dark (A/B testimine)

Flagger ja A/B-juurdevÔtted

Lisaks kaalu pĂ”hjal suunamisele vĂ”ib Flagger samuti suunata kanarbiku serverisse liiklust sĂ”ltuvalt HTTP parameetritest. A/B-testimisel saab kasutada HTTP pealkirju vĂ”i kĂŒpsiseid teatud kasutajasegmendi suunamiseks. See on eriti tĂ”hus esikĂŒljel rakenduste puhul, mis nĂ”uavad seansi seotust serveriga (session affinity). TĂ€iendavat teavet leiate Flaggeri dokumentatsioonist.

Autor tÀnab Stefan Prodanit, Weaveworksi inseneri (ja Flaggeri looja), kÔikide nende hÀmmastavate juurutusskeemide eest.

P.S. tÔlkijalt

Lugege ka meie blogist:

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster