Strategie nasazení v Kubernetes: rolling, recreate, blue/green, canary, dark (A/B testování)

Převod: Tento přehledový materiál od Weaveworks seznamuje s nejpopulárnějšími strategiemi nasazení aplikací a vysvětluje, jak implementovat ty nejpokročilejší z nich pomocí Kubernetes operátora Flagger. Je napsán jednoduchým jazykem a obsahuje názorné diagramy, které pomohou porozumět tématu i začínajícím inženýrům.

Strategie nasazení v Kubernetes: rolling, recreate, blue/green, canary, dark (A/B testování)
Diagram je převzat z jiného přehledu strategií nasazení, který vytvořil Container Solutions

Jedním z největších problémů při vývoji cloud-native aplikací dnes je zrychlení nasazení. Při mikroslužbovém přístupu již vývojáři pracují s plně modulárními aplikacemi a navrhují je tak, aby různé týmy mohly současně psát kód a provádět změny v aplikaci.

Kratší a častější nasazení mají následující výhody:

  • Zkracuje se doba uvedení na trh.
  • Nové funkce se rychleji dostávají k uživatelům.
  • Zpětná vazba od uživatelů se rychleji dostává k týmu vývojářů. To znamená, že tým může funkce doplňovat a opravovat problémy rychleji.
  • Zvyšuje se morálka vývojářů: při větším množství funkcí v vývoji se pracuje zajímavěji.


Ale s rostoucí frekvencí vydání také roste pravděpodobnost negativního vlivu na spolehlivost aplikace nebo uživatelskou zkušenost. Proto je pro týmy provozu a DevOps důležité budovat procesy a řídit strategie nasazení tak, aby minimalizovaly riziko pro produkt a uživatele. (Zjistit více o automatizaci CI/CD pipeline můžete zde.)

V této publikaci budeme diskutovat o různých strategiích nasazení v Kubernetes, včetně rolling nasazení a pokročilejších metod, jako jsou kanárkové nasazení a jejich variace.

Strategie nasazení

Existuje několik různých typů strategií nasazení, které můžete využít v závislosti na cíli. Může být například potřeba provést změny v určitém prostředí pro další testování, nebo v podmnožině uživatelů/klientů, nebo může být nutné provést omezené testování na uživatelích, než bude nějaká funkce veřejně dostupná.

Rolling (postupné, "navršené" nasazení)

To je standardní strategie nasazení v Kubernetes. Postupně, jeden po druhém, nahrazuje pod'y se starou verzí aplikace pod'y s novou verzí – bez prostojů v klastru.

Strategie nasazení v Kubernetes: rolling, recreate, blue/green, canary, dark (A/B testování)

Kubernetes čeká, až budou nové pod'y připraveny k práci (ověřuje je pomocí testů připravenosti), než začne s ukončováním starých. Pokud nastane problém, lze takovou aktualizaci přerušit, aniž by se zastavil celý klastr. V YAML souboru s popisem typu nasazení nový obraz nahrazuje starý obraz:

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

Parametry aktualizace lze upřesnit v manifestovém souboru:

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

Recreate (znovu vytvoření)

V tomto nejjednodušším typu nasazení jsou staré pod'y zabity všechny najednou a nahrazeny novými:

Strategie nasazení v Kubernetes: rolling, recreate, blue/green, canary, dark (A/B testování)

Odpovídající manifest vypadá přibližně takto:

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

Blue/Green (modro-zelená nasazení)

Strategie modro-zeleného nasazení (někdy také nazývána červeno-černá) předpokládá současné nasazení staré (zelené) a nové (modré) verze aplikace. Po umístění obou verzí mají běžní uživatelé přístup k zelené, zatímco modrá je dostupná pro QA tým pro automatizaci testů přes samostatnou službu nebo přímý přístup portů:

Strategie nasazení v Kubernetes: rolling, recreate, blue/green, canary, dark (A/B testování)

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

Jakmile byla modrá (nová) verze otestována a její vydání bylo schváleno, služba se přepne na ni, zatímco zelená (starší) se ukončí:

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

Canary (kanárková nasazení)

Canárková nasazení jsou podobná modro-zeleným, ale lépe řízena a využívají progresivní postupný přístup. Tento typ zahrnuje několik různých strategií, včetně "skrytých" spuštění a A/B testování.

Tato strategie se používá, když je potřeba otestovat novou funkčnost, obvykle na backendu aplikace. Podstatou přístupu je vytvořit dva téměř identické servery: jeden obsluhuje téměř všechny uživatele, zatímco druhý, se novými funkcemi, obsluhuje pouze malou skupinu uživatelů, po čemž jsou porovnány výsledky jejich činnosti. Pokud vše probíhá bez chyb, nová verze se postupně nasazuje na celou infrastrukturu.

I když tuto strategii lze realizovat výhradně pomocí Kubernetes, nahrazováním starých podů novými, je mnohem pohodlnější a jednodušší použít service mesh, jako je Istio.

Například můžete mít dva různé manifesty v Gitu: běžný s verzí 0.1.0 a 'kanárkový' s verzí 0.2.0. Úpravou váhy v manifestu virtuálního brány Istio můžete řídit rozdělení provozu mezi těmito dvěma nasazeními:

Strategie nasazení v Kubernetes: rolling, recreate, blue/green, canary, dark (A/B testování)

Krokový návod na realizaci kanárkových nasazení pomocí Istio naleznete v materiálu GitOps Workflows with Istio. (Pozn. přek.: Také jsme překládali materiál o kanárkových nasazeních v Istio zde.)

Kanárková nasazení s Weaveworks Flagger

Weaveworks Flagger usnadňuje a efektivně spravuje kanárková nasazení.

Flagger automatizuje práci s nimi. Používá Istio nebo AWS App Mesh pro směrování a přepínání provozu a také metriky Prometheus pro analýzu výsledků. Dále lze analýzu kanárkových nasazení doplnit webhooky pro provádění akceptačních testů, zátěžových a dalších typů kontrol.

Na základě nasazení Kubernetes a, pokud je to nutné, horizontálního škálování podů (HPA), Flagger vytváří sady objektů (nasazení Kubernetes, služby ClusterIP a virtuální služby Istio nebo App Mesh) pro provádění analýzy a realizaci kanárkových nasazení:

Strategie nasazení v Kubernetes: rolling, recreate, blue/green, canary, dark (A/B testování)

Realizují ovládací smyčku (control loop), Flagger postupně přepíná provoz na kanárkový server, zároveň měří klíčové výkonnostní ukazatele, jako je podíl úspěšných HTTP požadavků, průměrná doba trvání požadavku a zdraví podů. Na základě analýzy KPI (klíčových ukazatelů výkonnosti) se kanárková část buď zvětšuje, nebo zmenšuje, a výsledky analýzy se publikují na Slacku. Popis a ukázku tohoto procesu naleznete v materiálu Progressive Delivery for App Mesh.

Strategie nasazení v Kubernetes: rolling, recreate, blue/green, canary, dark (A/B testování)

Tmavé (skryté) nebo A/B nasazení

Skryté nasazení je další variace kanárkové strategie (s ní mimochodem může fungovat také Flagger). Rozdíl mezi skrytým a kanárkovým nasazením spočívá v tom, že skrytá nasazení se týkají frontendové části, nikoli backendu, jako je tomu u kanárkových.

Další název těchto nasazení je A/B testování. Místo toho, aby byla nová funkce zpřístupněna všem uživatelům, je nabízena pouze omezené části z nich. Obvykle tito uživatelé nevědí, že se podílí na testování jako prví, a proto se používá termín "skryté nasazení".

Pomocí funkčních přepínačů (feature toggles) a dalších nástrojů lze sledovat, jak uživatelé interagují s novou funkcí, zda je zaujme, nebo zda považují nové uživatelské rozhraní za zmatené, a další typy metrik.

Strategie nasazení v Kubernetes: rolling, recreate, blue/green, canary, dark (A/B testování)

Flagger a A/B nasazení

Kromě váhového směrování může Flagger také směrovat provoz na kanárkový server na základě HTTP parametrů. Při A/B testování lze použít HTTP hlavičky nebo cookies k přesměrování určitého segmentu uživatelů. To je zvlášť efektivní u frontendových aplikací, které vyžadují afinitu relací k serveru (session affinity). Další informace naleznete v dokumentaci Flagger.

Autor vyjadřuje vděčnost Stefan Prodan, inženýru Weaveworks (a tvůrci Flaggera), za všechny skvělé diagramy nasazení.

P.S. od překladatele

Přečtěte si také náš blog:

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster