Telepítési stratégiák Kubernetesben: rolling, recreate, blue/green, canary, dark (A/B tesztelés)

Megjegyzés: Ez a Weaveworks által készült áttekintő anyag bemutatja a legnépszerűbb alkalmazáskiadási stratégiákat, és beszél a legfejlettebbek megvalósításának lehetőségéről a Kubernetes Flagger operátor segítségével. Egyszerű nyelven íródott, és szemléletes ábrákat tartalmaz, amelyek lehetővé teszik, hogy még a kezdő mérnökök is megértsék a kérdés lényegét.

Telepítési stratégiák Kubernetesben: rolling, recreate, blue/green, canary, dark (A/B tesztelés)
Az ábra innen származik egy másik áttekintésből a kiadási stratégiákról, amelyet a Container Solutions készített

Napjaink egyik legnagyobb problémája a felhőalapú alkalmazások fejlesztésében a telepítések felgyorsítása. Mikroszolgáltatás alapú megközelítés esetén a fejlesztők már teljesen moduláris alkalmazásokkal dolgoznak, és úgy tervezik azokat, hogy különböző csapatok egyszerre írjanak kódot és végezzenek módosításokat az alkalmazáson.

A rövidebb és gyakoribb telepítések a következő előnyökkel járnak:

  • Csökken a piacra jutás ideje.
  • Az új funkciók gyorsabban eljutnak a felhasználókhoz.
  • A felhasználói visszajelzések gyorsabban eljutnak a fejlesztőcsapathoz. Ez azt jelenti, hogy a csapat gyorsabban tudja bővíteni a funkciókat és orvosolni a problémákat.
  • Nő a fejlesztők morálja: a több fejlesztés miatt érdekesebb dolgozni.


De a kiadási gyakoriság növekedésével nő a kockázata annak, hogy negatívan befolyásolja az alkalmazás megbízhatóságát vagy a felhasználói élményt. Éppen ezért az üzemeltetési és DevOps csapatoknak fontos, hogy olyan folyamatokat és kiadási stratégiákat építsenek ki, amelyek minimalizálják a termékre és a felhasználókra jelentkező kockázatokat. (Tudjon meg többet a CI/CD pipeline automatizálásáról itt.)

Ebben a publikációban különböző telepítési stratégiákat fogunk megvitatni Kubernetesben, beleértve a rolling telepítéseket és a fejlettebb módszereket, mint a canary kiadások és azok változatai.

Telepítési stratégiák

Számos különböző típusú telepítési stratégia áll rendelkezésre a céloknak megfelelően. Például szükség lehet arra, hogy módosításokat végezzen egy adott környezetben további tesztelés céljából, vagy egy felhasználói/kliens halmazban, vagy elképzelhető, hogy korlátozott tesztelést kell végezni a felhasználókon, mielőtt egy funkciót nyilvánossá tennének.

Rolling (fokozatos, 'lekerekített' telepítés)

Ez a Kubernetes alkalmazás telepítési stratégiája. Fokozatosan, egymás után cseréli le a régi verziójú podokat az új verziójú podokra – a klaszter leállása nélkül.

Telepítési stratégiák Kubernetesben: rolling, recreate, blue/green, canary, dark (A/B tesztelés)

A Kubernetes megwaitalja, hogy az új podok készen álljanak a működésre (ellenőrizve őket készlet-testekkel), mielőtt elkezdené a régi podok leállítását. Ha probléma merül fel, a hasonló frissítés megszakítható a teljes klaszter leállítása nélkül. A deployment típusú YAML fájlban az új kép lecseréli a régit:

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

A frissítési paramétereket a manifest fájlban lehet pontosítani:

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

Recreate (újra létrehozás)

Ebben a legegyszerűbb telepítési típusban a régi podokat egyszerre megölni és újakkal helyettesítik:

Telepítési stratégiák Kubernetesben: rolling, recreate, blue/green, canary, dark (A/B tesztelés)

A megfelelő manifest körülbelül így néz ki:

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

Blue/Green (kék/zöld telepítések)

A kék/zöld telepítési stratégia (más néven piros/fekete) lehetővé teszi a régi (zöld) és az új (kék) verzió egyidejű telepítését. Miután mindkét verziót telepítették, a normál felhasználók a zöldhöz férnek hozzá, míg a kék a QA csapat számára elérhető automatizált tesztekhez egy külön szolgáltatáson vagy közvetlen porttovábbításon keresztül:

Telepítési stratégiák Kubernetesben: rolling, recreate, blue/green, canary, dark (A/B tesztelés)

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

Miután a kék (új) verziót tesztelték és jóváhagyta a kiadást, a szolgáltatás átvált erre, míg a zöld (régi) leáll:

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

Canary (kanári telepítések)

A kannári telepítések hasonlóak a kék/zöld telepítésekhez, de jobban kezelhetőek és progreszív lépcsős megközelítést alkalmaznak. E típusba különböző stratégiák tartoznak, beleértve a "rejtett" indításokat és az A/B tesztelést.

Ez a stratégia akkor alkalmazható, amikor új funkciók tesztelése szükséges, jellemzően az alkalmazás háttérfüggetlenében. A megközelítés lényege, hogy gyakorlatilag két azonos szervert hozzunk létre: az egyik majdnem minden felhasználót kiszolgál, míg a másik, új funkciókkal rendelkező kis csoport felhasználót, majd összehasonlítjuk a munkájuk eredményeit. Ha minden probléma nélkül zajlik, az új verzió fokozatosan kiterjesztésre kerül az egész infrastruktúrára.

Bár ezt a stratégiát kizárólag Kubernetes eszközeivel is megvalósítható, az új pod-ok lecserélésével sokkal kényelmesebb és egyszerűbb használni egy service mesh-t, mint például az Istio.

Például lehet két különböző manifeszt a Git-ben: egy normál 0.1.0-s címkével, és egy "kanári" 0.2.0-s címkével. A virtuális Istio átjáró manifestben a súlyok módosításával irányíthatjuk a forgalmat a két deployment között:

Telepítési stratégiák Kubernetesben: rolling, recreate, blue/green, canary, dark (A/B tesztelés)

A kanári telepítések Istio segítségével történő megvalósításához lépésről lépésre útmutatót találhat a következő anyagban GitOps Workflows with Istio. (Megjegyzés fordítás.: Az Istio kanári telepítésekről szóló anyagot is lefordítottuk itt.)

Kanári telepítések Weaveworks Flagger-rel

Weaveworks Flagger egyszerűvé és hatékonnyá teszi a kanári telepítések kezelését.

A Flagger automatizálja ezek működését. Istio-t vagy az AWS App Mesh-t használja a forgalom irányításához és átkapcsolásához, valamint a Prometheus metrikákat az eredmények elemzéséhez. Továbbá, a kanári telepítések elemzését webhooks segítségével is kiegészíthetjük elfogadási tesztek (acceptance), terhelési és más típusú ellenőrzések lefolytatásához.

A Kubernetes deployment alapján, és ha szükséges, a pod-ok vízszintes skálázásával (HPA), a Flagger Kubernetes objektumok (deployment, ClusterIP szolgáltatások és virtuális Istio vagy App Mesh szolgáltatások) csoportjait hozza létre a kanári telepítések elemzéséhez és megvalósításához:

Telepítési stratégiák Kubernetesben: rolling, recreate, blue/green, canary, dark (A/B tesztelés)

A vezérlési körsor megvalósítása során (control loop), a Flagger fokozatosan átkapcsolja a forgalmat a kanári szerverre, párhuzamosan mérve a kulcsfontosságú teljesítménymutatókat, mint a sikeres HTTP-kérések aránya, a kérelem átlagos időtartama és a pod-ok állapota. A KPI (kulcsfontosságú teljesítménymutatók) elemzése alapján a kanári rész vagy növekszik, vagy csökken, és az elemzés eredményeit Slack-en teszik közzé. A folyamat leírását és bemutatását a következő anyagban találhatja Progressive Delivery for App Mesh.

Telepítési stratégiák Kubernetesben: rolling, recreate, blue/green, canary, dark (A/B tesztelés)

Sötét (rejtett) vagy A/B-telepítések

A rejtett telepítés egy újabb változata a kanári stratégiának (amivel a Flagger is képes együttműködni, egyébként). A rejtett és a kanári telepítések közötti különbség az, hogy a rejtett telepítések a frontenddel foglalkoznak, nem pedig a backenddel, mint a kanáriak.

Ezeket a telepítéseket más néven A/B-tesztelésnek is hívják. Ahelyett, hogy minden felhasználónak hozzáférést biztosítanának egy új funkcióhoz, azt csak egy korlátozott csoportnak kínálják. Általában ezek a felhasználók nem tudják, hogy tesztelők, így született a „rejtett telepítés” kifejezés.

Funkcionalitáskapcsolókkal (feature toggles) és egyéb eszközök révén nyomon lehet követni, hogy a felhasználók hogyan lépnek interakcióba az új funkcióval, leköti-e őket vagy zavarosnak találják az új felhasználói felületet, és további mérőszámokat.

Telepítési stratégiák Kubernetesben: rolling, recreate, blue/green, canary, dark (A/B tesztelés)

Flagger és A/B-telepítések

A súlyozott irányításon kívül a Flagger a kanári szerverre irányíthatja a forgalmat HTTP-paraméterek alapján is. A/B-tesztelés során HTTP-fejléceket vagy sütiket használhatunk a felhasználók bizonyos szegmenseinek átirányítására. Ez különösen hatékony frontend-alkalmazások esetén, amelyek session affinity-t igényelnek a szerverhez. (session affinity). További információk találhatók a Flagger dokumentációjában.

A szerző köszönetét fejezi ki Stefan Prodan, a Weaveworks mérnöke (és a Flagger alkotója) által készített csodálatos telepítési diagramokért.

Fejlesztési eszközök, amelyek Kubernetesben futnak

Olvasson további információkat a blogunkban:

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster