Cov tswv yim xa tawm hauv Kubernetes: dov, rov tsim dua, xiav / ntsuab, canary, tsaus nti (A / B kuaj)

Nco tseg txhais: Cov txheej txheem no los ntawm Weaveworks qhia txog cov npe nrov tshaj plaws ntawm daim ntawv thov tawm tswv yim thiab qhia tias yuav ua li cas cov neeg siab tshaj tuaj yeem siv tau siv Kubernetes Flagger tus neeg teb xov tooj. Nws yog sau ua lus yooj yim thiab muaj cov duab kos duab uas tso cai rau cov neeg ua haujlwm tshiab los nkag siab qhov teeb meem.

Cov tswv yim xa tawm hauv Kubernetes: dov, rov tsim dua, xiav / ntsuab, canary, tsaus nti (A / B kuaj)
Daim duab yog muab los ntawm lwm qhov kev tshuaj xyuas rollout cov tswv yim ua hauv Container Solutions

Ib qho kev sib tw loj tshaj plaws hauv kev tsim cov huab cua ib txwm siv niaj hnub no yog kev xa mus sai. Hauv kev ua haujlwm microservices, cov neeg tsim khoom twb tau ua haujlwm nrog thiab tsim cov ntawv thov modular tag nrho, tso cai rau cov pab pawg sib txawv los sau cov lej thiab hloov pauv rau daim ntawv thov.

Kev xa tawm luv luv thiab ntau zaus muaj cov txiaj ntsig hauv qab no:

  • Lub sij hawm mus ua lag luam raug txo.
  • Cov yam ntxwv tshiab ncav cuag cov neeg siv sai dua.
  • Cov neeg siv kev tawm tswv yim mus txog pab pawg txhim kho sai dua. Qhov no txhais tau tias pab neeg tuaj yeem ntxiv cov yam ntxwv thiab kho cov teeb meem sai dua.
  • Cov neeg tsim kev coj ncaj ncees nce ntxiv: ntau yam hauv kev txhim kho muaj kev lom zem ua haujlwm nrog.


Tab sis raws li qhov zaus ntawm kev tso tawm ntau ntxiv, qhov muaj feem cuam tshuam tsis zoo rau daim ntawv thov kev ntseeg siab lossis cov neeg siv kev paub kuj nce ntxiv. Tias yog vim li cas nws yog ib qho tseem ceeb rau kev khiav hauj lwm thiab DevOps pab pawg los tsim cov txheej txheem thiab tswj kev xa tawm cov tswv yim hauv txoj hauv kev uas txo qis kev pheej hmoo rau cov khoom lag luam thiab cov neeg siv. (Koj tuaj yeem kawm paub ntau ntxiv txog CI / CD pipeline automation no.)

Hauv cov ntawv tshaj tawm no, peb yuav tham txog ntau yam kev xa tawm cov tswv yim hauv Kubernetes, suav nrog kev xa tawm dov thiab ntau txoj hauv kev xws li canary rollouts thiab lawv cov kev hloov pauv.

Cov tswv yim xa tawm

Muaj ntau ntau hom kev xa tawm cov tswv yim uas koj tuaj yeem siv nyob ntawm koj lub hom phiaj. Piv txwv li, koj yuav tsum tau hloov pauv rau qee qhov chaw rau kev sim ntxiv, lossis rau ib pawg ntawm cov neeg siv / cov neeg siv khoom, lossis koj yuav tsum tau ua cov neeg siv tsawg sim ua ntej ua qhov tshwj xeeb. pej xeem.

Rolling (qib maj mam, "dov" xa tawm)

Qhov no yog tus qauv xa tawm tswv yim hauv Kubernetes. Nws maj mam, ib qho los ntawm ib qho, hloov cov pods nrog cov qub version ntawm daim ntawv thov nrog cov pods nrog cov tshiab version - tsis muaj pawg downtime.

Cov tswv yim xa tawm hauv Kubernetes: dov, rov tsim dua, xiav / ntsuab, canary, tsaus nti (A / B kuaj)

Kubernetes tos kom txog thaum cov pods tshiab npaj ua haujlwm (xyuas lawv siv kev xeem ntawv), ua ntej koj pib dov cov qub. Yog tias muaj teeb meem tshwm sim, qhov hloov tshiab dov no tuaj yeem raug rho tawm yam tsis muaj kev txwv tag nrho pawg. Hauv YAML cov ntaub ntawv piav qhia txog hom kev xa tawm, daim duab tshiab hloov cov duab qub:

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

Lub rollover hloov tshiab tsis tau teev nyob rau hauv cov ntaub ntawv manifest:

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

Rov tsim dua

Hauv hom kev xa tawm yooj yim tshaj plaws, cov pods qub raug tua tag nrho ib zaug thiab hloov nrog cov tshiab:

Cov tswv yim xa tawm hauv Kubernetes: dov, rov tsim dua, xiav / ntsuab, canary, tsaus nti (A / B kuaj)

Qhov sib thooj manifest zoo li no:

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

Xiav / Ntsuab (xiav-ntsuab xa tawm)

Lub tswv yim xiav-ntsuab xa tawm (tej zaum kuj hu ua liab / dub) cuam tshuam nrog kev xa tawm ib txhij ntawm cov qub (ntsuab) thiab tshiab (xiav) versions ntawm daim ntawv thov. Tom qab tshaj tawm ob qho tib si, cov neeg siv ib txwm muaj kev nkag mus rau ntsuab ib qho, thaum lub xiav yog muaj rau pab pawg QA los ua kom cov kev sim ntsuas los ntawm kev sib cais lossis kev xa mus ncaj qha:

Cov tswv yim xa tawm hauv Kubernetes: dov, rov tsim dua, xiav / ntsuab, canary, tsaus nti (A / B kuaj)

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

Tom qab lub xiav (tshiab) version tau sim thiab nws tso tawm tau pom zoo, cov kev pab cuam hloov mus rau nws, thiab ntsuab (laus) version yog folded:

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

Canary (Canary deployments)

Canary rollouts zoo ib yam li xiav-ntsuab rollouts, tab sis muaj kev tswj thiab siv tau zoo dua vam meej ib kauj ruam los ntawm kauj ruam mus kom ze. Hom no suav nrog ntau lub tswv yim sib txawv, suav nrog "ntev" kev xa tawm thiab kev sim A / B.

Cov tswv yim no yog siv thaum muaj qhov xav tau los sim qee qhov kev ua haujlwm tshiab, feem ntau yog nyob rau hauv qab ntawm daim ntawv thov. Lub ntsiab lus ntawm txoj hauv kev yog los tsim ob lub servers yuav luag zoo ib yam: ib qho ua haujlwm yuav luag txhua tus neeg siv, thiab lwm yam, nrog cov haujlwm tshiab, tsuas yog pab pawg me me ntawm cov neeg siv, tom qab ntawd cov txiaj ntsig ntawm lawv txoj haujlwm tau muab piv. Yog tias txhua yam mus yam tsis muaj qhov yuam kev, qhov tshiab version yog maj mam dov mus rau tag nrho cov infrastructure.

Txawm hais tias lub tswv yim no tuaj yeem ua tiav tsuas yog siv Kubernetes, hloov cov qub pods nrog cov tshiab, nws yooj yim dua thiab yooj yim dua los siv cov kev pabcuam mesh zoo li Istio.

Piv txwv li, koj yuav muaj ob qhov sib txawv hauv Git: ib txwm tshwm sim nrog lub cim 0.1.0 thiab canary manifest nrog lub cim 0.2.0. Los ntawm kev hloov qhov hnyav hauv Istio virtual gateway manifest, koj tuaj yeem tswj kev faib tawm ntawm ob qhov kev xa tawm no:

Cov tswv yim xa tawm hauv Kubernetes: dov, rov tsim dua, xiav / ntsuab, canary, tsaus nti (A / B kuaj)

Rau cov lus qhia ib kauj ruam los ntawm kauj ruam rau kev siv canary deployments siv Istio, saib GitOps Workflows nrog Istio. (Nco tseg. txhais.: Peb kuj txhais cov ntaub ntawv hais txog canary rollouts rau hauv Istio no.)

Canary Deployments nrog Weaveworks Flagger

Weaveworks Flagger tso cai rau koj kom yooj yim thiab zoo tswj canary rollouts.

Flagger automates ua haujlwm nrog lawv. Nws siv Istio lossis AWS App Mesh rau txoj kev thiab hloov tsheb, thiab Prometheus metrics los soj ntsuam cov txiaj ntsig. Tsis tas li ntawd, kev soj ntsuam ntawm canary deployments tuaj yeem ntxiv nrog webhooks los ua qhov kev lees paub, kev xeem thauj khoom, thiab lwm yam kev kuaj xyuas.

Raws li kev xa tawm Kubernetes thiab, yog tias tsim nyog, kab rov tav scaling ntawm pods (HPA), Flagger tsim cov khoom siv (Kubernetes xa mus, ClusterIP cov kev pabcuam thiab Istio lossis App Mesh cov kev pabcuam virtual) los tshuaj xyuas thiab siv cov kev xa tawm canary:

Cov tswv yim xa tawm hauv Kubernetes: dov, rov tsim dua, xiav / ntsuab, canary, tsaus nti (A / B kuaj)

Ua raws li kev tswj lub voj (control loop),Flagger maj mam hloov tsheb mus rau cov neeg rau zaub mov canary, thaum tib lub sijhawm ntsuas cov ntsuas kev ua haujlwm tseem ceeb xws li feem pua ​​​​ntawm kev thov HTTP ua tiav, ncua sij hawm thov nruab nrab, thiab kev noj qab haus huv ntawm cov pods. Raws li KPI (Key Performance Indicators) tsom xam, cov canary txawm loj hlob los yog tawg thiab cov txiaj ntsig ntawm kev tshuaj ntsuam tau luam tawm hauv Slack. Cov lus piav qhia thiab kev ua qauv qhia ntawm cov txheej txheem no tuaj yeem pom hauv cov khoom siv Progressive Delivery rau App Mesh.

Cov tswv yim xa tawm hauv Kubernetes: dov, rov tsim dua, xiav / ntsuab, canary, tsaus nti (A / B kuaj)

Tsaus (pob ntseg) lossis A / B xa tawm

Kev xa tawm Stealth yog lwm qhov kev hloov pauv ntawm lub tswv yim canary (uas, los ntawm txoj kev, Flagger kuj tuaj yeem ua haujlwm nrog). Qhov txawv ntawm stealth thiab canary deployments yog tias stealth deployments cuam tshuam nrog frontend es tsis yog lub backend zoo li canary deployments.

Lwm lub npe rau cov kev xa tawm no yog kev sim A / B. Es tsis txhob ua qhov tshiab feature muaj rau txhua tus neeg siv, nws tau muab rau tsuas yog ib feem ntawm lawv. Feem ntau, cov neeg siv no tsis paub tias lawv yog cov pioneering testers (li no lo lus "stealth deployment").

Kev siv cov keyboards ua haujlwm (feature toggle) thiab lwm yam cuab yeej, koj tuaj yeem saib xyuas seb cov neeg siv cuam tshuam li cas nrog cov yam ntxwv tshiab, txawm tias lawv koom nrog nws, lossis seb lawv puas pom cov neeg siv interface tsis meej pem, thiab lwm yam kev ntsuas.

Cov tswv yim xa tawm hauv Kubernetes: dov, rov tsim dua, xiav / ntsuab, canary, tsaus nti (A / B kuaj)

Flagger thiab A / B xa tawm

Ntxiv rau qhov hnyav-raws li routing, Flagger tseem tuaj yeem taug kev mus rau canary server raws li HTTP tsis. Hauv kev xeem A / B, koj tuaj yeem siv HTTP headers lossis ncuav qab zib los tsom rau ib ntu ntawm cov neeg siv. Qhov no yog tshwj xeeb tshaj yog muaj txiaj ntsig nyob rau hauv cov ntaub ntawv ntawm cov ntawv thov frontend uas xav tau kev sib kho nrog rau lub server (Kev sib tham affinity). Xav paub ntau ntxiv tuaj yeem pom hauv cov ntaub ntawv Flagger.

Tus sau qhia kev ris txiaj Stefan Prodan, Weaveworks engineer (thiab tus tsim ntawm Flagger), rau tag nrho cov qauv xa tawm zoo kawg.

PS los ntawm tus txhais lus

Nyeem kuj ntawm peb blog:

Tau qhov twg los: www.hab.com

Ntxiv ib saib