3-txoj kev sib koom ua ke rau werf: xa mus rau Kubernetes nrog Helm "ntawm steroids"

Qhov peb (thiab tsis yog peb xwb) tau tos ntev heev tau tshwm sim: werf, peb qhov chaw qhib qhov hluav taws xob rau kev tsim cov ntawv thov thiab xa lawv mus rau Kubernetes, tam sim no txhawb kev hloov pauv siv 3-txoj kev sib koom ua ke thaj ua rau thaj! Ntxiv rau qhov no, nws muaj peev xwm txais yuav K8s cov peev txheej uas twb muaj lawm rau hauv Helm tso tawm yam tsis muaj kev tsim kho cov peev txheej no.

3-txoj kev sib koom ua ke rau werf: xa mus rau Kubernetes nrog Helm "ntawm steroids"

Yog tias nws luv heev, ces peb muab WERF_THREE_WAY_MERGE=enabled - Peb tau txais kev xa tawm "raws li hauv kubectl apply", sib xws nrog Helm 2 kev teeb tsa uas twb muaj lawm thiab txawm tias me ntsis ntxiv.

Tab sis cia peb pib nrog txoj kev xav: dab tsi tiag tiag yog 3-txoj kev sib koom ua ke thaj ua rau thaj, tib neeg tuaj nrog txoj hauv kev los tsim lawv, thiab vim li cas lawv tseem ceeb hauv cov txheej txheem CI / CD nrog Kubernetes-based infrastructure? Thiab tom qab ntawd, cia peb pom dab tsi 3-txoj kev sib koom ua ke yog nyob rau hauv werf, hom twg siv los ntawm lub neej ntawd thiab yuav ua li cas tswj nws.

Dab tsi yog 3-txoj kev-kev sib txuas ua ke?

Yog li, cia peb pib nrog txoj haujlwm ntawm dov tawm cov peev txheej tau piav qhia hauv YAML tshwm sim rau Kubernetes.

Txhawm rau ua haujlwm nrog cov peev txheej, Kubernetes API muaj cov haujlwm hauv qab no: tsim, kho, hloov thiab rho tawm. Nws yog xav tias nrog lawv cov kev pab nws yog tsim nyog los tsim kom tau ib tug yooj yim mus tas li rollout ntawm cov kev pab cuam rau pawg. Yuav ua li cas?

kubectl imperative commands

Thawj txoj hauv kev los tswj cov khoom hauv Kubernetes yog siv kubectl cov lus txib tseem ceeb los tsim, hloov kho, thiab tshem tawm cov khoom ntawd. Cias muab:

  • pab kubectl run Koj tuaj yeem khiav Deployment lossis Txoj Haujlwm:
    kubectl run --generator=deployment/apps.v1 DEPLOYMENT_NAME --image=IMAGE
  • pab kubectl scale - hloov tus naj npawb ntawm replicas:
    kubectl scale --replicas=3 deployment/mysql
  • thiab ua li ntawd.

Txoj kev no yuav zoo li yooj yim thaum xub thawj siab ib muag. Txawm li cas los xij muaj teeb meem:

  1. Nws nyuaj tshuab.
  2. Yuav ua li cas xav configuration hauv Git? Yuav tshuaj xyuas cov kev hloov pauv tshwm sim li cas rau pawg?
  3. Yuav muab li cas kev yug dua tshiab configurations ntawm restart?
  4. ...

Nws yog qhov tseeb tias txoj hauv kev no tsis haum zoo nrog kev khaws cia daim ntawv thov thiab kev tsim kho vaj tse raws li cov cai (IaC; lossis txawm GitOps raws li kev xaiv niaj hnub no, tau txais koob meej hauv Kubernetes ecosystem). Yog li ntawd, cov lus txib no tsis tau txais kev txhim kho ntxiv hauv kubectl.

Tsim, tau, hloov thiab rho tawm haujlwm

Nrog thawj tsim nws yooj yim: xa cov manifest mus rau kev ua haujlwm create kube api thiab cov peev txheej tau tsim. YAML tus sawv cev ntawm qhov manifest tuaj yeem khaws cia hauv Git thiab tsim siv cov lus txib kubectl create -f manifest.yaml.

Π‘ tshem tawm kuj yooj yim: hloov tib yam manifest.yaml los ntawm Git mus rau pab pawg kubectl delete -f manifest.yaml.

Ua haujlwm replace tso cai rau koj los hloov tag nrho cov peev txheej configuration nrog ib qho tshiab, tsis tas yuav rov tsim cov peev txheej. Qhov no txhais tau hais tias ua ntej hloov mus rau ib qho kev pab cuam, nws yog qhov tsim nyog los nug cov ntawv tam sim no nrog kev ua haujlwm get, hloov nws thiab hloov kho nws nrog kev ua haujlwm replace. kube apiserver yog ua nyob rau hauv optimistic xauv thiab, yog tias tom qab phais get cov khoom tau hloov, ces qhov kev ua haujlwm replace nws yuav tsis ua haujlwm.

Txhawm rau khaws cov kev teeb tsa hauv Git thiab hloov kho nws siv hloov, koj yuav tsum ua qhov haujlwm get, ua ke cov config los ntawm Git nrog qhov peb tau txais, thiab ua tiav replace. Los ntawm lub neej ntawd, kubectl tsuas tso cai rau koj siv cov lus txib kubectl replace -f manifest.yamlqhov twg manifest.yaml - ib qho kev npaj txhij txhua (hauv peb rooj plaub, sib koom ua ke) tshwm sim uas yuav tsum tau teeb tsa. Nws hloov tawm hais tias tus neeg siv yuav tsum tau siv cov kev sib koom ua ke, thiab qhov no tsis yog qhov tsis tseem ceeb ...

Nws tseem tsim nyog sau cia txawm tias manifest.yaml thiab khaws cia hauv Git, peb tsis tuaj yeem paub ua ntej seb nws puas tsim nyog los tsim ib qho khoom lossis hloov kho nws - qhov no yuav tsum tau ua los ntawm cov neeg siv software.

Tag nrho: peb tuaj yeem tsim qhov kev nthuav tawm tas mus li tsuas yog siv tsim, hloov thiab tshem tawm, kom ntseeg tau tias cov txheej txheem teeb tsa tau khaws cia hauv Git nrog rau cov cai thiab yooj yim CI / CD?

Hauv txoj ntsiab cai, peb tuaj yeem ... Rau qhov no koj yuav tsum tau siv qhov kev sib koom ua ke manifestos thiab qee yam kev khi uas:

  • tshawb xyuas qhov muaj ib yam khoom hauv pawg,
  • ua haujlwm pib tsim cov peev txheej,
  • hloov tshiab los yog deletes nws.

Thaum hloov kho, thov nco ntsoov tias tej zaum yuav muaj kev hloov pauv txij thaum kawg get thiab cia li lis cov ntaub ntawv ntawm optimistic locking - ua dua tshiab sim.

Txawm li cas los xij, vim li cas rov tsim lub log thaum kube-apiserver muaj lwm txoj hauv kev los hloov kho cov peev txheej: kev ua haujlwm patch, uas relieves tus neeg siv ntawm ib co ntawm cov piav qhia txog teeb meem?

thaj

Tam sim no peb mus rau qhov chaw.

Patches yog thawj txoj hauv kev los siv cov kev hloov pauv rau cov khoom uas twb muaj lawm hauv Kubernetes. Kev ua haujlwm patch nws ua haujlwm zoo li no:

  • tus neeg siv kube-apiserver xav tau xa ib thaj hauv JSON daim ntawv thiab qhia cov khoom,
  • thiab apiserver nws tus kheej yuav cuam tshuam nrog lub xeev tam sim no ntawm cov khoom thiab coj mus rau hauv daim ntawv xav tau.

Optimistic xauv tsis tas yuav tsum muaj nyob rau hauv rooj plaub no. Qhov kev ua haujlwm no tau tshaj tawm ntau dua li hloov, txawm tias thaum xub thawj nws yuav zoo li lwm txoj hauv kev.

Txoj kev no:

  • siv kev ua haujlwm create peb tsim ib yam khoom raws li qhov manifest los ntawm Git,
  • nrog kev pab delete - rho tawm yog tias qhov khoom tsis xav tau lawm,
  • nrog kev pab patch - peb hloov cov khoom, coj nws mus rau daim ntawv piav qhia hauv Git.

Txawm li cas los xij, ua qhov no, koj yuav tsum tsim yog thaj!

Yuav ua li cas patches ua hauj lwm nyob rau hauv Helm 2: 2-txoj kev-merge

Thaum koj thawj qhov kev tso tawm, Helm ua haujlwm create rau daim ntawv qhia chaw.

Thaum hloov kho Helm tso tawm rau txhua qhov peev txheej:

  • txiav txim siab thaj tsam ntawm cov peev txheej los ntawm daim ntawv teev dhau los thiab daim ntawv qhia tam sim no,
  • siv thaj ua rau thaj no.

Peb yuav hu lub thaj no 2-txoj kev sib koom ua ke, vim 2 manifestos koom nrog hauv nws cov creation:

  • cov ntaub ntawv manifest los ntawm kev tso tawm dhau los,
  • cov peev txheej manifest los ntawm cov peev txheej tam sim no.

Thaum tshem tawm kev ua haujlwm delete hauv kube apiserver yog hu rau cov peev txheej uas tau tshaj tawm hauv qhov kev tso tawm dhau los, tab sis tsis tshaj tawm hauv qhov tam sim no.

Txoj kev 2 txoj kev sib koom ua ke thaj ua rau muaj teeb meem: nws ua rau tawm ntawm sync nrog lub xeev tiag tiag ntawm cov peev txheej hauv pawg thiab qhov tshwm sim hauv Git.

Piv txwv ntawm qhov teeb meem nrog ib qho piv txwv

  • Hauv Git, ib daim duab khaws cov khoom lag luam hauv qhov chaw image Kev xa tawm tseem ceeb ubuntu:18.04.
  • Tus neeg siv ntawm kubectl edit hloov tus nqi ntawm daim teb no rau ubuntu:19.04.
  • Thaum rov xa daim ntawv Helm tsis tsim ib thaj,vim taj image nyob rau hauv lub dhau los version ntawm kev tso tawm thiab nyob rau hauv daim ntawv tam sim no yog tib yam.
  • Tom qab rov ua haujlwm image seem ubuntu:19.04, txawm tias daim ntawv hais tias ubuntu:18.04.

Peb tau txais desynchronization thiab poob kev tshaj tawm.

Dab tsi yog qhov kev pabcuam synchronized?

Feem ntau hais lus ua tiav Nws yog tsis yooj yim sua kom tau txais kev sib tw ntawm cov peev txheej manifest hauv pawg khiav thiab qhov tshwm sim los ntawm Git. Vim hais tias nyob rau hauv ib tug tiag tiag manifest tej zaum yuav muaj kev pab cuam annotations / daim ntawv lo, ntxiv ntim thiab lwm yam ntaub ntawv uas tau ntxiv thiab tshem tawm los ntawm cov kev pab cuam dynamically los ntawm ib co controllers. Peb tsis tuaj yeem thiab tsis xav khaws cov ntaub ntawv no hauv Git. Txawm li cas los xij, peb xav kom cov teb uas peb tau teev meej meej hauv Git los coj cov txiaj ntsig tsim nyog thaum rollout.

Nws puv tawm thiaj li dav synchronized resource txoj cai: thaum dov tawm cov peev txheej, koj tuaj yeem hloov lossis tshem tawm tsuas yog cov teb uas tau teev meej meej hauv qhov tshwm sim los ntawm Git (lossis tau teev tseg hauv cov ntawv dhau los thiab tam sim no raug tshem tawm).

3-txoj kev sib koom ua ke

Lub tswv yim tseem ceeb 3-txoj kev sib koom ua ke: peb tsim ib thaj nruab nrab ntawm qhov kawg thov version ntawm qhov manifest los ntawm Git thiab lub hom phiaj version ntawm lub manifest los ntawm Git, coj mus rau hauv tus account lub tam sim no version ntawm lub manifest los ntawm cov khiav pawg. Cov txiaj ntsig thaj yuav tsum ua raws li txoj cai tswj hwm kev siv khoom siv:

  • teb tshiab ntxiv rau lub hom phiaj version yog ntxiv siv ib thaj;
  • yav tas los cov teb uas twb muaj lawm nyob rau hauv lub xeem thov version thiab tsis muaj nyob rau hauv lub hom phiaj version yog pib dua siv ib thaj;
  • teb nyob rau hauv lub tam sim no version ntawm cov khoom uas txawv ntawm lub hom phiaj version ntawm lub manifest yog kho tshiab siv lub thaj.

Nws yog nyob ntawm txoj cai no uas nws tsim thaj ua rau thaj kubectl apply:

  • qhov kawg thov version ntawm qhov manifest yog khaws cia rau hauv cov lus piav qhia ntawm cov khoom nws tus kheej,
  • phiaj - muab los ntawm YAML cov ntaub ntawv,
  • qhov tam sim no yog los ntawm pawg khiav.

Tam sim no uas peb tau txheeb xyuas qhov kev xav, nws yog lub sijhawm los qhia koj tias peb tau ua dab tsi hauv werf.

Siv cov kev hloov pauv rau werf

Yav dhau los, werf, zoo li Helm 2, siv 2-txoj kev-merge thaj ua rau thaj.

Kho thaj

Txhawm rau hloov mus rau hom tshiab thaj ua rau thaj - 3-txoj kev-merge - thawj kauj ruam peb tau qhia txog qhov hu ua kho thaj ua rau thaj.

Thaum xa tawm, tus qauv 2-txoj kev sib koom ua ke yog siv, tab sis werf kuj tseem tsim ib thaj chaw uas yuav synchronize lub xeev tiag tiag ntawm cov peev txheej nrog cov ntawv sau hauv Git (xws li ib thaj yog tsim siv tib txoj cai synchronized peev txheej tau piav qhia saum toj no) .

Yog tias qhov desynchronization tshwm sim, thaum kawg ntawm kev xa tawm tus neeg siv tau txais lus ceeb toom nrog cov lus sib xws thiab thaj uas yuav tsum tau siv los nqa cov peev txheej mus rau ib daim ntawv synchronized. Lub thaj no kuj tau sau tseg hauv cov lus piav qhia tshwj xeeb werf.io/repair-patch. Nws yog xav tias tus neeg siv txhais tes nws tus kheej yuav siv thaj chaw no: werf yuav tsis siv nws kiag li.

Kev tsim kho thaj ua rau thaj yog ib qho kev ntsuas ib ntus uas tso cai rau koj los ntsuas qhov tsim cov thaj ua rau thaj raws li 3-txoj kev sib koom ua ke, tab sis tsis txhob siv cov thaj ua rau thaj no. Tam sim no, hom kev ua haujlwm no tau qhib los ntawm lub neej ntawd.

3-txoj kev-merge thaj tsuas yog rau kev tso tawm tshiab

Pib txij lub Kaum Ob Hlis 1, 2019, beta thiab alpha versions ntawm werf pib los vim siv tag nrho-fledged 3-txoj kev-merge thaj ua rau thaj kom siv cov kev hloov pauv tsuas yog rau Helm tshiab tso tawm los ntawm werf. Cov kev tso tawm uas twb muaj lawm yuav txuas ntxiv siv 2-txoj kev-merge + kho thaj ua rau thaj.

Hom kev khiav hauj lwm no tuaj yeem qhib tau meej meej los ntawm kev teeb tsa WERF_THREE_WAY_MERGE_MODE=onlyNewReleases tam sim no.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: lub feature tau tshwm sim nyob rau hauv werf dhau ob peb qhov kev tso tawm: hauv alpha channel nws tau npaj txhij nrog version v1.0.5-alpha.19, thiab hauv beta channel - nrog v1.0.4-beta.20.

3-txoj kev-merge thaj rau txhua qhov kev tso tawm

Pib txij lub Kaum Ob Hlis 15, 2019, beta thiab alpha versions ntawm werf pib siv tag nrho 3-txoj kev-merge thaj ua rau thaj los ntawm lub neej ntawd los siv cov kev hloov pauv rau txhua qhov kev tshaj tawm.

Hom kev khiav hauj lwm no tuaj yeem qhib tau meej meej los ntawm kev teeb tsa WERF_THREE_WAY_MERGE_MODE=enabled tam sim no.

Yuav ua li cas nrog cov peev txheej autoscaling?

Muaj 2 hom autoscaling hauv Kubernetes: HPA (kab rov tav) thiab VPA ( ntsug).

Kab rov tav txiav xaiv tus naj npawb ntawm replicas, ntsug - tus naj npawb ntawm cov peev txheej. Ob tus naj npawb ntawm replicas thiab cov kev cai yuav tsum tau teev nyob rau hauv cov peev txheej manifest (saib Resource Manifest). spec.replicas los yog spec.containers[].resources.limits.cpu, spec.containers[].resources.limits.memory ΠΈ lwm yam).

Teeb meem: yog tias tus neeg siv teeb tsa cov peev txheej hauv daim ntawv qhia kom nws qhia txog qee qhov txiaj ntsig rau cov peev txheej lossis cov khoom siv rov ua dua thiab cov autoscalers tau qhib rau cov peev txheej no, tom qab ntawd nrog txhua qhov kev xa tawm werf yuav rov pib dua cov txiaj ntsig no rau qhov tau sau rau hauv daim ntawv qhia. .

Muaj ob txoj kev daws teeb meem. Yuav pib nrog, nws yog qhov zoo tshaj kom tsis txhob qhia meej meej autoscaled qhov tseem ceeb hauv daim ntawv qhia. Yog tias qhov kev xaiv no tsis haum rau qee qhov laj thawj (piv txwv li, vim tias nws yooj yim los teeb tsa cov peev txheej thawj zaug thiab tus lej ntawm cov ntawv luam tawm), ces werf muab cov lus piav qhia hauv qab no:

  • werf.io/set-replicas-only-on-creation=true
  • werf.io/set-resources-only-on-creation=true

Yog tias muaj cov lus piav qhia zoo li no, werf yuav tsis rov pib dua cov txiaj ntsig zoo ntawm txhua qhov kev xa tawm, tab sis tsuas yog teeb tsa lawv thaum cov peev txheej pib tsim.

Yog xav paub ntxiv, saib cov ntaub ntawv ua haujlwm rau HPA ΠΈ VPA.

Txwv tsis pub siv 3-txoj kev sib koom ua ke

Tus neeg siv tam sim no tuaj yeem txwv tsis pub siv thaj ua rau thaj tshiab hauv werf siv ib puag ncig hloov pauv WERF_THREE_WAY_MERGE_MODE=disabled. Txawm li cas los xij, pib Txij lub Peb Hlis 1, 2020, qhov kev txwv no yuav tsis siv ntxiv lawm. thiab nws tsuas yog siv tau 3-txoj kev-merge thaj ua rau thaj.

Kev siv cov peev txheej hauv werf

Kev paub txog kev siv cov kev hloov pauv nrog 3-txoj kev sib koom ua ke ua rau peb tuaj yeem siv tam sim ntawd cov yam ntxwv xws li txais cov peev txheej uas muaj nyob hauv pawg rau hauv Helm tso tawm.

Helm 2 muaj teeb meem: koj tsis tuaj yeem ntxiv cov peev txheej rau daim duab qhia uas twb muaj lawm hauv pawg yam tsis tau rov tsim cov peev txheej no los ntawm kos (saib. #6031, #3275). Peb qhia werf kom lees txais cov peev txheej uas twb muaj lawm rau kev tso tawm. Txhawm rau ua qhov no, koj yuav tsum nruab ib qho kev piav qhia ntawm qhov tam sim no ntawm cov peev txheej los ntawm pawg khiav (piv txwv li, siv kubectl edit):

"werf.io/allow-adoption-by-release": RELEASE_NAME

Tam sim no cov peev txheej yuav tsum tau piav qhia hauv daim ntawv qhia thiab lub sijhawm tom ntej werf xa tawm kev tso tawm nrog lub npe tsim nyog, cov peev txheej uas twb muaj lawm yuav raug lees txais rau hauv qhov kev tso tawm no thiab nyob hauv nws txoj kev tswj hwm. Tsis tas li ntawd, nyob rau hauv tus txheej txheem ntawm kev lees txais cov peev txheej rau kev tso tawm, werf yuav coj lub xeev tam sim no ntawm cov peev txheej los ntawm pawg khiav mus rau lub xeev tau piav qhia hauv daim duab, siv tib 3-txoj kev sib koom ua ke thaj ua rau thaj thiab cov kev cai sib koom ua ke.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: kev teeb tsa WERF_THREE_WAY_MERGE_MODE tsis cuam tshuam rau kev saws me nyuam - nyob rau hauv cov ntaub ntawv ntawm kev saws me nyuam, ib tug 3-txoj kev-merge patch yog ib txwm siv.

Paub meej - hauv cov ntaub ntawv.

Cov lus xaus thiab cov phiaj xwm yav tom ntej

Kuv vam tias tom qab kab lus no nws tau ua kom pom tseeb tias 3-txoj kev sib koom ua ke yog dab tsi thiab vim li cas lawv tuaj rau lawv. Los ntawm qhov ua tau zoo ntawm kev pom ntawm kev txhim kho ntawm qhov project werf, lawv qhov kev siv yog lwm kauj ruam ntawm kev txhim kho Helm-zoo li xa mus. Tam sim no koj tuaj yeem hnov ​​​​qab txog cov teeb meem nrog kev teeb tsa synchronization, uas feem ntau tshwm sim thaum siv Helm 2. Tib lub sijhawm, qhov tseem ceeb tshiab ntawm kev siv cov peev txheej Kubernetes twb tau muab ntxiv rau Helm tso tawm.

Tseem muaj qee qhov teeb meem thiab teeb meem nrog Helm-zoo li kev xa tawm, xws li kev siv Go templates, uas peb yuav txuas ntxiv mus.

Cov ntaub ntawv hais txog cov txheej txheem hloov tshiab thiab kev saws me nyuam kuj tuaj yeem pom ntawm nplooj ntawv no.

Helm 3

Tsim nyog sau ntawv tshwj xeeb tso tawm Tsuas yog lwm hnub tus tshiab loj version ntawm Helm - v3 - uas tseem siv 3-txoj kev sib koom ua ke thaj ua rau thaj thiab tshem tawm Tiller. Tus tshiab version ntawm Helm yuav tsum tau kev tsiv teb tsaws chaw cov kev teeb tsa uas twb muaj lawm los hloov lawv mus rau hauv cov ntawv tso tawm tshiab cia.

Werf, rau nws feem, tam sim no tau tshem ntawm kev siv Tiller, hloov mus rau 3-txoj kev-merge thiab ntxiv ntau ntxiv, thaum tseem sib xws nrog Helm 2 kev teeb tsa uas twb muaj lawm (tsis muaj ntawv hloov pauv yuav tsum tau ua). Yog li ntawd, kom txog thaum werf hloov mus rau Helm 3, cov neeg siv werf tsis poob qhov zoo ntawm Helm 3 dhau Helm 2 (werf kuj muaj lawv).

Txawm li cas los xij, kev hloov ntawm werf mus rau Helm 3 codebase yog qhov kev zam thiab yuav tshwm sim nyob rau yav tom ntej. Nco ntsoov tias qhov no yuav yog werf 1.1 lossis werf 1.2 (thaum lub sijhawm no, lub ntsiab ntawm werf yog 1.0; rau cov ntaub ntawv ntxiv txog cov khoom siv werf, saib no). Lub sijhawm no, Helm 3 yuav muaj sijhawm kom ruaj khov.

PS

Nyeem kuj ntawm peb blog:

Tau qhov twg los: www.hab.com

Ntxiv ib saib