Strategije implementacije u Kubernetesu: rolling, recreate, blue/green, canary, dark (A/B testiranje)

Napomena prevoda: Ovaj pregledni materijal iz Weaveworks uvodi u najpopularnije strategije implementacije aplikacija i objašnjava mogućnost realizacije najnaprednijih od njih uz pomoć Kubernetes operatora Flagger. Napisan je jednostavnim jezikom i sadrži ilustrativne dijagrame, što omogućava razumevanje i početnicima inženjerima.

Strategije implementacije u Kubernetesu: rolling, recreate, blue/green, canary, dark (A/B testiranje)
Dijagram preuzet iz drugog pregleda strategija implementacije, koji je napravljen u Container Solutions

Jedan od najvećih problema u razvoju cloud native aplikacija danas je ubrzanje izbacivanja. Uz mikroservisni pristup, programeri već rade s potpuno modularnim aplikacijama i projektuju ih, omogućavajući različitim timovima da istovremeno pišu kod i vrše izmene u aplikaciji.

Kraće i češće implementacije imaju sledeće prednosti:

  • Smanjuje se vreme do izlaska na tržište.
  • Nove funkcije brže dolaze do korisnika.
  • Povratne informacije korisnika brže stižu do tima programera. To znači da tim može brže dodavati funkcionalnosti i ispravljati probleme.
  • Povećava se moral programera: s većim brojem funkcija u razvoju, rad je zanimljiviji.


Ali povećanje učestalosti objavljivanja takođe povećava šanse za negativan uticaj na pouzdanost aplikacije ili korisničko iskustvo. Stoga je timovima za rad i DevOps važno da izgrade procese i upravljaju strategijama implementacije na način da minimiziraju rizik za proizvod i korisnike. (Saznajte više o automatizaciji CI/CD procesa možete ovdje.)

U ovoj publikaciji raspravljaćemo o različitim strategijama implementacije u Kubernetes-u, uključujući rolling implementacije i naprednije metode kao što su kanarinske (canary) implementacije i njihove varijante.

Strategije implementacije

Postoji nekoliko različitih tipova strategija implementacije koje se mogu koristiti u zavisnosti od cilja. Na primer, možda ćete želeti da izvršite izmene u određenoj okolini za dalja testiranja, ili u podskupini korisnika/klijenata, ili će biti potrebno izvršiti ograničeno testiranje na korisnicima pre nego što neka funkcionalnost postane javna.

Rolling (postepena, 'nakladna' implementacija)

To je standardna strategija implementacije u Kubernetesu. Ona postepeno, jedan za drugim, zamjenjuje podove sa starom verzijom aplikacije podovima sa novom verzijom — bez zastoja klastera.

Strategije implementacije u Kubernetesu: rolling, recreate, blue/green, canary, dark (A/B testiranje)

Kubernetes čeka da novi podovi postanu spremni za rad (provjeravajući ih uz pomoć readiness testova), prije nego što započne gašenje starih. Ako se pojavi problem, tako se primjenjivanje može prekinuti, a da se ne zaustavi cijeli klaster. U YAML datoteci koja opisuje tip implementacije, nova slika zamjenjuje staru sliku:

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

Parametre primjene možete pojasniti u manifest datoteci:

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

Recreate (ponovno kreiranje)

U ovom najjednostavnijem tipu implementacije, stari podovi se sve odjednom završavaju i zamjenjuju novima:

Strategije implementacije u Kubernetesu: rolling, recreate, blue/green, canary, dark (A/B testiranje)

Odgovarajući manifest izgleda otprilike ovako:

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

Blue/Green (plavo-zelene implementacije)

Strategija plavo-zelenog implementiranja (ponekad se još naziva red/black, tj. crveno/crno) predviđa simultano implementiranje stare (zelene) i nove (plave) verzije aplikacije. Nakon postavljanja obje verzije, obični korisnici imaju pristup zelenoj, dok je plava dostupna QA timu za automatizaciju testiranja putem posebne usluge ili direktnog propuštanja portova:

Strategije implementacije u Kubernetesu: rolling, recreate, blue/green, canary, dark (A/B testiranje)

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

Nakon što je plava (nova) verzija bila testirana i njen izdanje je odobreno, usluga se prebacuje na nju, a zelena (stara) se gasi:

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

Canary (kanarinske implementacije)

Kanarinske implementacije su slične plavo-zelenim, ali se bolje upravljaju i koriste progresivni postepeni pristup. Ovom tipu pripada nekoliko različitih strategija, uključujući „skrivene“ lansiranja i A/B testiranje.

Ova strategija se primenjuje kada je potrebno isprobati neku novu funkcionalnost, obično u pozadini aplikacije. Suština pristupa je da se kreiraju dva praktično identična servera: jedan servisira gotovo sve korisnike, dok drugi, sa novim funkcijama, servisira samo malu podgrupu korisnika, nakon čega se rezultati njihovog rada upoređuju. Ako sve prođe bez grešaka, nova verzija se postepeno uvodi u celu infrastrukturu.

Iako se ova strategija može realizovati isključivo putem Kubernetesa, zamenjujući stare pod-ove novima, mnogo je lakše i praktičnije koristiti service mesh poput Istio.

Na primer, možete imati dva različita manifesta u Gitu: običan sa oznakom 0.1.0 i "kanarinac" sa oznakom 0.2.0. Menjajući težine u manifestu virtuelnog gateway-a Istio, možete upravljati raspodelom saobraćaja između ova dva deployment-a:

Strategije implementacije u Kubernetesu: rolling, recreate, blue/green, canary, dark (A/B testiranje)

Korak po korak vodič za implementaciju kanarinskih deploy-ovanja uz Istio možete pronaći u materijalu GitOps Workflows with Istio. (Napomena za prijevod.: Takođe smo preveli materijal o kanarinskim postavkama u Istio ovdje.)

Kanarinske postavke sa Weaveworks Flagger

Weaveworks Flagger omogućava lako i efikasno upravljanje kanarinskim postavkama.

Flagger automatizuje rad s njima. Koristi Istio ili AWS App Mesh za usmeravanje i prebacivanje saobraćaja, kao i metrike Prometheus za analizu rezultata. Pored toga, analiza kanarinskih postavki može se dopuniti webhook-ovima za izvođenje prihvatnih (acceptance) testova, testova opterećenja i drugih vrsta provera.

Na osnovu Kubernetes deployment-a i, ako je potrebno, horizontalnog skaliranja pod-ova (HPA), Flagger kreira skupove objekata (Kubernetes deploy-amenti, ClusterIP servisi i virtuelni servisi Istio ili App Mesh) za analizu i implementaciju kanarinskih postavki:

Strategije implementacije u Kubernetesu: rolling, recreate, blue/green, canary, dark (A/B testiranje)

Implementirajući kontrolni sistem (control loop), Flagger postepeno prebacuje saobraćaj na kanarinski server, istovremeno mereći ključne pokazatelje performansi, kao što su udeo uspešnih HTTP zahteva, prosečno vreme zahteva i zdravlje pod-ova. Na osnovu analize KPI (ključnih pokazatelja uspešnosti), kanarinski deo ili raste ili se smanjuje, a rezultati analize se objavljuju u Slack-u. Opis i prikaz ovog procesa možete pronaći u materijalu Progressive Delivery for App Mesh.

Strategije implementacije u Kubernetesu: rolling, recreate, blue/green, canary, dark (A/B testiranje)

Tamno (skriveno) ili A/B raspoređivanje

Skriveno raspoređivanje je još jedna varijacija kanarinog pristupa (uz koji, usput, Flagger također može raditi). Razlika između skrivenog i kanarinog raspoređivanja je u tome što se skrivena raspoređivanja bave frontend-om, a ne backend-om, kao kod kanarinog.

Drugo ime za ova raspoređivanja je A/B testiranje. Umesto da svim korisnicima otkriju novu funkciju, ona se nudi samo ograničenoj grupi. Obično ti korisnici ne znaju da su testeri pioniri (odakle i naziv "skriveno raspoređivanje").

Uz pomoć prekidača funkcionalnosti (feature toggles) i drugih alata može se pratiti kako korisnici interaguju s novom funkcijom, da li ih privlači ili smatraju da je novi korisnički interfejs zbunjujući, i drugim tipovima metrika.

Strategije implementacije u Kubernetesu: rolling, recreate, blue/green, canary, dark (A/B testiranje)

Flagger i A/B raspoređivanja

Pored usmjeravanja na osnovu težine, Flagger također može usmjeriti promet na kanarinski server zavisno od HTTP parametara. Kod A/B testiranja, mogu se koristiti HTTP zaglavlja ili kolačići za preusmjeravanje specifičnog segmenta korisnika. Ovo je posebno efikasno u slučajevima frontend aplikacija koje zahtevaju vezanost sesije za server (session affinity). Dodatne informacije možete pronaći u dokumentaciji Flagger.

Autor se zahvaljuje Stefanu Prodanu, inženjeru iz Weaveworks (i kreatoru Flaggers), za sve ove fantastične sheme raspoređivanja.

P.S. od prevodioca

Pročitajte i na našem blogu:

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster