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

Bilješka prijevod: Ovaj pregled iz Weaveworksa predstavlja najpopularnije strategije uvođenja aplikacija i pokazuje kako se one najnaprednije mogu implementirati pomoću operatora Kubernetes Flagger. Napisan je jednostavnim jezikom i sadrži vizualne dijagrame koji omogućuju čak i početnicima da razumiju problem.

Strategije implementacije u Kubernetesu: rolling, recreate, blue/green, canary, dark (A/B testiranje)
Dijagram je preuzet iz još jedan osvrt strategije uvođenja napravljene u Container Solutions

Jedan od najvećih izazova u razvoju današnjih izvornih aplikacija u oblaku je ubrzavanje implementacije. U pristupu mikrousluga, programeri već rade i dizajniraju potpuno modularne aplikacije, omogućujući različitim timovima da istovremeno pišu kod i mijenjaju aplikaciju.

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

  • Vrijeme do tržišta je smanjeno.
  • Nove značajke brže dolaze do korisnika.
  • Povratne informacije korisnika brže dolaze do razvojnog tima. To znači da tim može dodavati značajke i brže rješavati probleme.
  • Moral programera raste: s više značajki u razvoju zabavnije je raditi.


Ali kako se učestalost izdanja povećava, povećavaju se i šanse za negativan utjecaj na pouzdanost aplikacije ili korisničko iskustvo. Zato je važno da timovi za operacije i DevOps izgrade procese i upravljaju strategijama implementacije na način koji minimalizira rizik za proizvod i korisnike. (Možete saznati više o automatizaciji CI/CD cjevovoda здесь.)

U ovom ćemo postu raspravljati o različitim strategijama implementacije u Kubernetesu, uključujući rolling implementacije i naprednije metode kao što su canary rollouts i njihove varijacije.

Strategije implementacije

Postoji nekoliko različitih vrsta strategija implementacije koje možete koristiti ovisno o svom cilju. Na primjer, možda ćete trebati izvršiti promjene u određenom okruženju za daljnje testiranje ili u podskupu korisnika/klijenata ili ćete možda morati izvršiti ograničeno korisničko testiranje prije izrade značajke javnost.

Rolling (postupno, "kotrljajuće" raspoređivanje)

Ovo je standardna strategija implementacije u Kubernetesu. Postupno, jedan po jedan, zamjenjuje podove sa starom verzijom aplikacije podovima s novom verzijom - bez zastoja klastera.

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

Kubernetes čeka dok novi moduli ne budu spremni za rad (provjerava ih pomoću testovi spremnosti), prije nego počnete motati stare. Ako se pojavi problem, ovo tekuće ažuriranje može se prekinuti bez zaustavljanja cijelog klastera. U YAML datoteci koja opisuje vrstu postavljanja, 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

Parametri ažuriranja prelaskom mogu se navesti u datoteci manifesta:

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

Ponovno stvoriti

U ovoj najjednostavnijoj vrsti implementacije, stare mahune se odjednom uništavaju 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:
  ...

Plavo/zeleno (plavo-zelene implementacije)

Plavo-zelena strategija implementacije (ponekad se naziva i crveno/crna) uključuje istovremenu implementaciju stare (zelene) i nove (plave) verzije aplikacije. Nakon objave obje verzije, obični korisnici imaju pristup zelenoj, dok je plava dostupna QA timu za automatizaciju testova putem zasebne usluge ili izravnog prosljeđivanja porta:

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 testirana i odobreno njeno izdanje, usluga se prebacuje na nju, a zelena (stara) verzija se presavija:

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

Canary (kanarinske implementacije)

Canary rollouts slični su plavo-zelenim rolloutima, ali imaju bolju kontrolu i upotrebu progresivno pristup korak po korak. Ova vrsta uključuje nekoliko različitih strategija, uključujući "stealth" lansiranja i A/B testiranje.

Ova se strategija koristi kada postoji potreba za isprobavanjem neke nove funkcionalnosti, obično u pozadini aplikacije. Suština pristupa je kreiranje dva gotovo identična poslužitelja: jedan služi gotovo svim korisnicima, a drugi, s novim funkcijama, samo maloj podskupini korisnika, nakon čega se uspoređuju rezultati njihova rada. Ako sve prođe bez grešaka, nova verzija se postupno uvodi na cjelokupnu infrastrukturu.

Iako se ova strategija može implementirati isključivo pomoću Kubernetesa, zamjenjujući stare podove novima, puno je praktičnije i jednostavnije koristiti servisni mesh kao što je Istio.

Na primjer, možete imati dva različita manifesta u Gitu: obični manifest s oznakom 0.1.0 i kanarički manifest s oznakom 0.2.0. Promjenom težine u manifestu Istio virtualnog pristupnika, možete kontrolirati distribuciju prometa između ove dvije implementacije:

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

Za vodič korak po korak za implementaciju canary implementacija pomoću Istio, pogledajte GitOps tijek rada s Istiom. (Bilješka. prev.: Također smo preveli materijal o kanarincima na istio здесь.)

Canary implementacije s Weaveworks Flaggerom

Weaveworks Flagger omogućuje jednostavno i učinkovito upravljanje kanarincima.

Flagger automatizira rad s njima. Koristi Istio ili AWS App Mesh za usmjeravanje i prebacivanje prometa te Prometheus metriku za analizu rezultata. Osim toga, analiza implementacija Canarya može se nadopuniti webhookovima za provođenje testova prihvaćanja, testova opterećenja i bilo koje druge vrste provjera.

Na temelju implementacije Kubernetesa i, ako je potrebno, vodoravnog skaliranja podova (HPA), Flagger stvara skupove objekata (Kubernetes implementacije, ClusterIP usluge i Istio ili App Mesh virtualne usluge) za analizu i implementaciju canary implementacija:

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

Implementacija kontrolne petlje (kontrolna petlja),Flagger postupno prebacuje promet na canary server, dok istovremeno mjeri ključne metrike performansi kao što su postotak uspješnih HTTP zahtjeva, prosječno trajanje zahtjeva i zdravlje modula. Na temelju analize KPI (Key Performance Indicators) kanarinac ili raste ili propada, a rezultati analize se objavljuju u Slacku. Opis i demonstracija ovog procesa mogu se naći u materijalu Progresivna isporuka za App Mesh.

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

Tamne (skrivene) ili A/B implementacije

Stealth implementacija je još jedna varijanta strategije Canary (s kojom, usput rečeno, Flagger također može raditi). Razlika između stealth i canary implementacija je u tome što se stealth implementacije bave frontendom, a ne backendom kao canary implementacije.

Drugi naziv za ove implementacije je A/B testiranje. Umjesto da nova značajka bude dostupna svim korisnicima, ponuđena je samo ograničenom dijelu njih. Tipično, ti korisnici nisu svjesni da su pioniri u ispitivanju (otuda izraz "nevidljiva implementacija").

Korištenje prekidača funkcionalnosti (prebacivanje značajki) i druge alate, možete pratiti kako korisnici stupaju u interakciju s novom značajkom, jesu li njome angažirani ili smatraju li novo korisničko sučelje zbunjujućim i druge vrste metrika.

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

Flagger i A/B implementacije

Osim usmjeravanja temeljenog na težini, Flagger također može usmjeravati promet na canary poslužitelj na temelju HTTP parametara. U A/B testiranju možete koristiti HTTP zaglavlja ili kolačiće za ciljanje određenog segmenta korisnika. Ovo je posebno učinkovito u slučaju frontend aplikacija koje zahtijevaju vezanje sesije na poslužitelj (afinitet sesije). Više informacija možete pronaći u dokumentaciji Flaggera.

Autor izražava zahvalnost Stefan Prodan, inženjer Weaveworksa (i kreator Flaggera), za sve ove nevjerojatne obrasce implementacije.

PS od prevoditelja

Pročitajte i na našem blogu:

Izvor: www.habr.com

Dodajte komentar