werf - peb cov cuab yeej rau CI / CD hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Lub Tsib Hlis 27 hauv lub tsev loj ntawm DevOpsConf 2019 lub rooj sib tham, tuav ua ib feem ntawm kev ua koob tsheej RIT++ 2019, raws li ib feem ntawm "Kev xa mus tas li", ib daim ntawv tshaj tawm tau muab "werf - peb cov cuab yeej rau CI / CD hauv Kubernetes". Nws tham txog cov teeb meem thiab teeb meem uas txhua leej txhua tus ntsib thaum xa mus rau Kubernetes, nrog rau cov nuances uas tej zaum yuav tsis pom tam sim ntawd. Txheeb xyuas cov kev daws teeb meem, peb qhia seb qhov no tau siv li cas hauv Open Source tool werf.

Txij li thaum kev nthuav qhia, peb cov khoom siv hluav taws xob (yav tas los hu ua dapp) tau mus txog qhov tseem ceeb ntawm keeb kwm ntawm 1000 hnub qub ntawm GitHub - Peb cia siab tias nws cov neeg siv khoom loj hlob tuaj yuav ua rau lub neej yooj yim dua rau ntau tus kws ua haujlwm DevOps.

werf - peb cov cuab yeej rau CI / CD hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Yog li, cia peb qhia video ntawm tsab ntawv ceeb toom (~ 47 feeb, ntau cov ntaub ntawv ntau dua li tsab xov xwm) thiab cov ntsiab lus tseem ceeb ntawm nws hauv daim ntawv. Mus!

Xa code rau Kubernetes

Kev hais lus yuav tsis yog hais txog werf, tab sis hais txog CI / CD hauv Kubernetes, hais tias peb cov software tau ntim rau hauv Docker ntim (Kuv tau tham txog qhov no hauv 2016 report), thiab K8s yuav raug siv los khiav nws hauv kev tsim khoom (Ntau ntxiv txog qhov no hauv 2017 xyoo).

Kev xa khoom zoo li cas hauv Kubernetes?

  • Muaj Git repository nrog cov cai thiab cov lus qhia rau kev tsim nws. Daim ntawv thov yog tsim rau hauv Docker duab thiab luam tawm hauv Docker Registry.
  • Tib lub chaw cia khoom tseem muaj cov lus qhia txog kev xa thiab khiav daim ntawv thov. Thaum lub sij hawm xa mus, cov lus qhia no raug xa mus rau Kubernetes, uas tau txais cov duab xav tau los ntawm kev sau npe thiab xa tawm.
  • Ntxiv rau, feem ntau muaj kev sim. Qee qhov no tuaj yeem ua tiav thaum luam tawm cov duab. Koj tseem tuaj yeem (ua raws li cov lus qhia tib yam) xa ib daim qauv ntawm daim ntawv thov (hauv K8s lub npe cais lossis ib pawg cais) thiab khiav cov kev xeem nyob ntawd.
  • Thaum kawg, koj xav tau lub kaw lus CI uas tau txais cov xwm txheej los ntawm Git (lossis khawm khawm) thiab hu rau tag nrho cov theem: tsim, tshaj tawm, xa tawm, sim.

werf - peb cov cuab yeej rau CI / CD hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Muaj ob peb nqe lus tseem ceeb ntawm no:

  1. Vim tias peb muaj ib qho kev hloov pauv tsis tau (Imutable infrastructure), daim ntawv thov daim duab uas siv rau txhua theem (staging, ntau lawm, thiab lwm yam), yuav tsum muaj ib. Kuv tham txog qhov no hauv kev nthuav dav ntxiv thiab nrog piv txwv. no.
  2. Vim peb ua raws li kev tsim kho vaj tse raws li txoj cai txoj cai (IaC), daim ntawv thov code, cov lus qhia rau assembling thiab launching nws yuav tsum raws nraim nyob rau hauv ib lub repository. Yog xav paub ntxiv txog qhov no, saib tib daim ntawv qhia.
  3. Kev xa khoom saw (kev xa khoom) peb feem ntau pom nws zoo li no: daim ntawv thov tau sib sau ua ke, sim, tso tawm (tso tawm theem) thiab qhov ntawd yog nws - kev xa khoom tau tshwm sim. Tab sis qhov tseeb, tus neeg siv tau txais yam koj tau dov tawm, tsis tom qab ntawd thaum koj xa nws mus rau kev tsim khoom, thiab thaum nws tuaj yeem mus rau qhov ntawd thiab qhov kev tsim khoom no ua haujlwm. Yog li kuv ntseeg tias kev xa khoom xa mus xaus tsuas yog nyob rau theem ua haujlwm (khiav), los yog ntau dua precisely, txawm nyob rau lub sij hawm thaum lub code raug tshem tawm los ntawm ntau lawm (hloov nws nrog ib tug tshiab).

Cia peb rov qab mus rau cov txheej txheem xa khoom saum toj no hauv Kubernetes: nws tau tsim tsis yog los ntawm peb, tab sis los ntawm txhua tus neeg uas tau daws qhov teeb meem no. Qhov tseeb, tus qauv no tam sim no hu ua GitOps (Koj tuaj yeem nyeem ntxiv txog lub sijhawm thiab cov tswv yim tom qab nws no). Cia peb saib cov theem ntawm lub tswv yim.

Tsim theem

Nws yuav zoo li koj tuaj yeem tham txog kev tsim cov duab Docker hauv 2019, thaum txhua tus paub sau Dockerfiles thiab khiav docker build?.. Ntawm no yog cov nuances uas kuv xav them rau:

  1. Duab hnyav teeb meem, yog li siv ntau theemtawm hauv daim duab tsuas yog daim ntawv thov uas tsim nyog rau kev ua haujlwm.
  2. Cov txheej txheem yuav tsum tau minimized los ntawm combining chains ntawm RUN- lus txib raws li lub ntsiab lus.
  3. Txawm li cas los xij, qhov no ntxiv teeb meem debugging, vim tias thaum lub rooj sib txoos sib tsoo, koj yuav tsum nrhiav txoj cai hais kom ua los ntawm cov saw hlau uas ua rau muaj teeb meem.
  4. Kev sib dhos ceev qhov tseem ceeb vim peb xav kom sai sai dov tawm cov kev hloov pauv thiab pom cov txiaj ntsig. Piv txwv li, koj tsis xav rov tsim kho cov kev vam meej hauv cov tsev qiv ntawv lus txhua zaus koj tsim daim ntawv thov.
  5. Feem ntau los ntawm ib qho chaw khaws cia Git koj xav tau ntau cov duab, uas tuaj yeem daws tau los ntawm cov txheej txheem Dockerfiles (lossis muaj npe theem hauv ib cov ntaub ntawv) thiab Bash tsab ntawv nrog lawv cov kev sib dhos ua ntu zus.

Qhov no tsuas yog lub ntsis ntawm cov dej khov nab kuab uas sawv daws ntsib. Tab sis muaj lwm yam teeb meem, tshwj xeeb tshaj yog:

  1. Feem ntau nyob rau theem sib dhos peb xav tau ib yam dab tsi Mount (piv txwv li, cache qhov tshwm sim ntawm ib qho kev hais kom ua zoo li apt nyob rau hauv peb-tog directory).
  2. Peb xav Ua tau zoo es tsis txhob sau rau hauv plhaub.
  3. Peb xav tsim tsis muaj Docker (Vim li cas peb xav tau lub tshuab virtual ntxiv uas peb yuav tsum teeb tsa txhua yam rau qhov no, thaum peb twb muaj Kubernetes pawg uas peb tuaj yeem khiav ntim tau?).
  4. Parallel sib dhos, uas tuaj yeem nkag siab ntau txoj hauv kev: cov lus txib sib txawv ntawm Dockerfile (yog tias siv ntau theem), ntau qhov kev cog lus ntawm tib lub chaw cia khoom, ntau Dockerfiles.
  5. Distributed los ua ke: Peb xav khaws cov khoom hauv cov kaus mom uas yog "ephemeral" vim lawv cov cache ploj, uas txhais tau hais tias nws yuav tsum tau muab khaws cia rau qhov chaw sib cais.
  6. Thaum kawg, kuv tau hu ua qhov kawg ntawm kev ntshaw automagic: Nws yuav yog qhov zoo tshaj plaws mus rau qhov chaw cia khoom, ntaus qee cov lus txib thiab tau txais cov duab npaj txhij, sib sau ua ke nrog kev nkag siab ntawm yuav ua li cas thiab yuav ua li cas kom raug. Txawm li cas los xij, kuv tus kheej tsis paub meej tias tag nrho cov nuances tuaj yeem pom qhov no.

Thiab ntawm no yog cov haujlwm:

  • moby/buildkit - tus tsim los ntawm Docker Inc (twb tau koom ua ke rau hauv cov qauv tam sim no ntawm Docker), uas tab tom sim daws txhua yam teeb meem no;
  • kaniko ua - tus tsim los ntawm Google uas tso cai rau koj los tsim yam tsis muaj Docker;
  • Buildpacks.io - CNCF qhov kev sim ua kom tsis siv neeg ua khawv koob thiab, tshwj xeeb, kev daws teeb meem zoo nrog rau cov txheej txheem rov qab;
  • thiab ib pawg ntawm lwm yam khoom siv, xws li buildah, truetools/img...

... thiab saib seb lawv muaj pes tsawg hnub qub ntawm GitHub. Ntawd yog, ntawm ib sab, docker build muaj thiab muaj peev xwm ua tau ib yam dab tsi, tab sis nyob rau hauv kev muaj tiag qhov teeb meem tsis tau daws tag nrho - pov thawj ntawm qhov no yog kev sib txuas ntawm kev sib txuas ntawm lwm cov neeg sau khoom, txhua qhov kev daws teeb meem qee qhov teeb meem.

Assembly hauv werf

Yog li peb tau mus werf (yav tas los nto moo zoo li dapp) - Ib qho chaw siv hluav taws xob qhib los ntawm lub tuam txhab Flant, uas peb tau ua rau ntau xyoo. Nws tag nrho tau pib 5 xyoo dhau los nrog Bash scripts uas optimized lub rooj sib txoos ntawm Dockerfiles, thiab rau 3 xyoo dhau los tag nrho-fledged txoj kev loj hlob tau ua nyob rau hauv lub moj khaum ntawm ib qhov project nrog nws tus kheej Git repository. (thawj hauv Ruby, thiab tom qab ntawd sau dua tshiab mus, thiab tib lub sij hawm renamed). Cov teeb meem dab tsi los ua ke daws tau hauv werf?

werf - peb cov cuab yeej rau CI / CD hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Cov teeb meem ntxoov ntxoo xiav twb tau ua tiav lawm, kev tsim vaj huam sib luag tau ua tiav nyob rau hauv tib lub tswv tsev, thiab cov teeb meem tseem ceeb hauv cov xim daj yog npaj kom tiav thaum kawg ntawm lub caij ntuj sov.

Theem ntawm kev tshaj tawm hauv kev sau npe (Publish)

Peb hu docker push... - Dab tsi tuaj yeem nyuaj txog kev xa cov duab mus rau npe? Thiab tom qab ntawd cov lus nug tshwm sim: "Kuv yuav tsum muab lub cim dab tsi rau ntawm daim duab?" Nws tshwm sim vim peb muaj Gitflow (lossis lwm lub tswv yim Git) thiab Kubernetes, thiab kev lag luam sim ua kom ntseeg tau tias muaj dab tsi tshwm sim hauv Kubernetes ua raws li qhov tshwm sim hauv Git. Tom qab tag nrho, Git yog peb qhov tseeb xwb.

Qhov no nyuaj npaum li cas? Xyuas kom rov tsim dua tshiab: los ntawm kev cog lus hauv Git, uas tsis hloov pauv hauv qhov xwm txheej (tsis hloov tau), mus rau Docker duab, uas yuav tsum tau khaws cia zoo ib yam.

Nws kuj tseem ceeb rau peb txiav txim keeb kwm, vim tias peb xav nkag siab los ntawm qhov uas tau cog lus rau daim ntawv thov khiav hauv Kubernetes tau tsim (ces peb tuaj yeem ua qhov txawv thiab zoo sib xws).

Tagging Strategies

Thawj qhov yog qhov yooj yim git tag. Peb muaj ib daim ntawv teev npe nrog ib daim duab tagged li 1.0. Kubernetes muaj theem thiab ntau lawm, qhov twg cov duab no yog uploaded. Hauv Git peb ua commits thiab ntawm qee lub sijhawm peb tag 2.0. Peb sau nws raws li cov lus qhia los ntawm lub chaw cia khoom thiab muab tso rau hauv daim ntawv teev npe nrog lub cim npe 2.0. Peb yob nws tawm mus rau theem thiab, yog tias txhua yam zoo, ces mus rau kev tsim khoom.

werf - peb cov cuab yeej rau CI / CD hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Qhov teeb meem nrog txoj hauv kev no yog qhov peb xub muab lub cim npe, thiab tsuas yog tom qab ntawd sim thiab dov nws tawm. Vim li cas? Ua ntej, nws tsuas yog qhov tsis txaus ntseeg: peb tab tom tshaj tawm cov software uas peb tseem tsis tau sim ua ntej (peb tsis tuaj yeem ua lwm yam, vim tias txhawm rau txheeb xyuas, peb yuav tsum muab lub cim). Qhov thib ob, txoj kev no tsis sib haum nrog Gitflow.

Qhov kev xaiv thib ob yog git commit + tag. Tus tswv ceg muaj tag 1.0; rau nws nyob rau hauv kev sau npe - ib daim duab deployed rau ntau lawm. Tsis tas li ntawd, cov pab pawg Kubernetes muaj kev saib ua ntej thiab kev ua yeeb yam. Tom ntej no peb ua raws Gitflow: hauv ceg tseem ceeb rau kev txhim kho (develop) peb ua cov yam ntxwv tshiab, ua rau muaj kev cog lus nrog tus cim #c1. Peb sau nws thiab luam tawm hauv daim ntawv teev npe siv tus cim no (#c1). Nrog tib tus cim peb yob tawm mus saib ua ntej. Peb ua tib yam nrog kev cog lus #c2 ΠΈ #c3.

Thaum peb pom tau hais tias muaj cov yam ntxwv txaus, peb pib ruaj khov txhua yam. Tsim ib ceg hauv Git release_1.1 (ntawm lub hauv paus #c3 los ntawm develop). Tsis tas yuav sau qhov kev tso tawm no, vim tias ... qhov no tau ua tiav hauv cov kauj ruam dhau los. Yog li ntawd, peb tuaj yeem yooj yim dov nws tawm mus rau theem. Peb kho cov kab mob hauv #c4 thiab zoo sib xws dov tawm mus rau staging. Nyob rau tib lub sijhawm, kev txhim kho tseem tab tom ua hauv develop, qhov twg cov kev hloov pauv raws sij hawm coj los ntawm release_1.1. Qee lub sij hawm, peb tau txais kev cog lus tso ua ke thiab muab tso rau hauv staging, uas peb zoo siab nrog (#c25).

Tom qab ntawd peb sib koom ua ke (nrog nrawm nrawm) lub chaw tso tawm (release_1.1) hauv master. Peb muab ib daim ntawv nrog tus tshiab version ntawm qhov kev cog lus no (1.1). Tab sis cov duab no twb tau sau rau hauv daim ntawv teev npe, yog li thiaj li tsis txhob sau nws dua, peb tsuas ntxiv ib daim ntawv thib ob rau cov duab uas twb muaj lawm (tam sim no nws muaj cov cim npe hauv cov npe. #c25 ΠΈ 1.1). Tom qab ntawd peb yob nws tawm mus rau kev tsim khoom.

Muaj ib tug drawback uas tsuas yog ib daim duab yog uploaded rau staging (#c25), thiab hauv kev tsim khoom nws yog hom sib txawv (1.1), tab sis peb paub tias "lub cev" cov no yog tib daim duab los ntawm kev sau npe.

werf - peb cov cuab yeej rau CI / CD hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Qhov tsis zoo tiag tiag yog tias tsis muaj kev txhawb nqa rau kev sib koom ua ke, koj yuav tsum ua nrawm nrawm.

Peb tuaj yeem mus ntxiv thiab ua kom yuam kev... Cia peb saib ib qho piv txwv ntawm Dockerfile yooj yim:

FROM ruby:2.3 as assets
RUN mkdir -p /app
WORKDIR /app
COPY . ./
RUN gem install bundler && bundle install
RUN bundle exec rake assets:precompile
CMD bundle exec puma -C config/puma.rb

FROM nginx:alpine
COPY --from=assets /app/public /usr/share/nginx/www/public

Cia peb tsim cov ntaub ntawv los ntawm nws raws li cov hauv qab no:

  • SHA256 los ntawm cov cim ntawm cov duab siv (ruby:2.3 ΠΈ nginx:alpine), uas yog checksums ntawm lawv cov ntsiab lus;
  • txhua pab pawg (RUN, CMD thiab lwm yam.);
  • SHA256 los ntawm cov ntaub ntawv uas tau ntxiv.

... thiab nqa daim tshev (dua SHA256) los ntawm cov ntaub ntawv zoo li no. Qhov no kos npe txhua yam uas txhais cov ntsiab lus ntawm Docker duab.

werf - peb cov cuab yeej rau CI / CD hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Cia peb rov qab mus rau daim duab thiab es tsis txhob commits peb yuav siv xws li kos npe, i.e. tag cov duab nrog kos npe.

werf - peb cov cuab yeej rau CI / CD hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Tam sim no, thaum tsim nyog, piv txwv li, kom sib koom ua ke kev hloov pauv los ntawm kev tso tawm mus rau tus tswv, peb tuaj yeem ua qhov kev sib koom ua ke tiag tiag: nws yuav muaj tus lej sib txawv, tab sis kos npe tib yam. Nrog tib tus cim peb yuav dov tawm cov duab rau ntau lawm.

Qhov tsis zoo yog tias tam sim no nws yuav tsis tuaj yeem txiav txim siab seb hom kev cog lus twg raug thawb mus rau ntau lawm - checksums tsuas yog ua haujlwm hauv ib qho kev taw qhia. Qhov teeb meem no tau daws los ntawm ib txheej ntxiv nrog metadata - Kuv mam li qhia koj ntxiv tom qab.

Tagging hauv werf

Hauv werf peb tau mus ntxiv thiab tab tom npaj ua ib qho kev faib nrog lub cache uas tsis khaws cia rau hauv ib lub tshuab... Yog li, peb tab tom tsim ob hom Docker dluab, peb hu rau lawv. theem ΠΈ duab.

Lub werf Git repository khw muag khoom tsim cov lus qhia tshwj xeeb uas piav qhia txog theem sib txawv ntawm kev tsim (ua ntej nruab, nruab, ua ntej kev teeb tsa, teeb). Peb sau cov duab thawj theem nrog kos npe uas txhais tau tias yog checksum ntawm thawj kauj ruam. Tom qab ntawd peb ntxiv qhov chaws, rau cov duab theem tshiab peb xam nws cov checksum... Cov haujlwm no tau rov ua dua rau txhua theem, vim li ntawd peb tau txais cov duab theem. Tom qab ntawd peb ua cov duab kawg, uas tseem muaj cov metadata txog nws keeb kwm. Thiab peb tag cov duab no nyob rau hauv ntau txoj kev (cov ntsiab lus tom qab).

werf - peb cov cuab yeej rau CI / CD hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Piv txwv tias tom qab qhov kev cog lus tshiab tshwm sim uas tsuas yog daim ntawv thov code tau hloov pauv. Yuav ua li cas? Rau cov cai hloov pauv, ib thaj yuav raug tsim thiab yuav npaj cov duab tshiab. Nws kos npe yuav raug txiav txim raws li qhov checksum ntawm cov duab theem qub thiab thaj tshiab. Daim duab kawg tshiab yuav raug tsim los ntawm daim duab no. Cov cwj pwm zoo sib xws yuav tshwm sim nrog kev hloov pauv hauv lwm theem.

Yog li, cov duab theem yog lub cache uas tuaj yeem muab faib ua ke, thiab cov duab uas twb tau tsim los ntawm nws tau muab xa mus rau Docker Registry.

werf - peb cov cuab yeej rau CI / CD hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Ntxuav lub npe

Peb tsis tau tham txog kev tshem tawm cov khaubncaws sab nraud povtseg uas tseem dai tom qab tshem cov cim npe - qhov no yog tus qauv ntawm Docker Registry nws tus kheej. Peb tab tom tham txog qhov xwm txheej thaum Docker tag ntau ntau thiab peb nkag siab tias peb tsis xav tau qee qhov ntawm lawv, tab sis lawv siv qhov chaw (thiab / lossis peb them rau nws).

Cov tswv yim ntxuav tu yog dab tsi?

  1. Koj tsuas yog ua tsis tau dab tsi tsis huv. Qee lub sij hawm nws yooj yim dua los them me ntsis rau qhov chaw ntxiv dua li kom tshem tawm qhov sib txuam loj ntawm cov cim npe. Tab sis qhov no tsuas yog ua haujlwm mus txog ib qho chaw.
  2. Rov pib dua. Yog tias koj rho tawm tag nrho cov duab thiab rov tsim dua cov tam sim no hauv CI system, qhov teeb meem yuav tshwm sim. Yog tias lub thawv rov pib dua hauv kev tsim khoom, cov duab tshiab yuav raug thauj khoom rau nws - ib qho uas tseem tsis tau sim los ntawm leej twg. Qhov no tua lub tswv yim ntawm kev hloov tsis tau cov infrastructure.
  3. Xiav-ntsuab. Ib daim ntawv teev npe pib dhau - peb muab cov duab tso rau lwm qhov. Qhov teeb meem tib yam li hauv txoj kev dhau los: ntawm qhov twg koj tuaj yeem tshem tawm cov npe uas tau pib dhau?
  4. Txog sijhawm. Rho tawm tag nrho cov duab laus dua 1 lub hlis? Tab sis yeej yuav muaj qhov kev pabcuam uas tsis tau hloov kho rau ib hlis ...
  5. Manually txiav txim siab dab tsi tuaj yeem raug tshem tawm.

Muaj ob txoj kev xaiv tau tiag tiag: tsis txhob ntxuav lossis ua ke ntawm xiav-ntsuab + manually. Nyob rau hauv rooj plaub tom kawg, peb tab tom tham txog cov hauv qab no: thaum koj nkag siab tias nws yog lub sijhawm los ntxuav cov npe, koj tsim ib qho tshiab thiab ntxiv tag nrho cov duab tshiab rau nws nyob rau lub sijhawm, piv txwv li, ib hlis. Thiab tom qab ib hlis, saib cov pods twg hauv Kubernetes tseem siv cov ntawv teev npe qub, thiab hloov lawv mus rau qhov chaw sau npe tshiab.

Peb tau tuaj dab tsi werf? Peb sau:

  1. Git lub taub hau: tag nrho cov cim npe, tag nrho cov ceg - xav tias peb xav tau txhua yam uas tau sau rau hauv Git hauv cov duab (thiab yog tias tsis yog, peb yuav tsum rho tawm hauv Git nws tus kheej);
  2. tag nrho cov pods uas tam sim no tau tawm mus rau Kubernetes;
  3. qub ReplicaSets (dab tsi nyuam qhuav tso tawm), thiab peb kuj npaj yuav luam theej duab Helm tso tawm thiab xaiv cov duab tshiab nyob rau ntawd.

... thiab ua ib daim ntawv teev npe dawb ntawm cov teeb no - ib daim ntawv teev cov duab uas peb yuav tsis rho tawm. Peb ntxuav tawm txhua yam ntxiv, tom qab ntawd peb pom cov duab me nyuam ntsuag thiab rho tawm ib yam nkaus.

Deploy theem

Txhim khu kev tshaj tawm

Thawj lub ntsiab lus uas kuv xav kom mloog rau hauv kev xa tawm yog qhov kev nthuav tawm ntawm cov kev hloov kho tshiab, tshaj tawm tshaj tawm. Thawj YAML cov ntaub ntawv piav txog Kubernetes cov peev txheej ib txwm txawv ntawm qhov tshwm sim tau khiav hauv pawg. Vim Kubernetes ntxiv rau kev teeb tsa:

  1. cov cim;
  2. cov ntaub ntawv kev pabcuam;
  3. ntau yam tseem ceeb;
  4. ntu nrog cov xwm txheej tam sim no;
  5. kev hloov pauv tau ua ib feem ntawm qhov nkag webhook;
  6. qhov tshwm sim ntawm kev ua hauj lwm ntawm ntau yam controllers (thiab cov teem caij).

Yog li ntawd, thaum ib tug tshiab resource configuration tshwm (tshiab), peb tsis tuaj yeem nqa thiab sau qhov tam sim no, "nyob" kev teeb tsa nrog nws (nyob). Ua li no peb yuav tau sib piv tshiab nrog rau qhov kawg siv configuration (siv kawg) thiab dov mus rau nyob tau txais thaj.

Txoj kev no hu ua 2-txoj kev sib koom ua ke. Nws yog siv, piv txwv li, hauv Helm.

Kuj muaj 3-txoj kev sib koom ua ke, uas txawv ntawm qhov ntawd:

  • sib piv siv kawg ΠΈ tshiab, peb saib dab tsi yog deleted;
  • sib piv tshiab ΠΈ nyob, peb saib dab tsi tau ntxiv los yog hloov;
  • lub summed thaj yog siv rau nyob.

Peb xa 1000+ daim ntawv thov nrog Helm, yog li peb yeej nyob nrog 2 txoj kev sib koom ua ke. Txawm li cas los xij, nws muaj ntau yam teeb meem uas peb tau daws nrog peb thaj ua rau thaj, uas pab Helm ua haujlwm ib txwm muaj.

Qhov tseeb rollout xwm txheej

Tom qab peb CI system tsim ib qho kev teeb tsa tshiab rau Kubernetes raws li qhov tshwm sim tom ntej, nws xa nws mus rau kev siv. ( thov ) mus rau ib pawg - siv Helm los yog kubectl apply. Tom ntej no, qhov twb tau piav qhia N-txoj kev sib koom ua ke tshwm sim, uas Kubernetes API teb pom zoo rau CI system, thiab qhov ntawd rau nws cov neeg siv.

werf - peb cov cuab yeej rau CI / CD hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Txawm li cas los xij, muaj qhov teeb meem loj: tom qab tag nrho kev ua tiav daim ntawv thov tsis txhais hais tias kev ua tiav tiav. Yog tias Kubernetes nkag siab txog qhov kev hloov pauv uas yuav tsum tau siv thiab siv nws, peb tseem tsis paub tias qhov txiaj ntsig yuav zoo li cas. Piv txwv li, kev hloov kho thiab rov pib dua cov pods hauv frontend yuav ua tiav, tab sis tsis yog nyob rau hauv lub backend, thiab peb yuav tau txais txawv versions ntawm daim ntawv thov dluab.

Txhawm rau ua txhua yam kom raug, cov tswv yim no yuav tsum muaj qhov txuas ntxiv - tus neeg taug qab tshwj xeeb uas yuav tau txais cov ntaub ntawv xwm txheej los ntawm Kubernetes API thiab xa mus rau kev tshuaj xyuas ntxiv ntawm lub xeev tiag tiag. Peb tsim ib lub tsev qiv ntawv Qhib Qhov Chaw hauv Go - kub (saib nws cov lus tshaj tawm no), uas daws qhov teeb meem no thiab ua rau hauv werf.

Tus cwj pwm ntawm tus neeg taug qab no ntawm qib werf yog teeb tsa siv cov lus piav qhia uas tau muab tso rau hauv Deployments lossis StatefulSets. Main annotation - fail-mode - nkag siab cov ntsiab lus hauv qab no:

  • IgnoreAndContinueDeployProcess - peb tsis quav ntsej txog cov teeb meem ntawm dov tawm cov khoom no thiab txuas ntxiv xa mus;
  • FailWholeDeployProcessImmediately - ib qho kev ua yuam kev hauv cov khoom no nres cov txheej txheem xa mus;
  • HopeUntilEndOfDeployProcess - Peb cia siab tias cov khoom siv no yuav ua haujlwm thaum kawg ntawm kev xa mus.

Piv txwv li, qhov sib xyaw ua ke ntawm cov peev txheej thiab cov ntsiab lus tseem ceeb fail-mode:

werf - peb cov cuab yeej rau CI / CD hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Thaum peb xa tawm thawj zaug, cov ntaub ntawv (MongoDB) tej zaum yuav tsis tau npaj txhij - Kev xa tawm yuav ua tsis tiav. Tab sis koj tuaj yeem tos lub sijhawm rau nws pib, thiab kev xa tawm tseem yuav tshwm sim.

Muaj ob lub ntsiab lus ntxiv rau kubedog hauv werf:

  • failures-allowed-per-replica - tus naj npawb ntawm kev tso cai ntog rau txhua qhov replica;
  • show-logs-until - tswj lub sijhawm kom txog rau thaum twg werf qhia (hauv stdout) cov ntawv teev lus los ntawm txhua cov ntaub qhwv tawm. Lub neej ntawd yog PodIsReady (kom tsis quav ntsej cov lus uas peb tej zaum tsis xav tau thaum lub tsheb pib tuaj rau hauv lub plhaub), tab sis qhov tseem ceeb kuj siv tau: ControllerIsReady ΠΈ EndOfDeploy.

Dab tsi ntxiv peb xav tau los ntawm kev xa tawm?

Ntxiv nrog rau ob lub ntsiab lus uas tau piav qhia, peb xav tau:

  • mus saib cov ntaub ntawv - thiab tsuas yog qhov tsim nyog, thiab tsis yog txhua yam ua ke;
  • taug qab kev vam meej, vim hais tias yog txoj hauj lwm hangs "tsaus" rau ob peb feeb, nws yog ib qho tseem ceeb kom to taub dab tsi tshwm sim nyob rau ntawd;
  • kom muaj tsis siv neeg rollback nyob rau hauv cov ntaub ntawv ib yam dab tsi mus tsis ncaj ncees lawm (thiab yog li ntawd nws yog ib qho tseem ceeb kom paub qhov tseeb raws li txoj cai ntawm deployment). Lub rollout yuav tsum yog atomic: txawm tias nws mus txog rau thaum kawg, lossis txhua yam rov qab mus rau nws lub xeev dhau los.

Cov txiaj ntsim tau los

Rau peb ua ib lub tuam txhab, siv tag nrho cov lus piav qhia ntawm ntau theem ntawm kev xa khoom (tsim, tshaj tawm, xa tawm), CI system thiab kev siv hluav taws xob txaus. werf.

Hloov qhov kev txiav txim siab:

werf - peb cov cuab yeej rau CI / CD hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Nrog kev pab los ntawm werf, peb tau ua tiav zoo hauv kev daws teeb meem ntau rau DevOps engineers thiab yuav zoo siab yog tias cov zej zog thoob plaws tsawg kawg tau sim cov khoom siv no hauv kev nqis tes ua. Nws yuav yooj yim dua kom ua tiav qhov txiaj ntsig zoo ua ke.

Yeeb yaj duab thiab slides

Video los ntawm kev ua yeeb yam (~ 47 feeb):

Kev nthuav qhia ntawm daim ntawv qhia:

PS

Lwm cov lus ceeb toom txog Kubernetes ntawm peb qhov blog:

Tau qhov twg los: www.hab.com

Ntxiv ib saib