Nā hoʻolālā hoʻolālā ma Kubernetes: ʻōwili, hana hou, uliuli/'ōmaʻomaʻo, canary, ʻeleʻele (hoʻāʻo A/B)

Nānā unuhi: Hōʻike kēia hiʻohiʻona mai Weaveworks i nā hoʻolālā hoʻolālā noiʻi kaulana loa a hōʻike i ka hiki ke hoʻokō ʻia nā mea holomua loa me ka hoʻohana ʻana i ka mea hoʻohana Kubernetes Flagger. Ua kākau ʻia ma ka ʻōlelo maʻalahi a loaʻa nā kiʻi ʻike e hiki ai i nā ʻenekini hou ke hoʻomaopopo i ka pilikia.

Nā hoʻolālā hoʻolālā ma Kubernetes: ʻōwili, hana hou, uliuli/'ōmaʻomaʻo, canary, ʻeleʻele (hoʻāʻo A/B)
Lawe ʻia ke kiʻikuhi mai loiloi hou ʻia hoʻolālā hoʻolālā i hana ʻia ma Container Solutions

ʻO kekahi o nā paʻakikī nui loa i ka hoʻomohala ʻana i nā noi kapua i kēia lā ʻo ka wikiwiki ʻana i ka hoʻolaha ʻana. Ma kahi ʻano microservices, hana nā mea hoʻomohala a hoʻolālā i nā noi modular holoʻokoʻa, e ʻae ana i nā hui like ʻole e kākau i nā code a hana i nā loli i ka noi.

Loaʻa nā pōmaikaʻi o nā hoʻolaha pōkole a ʻoi aku ka nui:

  • Hoʻemi ʻia ka manawa kūʻai.
  • Hiki wikiwiki nā hiʻohiʻona hou i nā mea hoʻohana.
  • Hiki wikiwiki ka manaʻo o ka mea hoʻohana i ka hui hoʻomohala. ʻO ia ke ʻano hiki i ka hui ke hoʻohui i nā hiʻohiʻona a hoʻoponopono wikiwiki i nā pilikia.
  • Piʻi ka manaʻo o ka mea hoʻomohala: ʻoi aku ka leʻaleʻa o nā hiʻohiʻona i ka hoʻomohala ʻana.


Akā i ka piʻi ʻana o ke alapine o ka hoʻokuʻu ʻana, hoʻonui ʻia ka hopena o ka hopena maikaʻi ʻole i ka hilinaʻi o ka noi a i ʻole ka ʻike mea hoʻohana. ʻO ia ke kumu he mea nui i nā hana a me nā hui DevOps ke kūkulu i nā kaʻina hana a mālama i nā hoʻolālā hoʻolālā i kahi ala e hōʻemi ai i ka pilikia i ka huahana a me nā mea hoʻohana. (Hiki iā ʻoe ke aʻo hou e pili ana i ka automation pipeline CI/CD maanei.)

Ma kēia pou, e kūkākūkā mākou i nā hoʻolālā hoʻolālā like ʻole ma Kubernetes, e komo pū ana me nā hoʻolaha ʻana a me nā ʻano ʻoi aku ka holomua e like me ka canary rollouts a me kā lākou mau ʻokoʻa.

Hoʻolālā hoʻolālā

Nui nā ʻano hoʻolālā hoʻolālā e hiki iā ʻoe ke hoʻohana ma muli o kāu pahuhopu. No ka laʻana, pono paha ʻoe e hoʻololi i kekahi kaiapuni no ka hoʻāʻo hou ʻana, a i ʻole i kahi ʻāpana o nā mea hoʻohana/mea kūʻai aku, a i ʻole pono ʻoe e hana i ka hoʻāʻo ʻana i nā mea hoʻohana ma mua o ka hana ʻana i kahi hiʻohiʻona. lehulehu.

ʻO ka holo ʻana (hoʻolili ʻana, "rolling" deployment)

ʻO kēia ka hoʻolālā hoʻolālā maʻamau ma Kubernetes. Hoʻololi ʻo ia, hoʻokahi i nā pods me ka mana kahiko o ka noi me nā pods me ka mana hou - me ka ʻole o ka cluster downtime.

Nā hoʻolālā hoʻolālā ma Kubernetes: ʻōwili, hana hou, uliuli/'ōmaʻomaʻo, canary, ʻeleʻele (hoʻāʻo A/B)

Ke kali nei ʻo Kubernetes a mākaukau nā pods hou e hana (e nānā iā lākou me ka hoʻohana ʻana hoʻāʻo mākaukau), ma mua o kou hoʻomaka ʻana e ʻōwili i nā mea kahiko. Inā loaʻa kahi pilikia, hiki ke hoʻopau ʻia kēia hoʻololi hou me ka ʻole e hoʻōki i ka hui holoʻokoʻa. Ma ka faila YAML e wehewehe ana i ke ʻano o ka hoʻouka ʻana, hoʻololi ke kiʻi hou i ke kiʻi kahiko:

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

Hiki ke kuhikuhi ʻia nā ʻāpana hoʻololi rollover i ka faila hōʻike:

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

Hana hou

Ma kēia ʻano maʻalahi o ka waiho ʻana, pepehi ʻia nā pods kahiko i ka manawa hoʻokahi a hoʻololi ʻia me nā mea hou:

Nā hoʻolālā hoʻolālā ma Kubernetes: ʻōwili, hana hou, uliuli/'ōmaʻomaʻo, canary, ʻeleʻele (hoʻāʻo A/B)

ʻO ka mea hōʻike kūpono e like me kēia:

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

Polū/ʻōmaʻomaʻo (nā hoʻolālā uliuli-'ōmaʻomaʻo)

ʻO ka hoʻolālā hoʻolālā uliuli-'ōmaʻomaʻo (i kapa ʻia kekahi manawa ʻulaʻula/ʻeleʻele) e pili ana i ka hoʻoili like ʻana o nā mana kahiko ('ōmaʻomaʻo) a me nā mana hou (uliuli) o ka noi. Ma hope o ka hoʻolaha ʻana i nā mana ʻelua, hiki i nā mea hoʻohana maʻamau ke komo i ka ʻōmaʻomaʻo, ʻoiai e loaʻa ana ka polū no ka hui QA e hoʻokaʻawale i nā hoʻokolohua ma o kahi lawelawe ʻokoʻa a i ʻole ka hoʻouna ʻana i ke awa pololei:

Nā hoʻolālā hoʻolālā ma Kubernetes: ʻōwili, hana hou, uliuli/'ōmaʻomaʻo, canary, ʻeleʻele (hoʻāʻo A/B)

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

Ma hope o ka hoʻāʻo ʻia ʻana o ka mana polū (hou) a ua ʻae ʻia ka hoʻokuʻu ʻana, ua hoʻololi ka lawelawe iā ia, a ua pelu ʻia ka mana ʻōmaʻomaʻo (kahiko).

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

Canary

Ua like ka canary rollouts me ka uliuli-'ōmaʻomaʻo rollouts, akā ʻoi aku ka maikaʻi o ka mana a me ka hoʻohana ʻana holomua ʻanuʻu ʻanuʻu. Aia kēia ʻano i nā hoʻolālā like ʻole, me ka hoʻokuʻu "stealth" a me ka hoʻāʻo A/B.

Hoʻohana ʻia kēia hoʻolālā i ka wā e pono ai e hoʻāʻo i kekahi mau hana hou, maʻamau ma ka hope o ka noi. ʻO ke kumu o ka hoʻokokoke ʻana, ʻo ia ka hana ʻana i ʻelua mau kikowaena like ʻole: lawelawe kekahi i nā mea hoʻohana a pau, a ʻo kekahi, me nā hana hou, lawelawe wale i kahi pūʻulu liʻiliʻi o nā mea hoʻohana, a laila hoʻohālikelike ʻia nā hopena o kā lākou hana. Inā hele nā ​​​​mea āpau me ka ʻole o nā hewa, ua ʻōwili ʻia ka mana hou i ka ʻōnaehana holoʻokoʻa.

ʻOiai hiki ke hoʻokō wale ʻia kēia hoʻolālā me ka hoʻohana ʻana i nā Kubernetes, e hoʻololi ana i nā pods kahiko me nā mea hou, ʻoi aku ka maʻalahi a me ka maʻalahi o ka hoʻohana ʻana i kahi mesh lawelawe e like me Istio.

No ka laʻana, loaʻa paha iā ʻoe ʻelua mau hōʻike like ʻole ma Git: kahi hōʻike maʻamau me ka tag 0.1.0 a me kahi hōʻike canary me ka tag 0.2.0. Ma ka hoʻololi ʻana i nā paona ma ka Istio virtual gateway manifest, hiki iā ʻoe ke hoʻomalu i ka hoʻohele ʻana o ke kaʻa ma waena o kēia mau hoʻolālā ʻelua:

Nā hoʻolālā hoʻolālā ma Kubernetes: ʻōwili, hana hou, uliuli/'ōmaʻomaʻo, canary, ʻeleʻele (hoʻāʻo A/B)

No kahi alakaʻi i kēlā me kēia ʻanuʻu i ka hoʻokō ʻana i nā deployments canary me ka hoʻohana ʻana iā Istio, ʻike ʻO GitOps Workflows me Istio. (Nānā. unuhi.: Ua unuhi pū mākou i nā mea pili e pili ana i nā canary rollouts i loko o Istio maanei.)

Hoʻokomo ʻia ʻo Canary me ka Weaveworks Flagger

Weaveworks Flagger hiki iā ʻoe ke hoʻokele maʻalahi a me ka hoʻokele canary rollouts.

Hana pū ʻo Flagger me lākou. Hoʻohana ʻo ia iā Istio a i ʻole AWS App Mesh e ala a hoʻololi i nā kaʻa, a me nā metric Prometheus e nānā i nā hopena. Eia kekahi, hiki ke hoʻonui ʻia ka nānā ʻana o nā hoʻolaha canary me nā webhooks e hana i nā hoʻokolohua ʻae, hoʻāʻo hoʻouka, a me nā ʻano loiloi ʻē aʻe.

Ma muli o ka hoʻolaha ʻana o Kubernetes a, inā pono, ka hoʻonui ʻia ʻana o nā pods (HPA), hana ʻo Flagger i nā pūʻulu o nā mea (kubernetes deployments, ClusterIP services and Istio or App Mesh virtual services) no ka nānā ʻana a hoʻokō i nā hoʻolaha canary:

Nā hoʻolālā hoʻolālā ma Kubernetes: ʻōwili, hana hou, uliuli/'ōmaʻomaʻo, canary, ʻeleʻele (hoʻāʻo A/B)

Ke hoʻokō nei i ka loop control (ka loop hoʻomalu), Hoʻololi mālie ʻo Flagger i ke kaʻa i ke kikowaena canary, ʻoiai ke ana ʻana i nā metric hana nui e like me ka pākēneka o nā noi HTTP kūleʻa, ka lōʻihi o ka noi ʻana, a me ke olakino pod. Ma muli o ka KPI (Key Performance Indicators), e ulu a hāʻule paha ka canary a paʻi ʻia nā hopena o ka loiloi ma Slack. Hiki ke loaʻa kahi wehewehe a me ka hōʻike ʻana o kēia kaʻina hana ma ka mea Hoʻouna holomua no ka App Mesh.

Nā hoʻolālā hoʻolālā ma Kubernetes: ʻōwili, hana hou, uliuli/'ōmaʻomaʻo, canary, ʻeleʻele (hoʻāʻo A/B)

Poʻeleʻele (huna) a i ʻole A/B deployments

ʻO ka hoʻolaha ʻana o Stealth kahi ʻano ʻē aʻe o ka hoʻolālā canary (ʻo ia, ma ke ala, hiki ke hana pū me Flagger). ʻO ka ʻokoʻa ma waena o ka stealth a me ka canary deployments ʻo ia ka hoʻopili ʻana o ka stealth me ka frontend ma mua o ka hope e like me ka hoʻomoe canary.

ʻO ka inoa ʻē aʻe no kēia hoʻolaha ʻana ʻo ia ka hoʻāʻo A/B. Ma kahi o ka hoʻolako ʻana i ka hiʻohiʻona hou i nā mea hoʻohana a pau, hāʻawi ʻia ia i kahi hapa palena wale nō o lākou. ʻO ka maʻamau, ʻaʻole ʻike kēia mau mea hoʻohana he mau mea hoʻāʻo paionia lākou (no laila ka huaʻōlelo "stealth deployment").

Ke hoʻohana nei i nā hoʻololi hana (hoʻololi hiʻohiʻona) a me nā mea hana ʻē aʻe, hiki iā ʻoe ke nānā i ke ʻano o ka hoʻohana ʻana o nā mea hoʻohana me ka hiʻohiʻona hou, inā paha lākou e hoʻopili ʻia e ia, a i ʻole e ʻike lākou i ka huikau o ka mea hoʻohana hou, a me nā ʻano metric ʻē aʻe.

Nā hoʻolālā hoʻolālā ma Kubernetes: ʻōwili, hana hou, uliuli/'ōmaʻomaʻo, canary, ʻeleʻele (hoʻāʻo A/B)

Hoʻolālā hae a me A/B

Ma waho aʻe o ka hoʻokele ʻana i ke kaumaha, hiki iā Flagger ke hoʻokele i ke kaʻa i ke kikowaena canary e pili ana i nā ʻāpana HTTP. Ma ka hoʻāʻo ʻana A/B, hiki iā ʻoe ke hoʻohana i nā poʻomanaʻo HTTP a i ʻole nā ​​​​kuki e huli i kahi ʻāpana kikoʻī o nā mea hoʻohana. ʻOi aku ka maikaʻi o kēia i ka hihia o nā noi frontend e koi ana i ka hoʻopaʻa ʻana i ka manawa i ke kikowaena (ka pilina pili). Hiki ke loaʻa ka ʻike hou aku ma ka palapala Flagger.

Mahalo ka mea kākau Stefan Prodan, Weaveworks engineer (a me ka mea nāna i hana iā Flagger), no kēia mau hiʻohiʻona hoʻolālā kupanaha.

PS mai ka unuhi

E heluhelu pū ma kā mākou blog:

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka