Autoscaling thiab kev tswj cov peev txheej hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Lub Plaub Hlis 27 ntawm lub rooj sib tham Strike 2019, raws li ib feem ntawm "DevOps", daim ntawv tshaj tawm "Nws pib ntsuas thiab tswj cov peev txheej hauv Kubernetes" tau muab. Nws tham txog yuav ua li cas koj tuaj yeem siv K8s kom ntseeg tau tias muaj ntau yam ntawm koj daim ntawv thov thiab ua kom muaj kev ua tau zoo tshaj plaws.

Autoscaling thiab kev tswj cov peev txheej hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Los ntawm kev lig kev cai, peb txaus siab los qhia video ntawm tsab ntawv ceeb toom (44 feeb, ntau cov ntaub ntawv ntau dua li tsab xov xwm) thiab cov ntsiab lus tseem ceeb hauv daim ntawv. Mus!

Cia peb txheeb xyuas lub ntsiab lus ntawm cov lus tshaj tawm los ntawm lo lus thiab pib ntawm qhov kawg.

Kubernetes

Cia peb hais tias peb muaj Docker ntim ntawm peb tus tswv tsev. Rau dab tsi? Txhawm rau kom rov ua dua thiab kev cais tawm, uas nyob rau hauv lem tso cai rau yooj yim thiab zoo xa mus, CI / CD. Peb muaj ntau lub tsheb zoo li no nrog ntim.

Kubernetes muab dab tsi hauv qhov no?

  1. Peb tsis xav txog cov tshuab no thiab pib ua haujlwm nrog "huab" pawg ntim khoom los yog pods (paub pawg ntawm ntim).
  2. Ntxiv mus, peb tsis txawm xav txog cov pods ntawm tus kheej, tab sis tswj hwm ntau duaΠΎpawg loj. Xws li qib primitives tso cai rau peb hais tias muaj ib tug qauv rau kev khiav ib tug tej yam workload, thiab ntawm no yog yuav tsum tau tus naj npawb ntawm cov zaus los khiav nws. Yog tias peb hloov tus qauv tom qab, txhua qhov xwm txheej yuav hloov.
  3. Nrog kev pab los ntawm declarative API Hloov chaw ntawm kev ua tiav ib ntu ntawm cov lus txib tshwj xeeb, peb piav qhia txog "cov qauv ntawm lub ntiaj teb" (hauv YAML), uas yog tsim los ntawm Kubernetes. Thiab dua: thaum cov lus piav qhia hloov, nws cov duab tiag kuj yuav hloov.

Kev tswj cov peev txheej

CPU

Cia peb khiav nginx, php-fpm thiab mysql ntawm lub server. Cov kev pabcuam no yuav muaj ntau cov txheej txheem khiav, txhua qhov yuav tsum tau siv cov ntaub ntawv suav:

Autoscaling thiab kev tswj cov peev txheej hauv Kubernetes (saib xyuas thiab tshaj tawm video)
(cov lej ntawm tus swb yog "parrots", qhov xav tau ntawm txhua tus txheej txheem rau kev suav lub zog)

Txhawm rau ua kom yooj yim rau kev ua haujlwm nrog qhov no, nws yog qhov tsim nyog los ua ke cov txheej txheem rau hauv pawg (piv txwv li, tag nrho cov txheej txheem nginx rau hauv ib pawg "nginx"). Ib txoj hauv kev yooj yim thiab pom tseeb ua qhov no yog muab txhua pab pawg hauv ib lub thawv:

Autoscaling thiab kev tswj cov peev txheej hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Txhawm rau txuas ntxiv, koj yuav tsum nco ntsoov tias lub thawv yog dab tsi (hauv Linux). Lawv cov tsos tau ua tau ua tsaug rau peb qhov tseem ceeb hauv cov ntsiav, siv tau ntev dhau los: muaj peev xwm, cov npe ΠΈ pawg. Thiab kev txhim kho ntxiv tau txhawb nqa los ntawm lwm cov thev naus laus zis (xws li "plhaub" yooj yim zoo li Docker):

Autoscaling thiab kev tswj cov peev txheej hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Nyob rau hauv cov ntsiab lus ntawm tsab ntawv ceeb toom, peb tsuas yog txaus siab rau pawg, vim tias cov pab pawg tswj hwm yog ib feem ntawm kev ua haujlwm ntawm cov ntim khoom (Docker, thiab lwm yam) uas siv kev tswj hwm kev tswj hwm. Cov txheej txheem ua ke rau hauv pab pawg, raws li peb xav tau, yog pawg tswj hwm.

Cia peb rov qab mus rau CPU qhov yuav tsum tau ua rau cov txheej txheem no, thiab tam sim no rau pawg txheej txheem:

Autoscaling thiab kev tswj cov peev txheej hauv Kubernetes (saib xyuas thiab tshaj tawm video)
(Kuv rov hais dua tias txhua tus lej yog qhov kev qhia paub daws teeb meem ntawm kev xav tau cov peev txheej)

Nyob rau tib lub sijhawm, CPU nws tus kheej muaj cov peev txheej tshwj xeeb (hauv qhov piv txwv no yog 1000), uas txhua leej txhua tus yuav tsis muaj (qhov suav ntawm qhov xav tau ntawm txhua pab pawg yog 150 + 850 + 460 = 1460). Yuav ua li cas rau qhov no?

Lub kernel pib faib cov peev txheej thiab ua nws "zoo", muab cov peev txheej tib yam rau txhua pab pawg. Tab sis nyob rau hauv thawj rooj plaub, muaj ntau tshaj ntawm lawv xav tau (333> 150), yog li qhov tshaj (333-150 = 183) tseem nyob rau hauv cia, uas yog sib npaug faib ntawm ob lub thawv:

Autoscaling thiab kev tswj cov peev txheej hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Raws li qhov tshwm sim: thawj lub thawv muaj peev txheej txaus, qhov thib ob - nws tsis muaj peev txheej txaus, qhov thib peb - ​​nws tsis muaj peev txheej txaus. Qhov no yog qhov tshwm sim ntawm kev ua "siab ncaj" teem sijhawm hauv Linux - CFS. Nws txoj haujlwm tuaj yeem hloov kho siv txoj haujlwm tes taw hnyav li txhua lub thawv. Piv txwv li, zoo li no:

Autoscaling thiab kev tswj cov peev txheej hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Cia peb saib cov ntaub ntawv ntawm qhov tsis muaj peev txheej hauv lub thawv thib ob (php-fpm). Tag nrho cov peev txheej ntim tau muab faib sib npaug ntawm cov txheej txheem. Yog li ntawd, tus txheej txheem tus tswv ua haujlwm tau zoo, tab sis txhua tus neeg ua haujlwm qeeb, tau txais tsawg dua ib nrab ntawm qhov lawv xav tau:

Autoscaling thiab kev tswj cov peev txheej hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Qhov no yog li cas CFS teem sijhawm ua haujlwm. Peb yuav ntxiv hu rau qhov hnyav uas peb muab rau cov thawv thov. Vim li cas qhov no yog li ntawd - saib ntxiv.

Cia peb saib tag nrho cov xwm txheej ntawm sab nraud. Raws li koj paub, txhua txoj kev coj mus rau Rome, thiab nyob rau hauv rooj plaub ntawm lub computer, mus rau CPU. Ib lub CPU, ntau txoj haujlwm - koj xav tau lub teeb tsheb. Txoj hauv kev yooj yim tshaj plaws los tswj cov peev txheej yog "tsheb ciav hlau": lawv tau muab ib txheej txheem rau lub sijhawm nkag mus rau CPU, tom qab ntawd ib qho ntxiv, thiab lwm yam.

Autoscaling thiab kev tswj cov peev txheej hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Txoj kev no hu ua nyuaj quotas (nyuaj limiting). Cia peb nco ntsoov nws yooj yim li txwv. Txawm li cas los xij, yog tias koj faib cov kev txwv rau txhua lub thawv, ib qho teeb meem tshwm sim: mysql tau tsav los ntawm txoj kev thiab qee lub sijhawm nws qhov kev xav tau rau CPU xaus, tab sis tag nrho lwm cov txheej txheem raug yuam kom tos kom txog thaum CPU. tsis ua haujlwm.

Autoscaling thiab kev tswj cov peev txheej hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Cia peb rov qab mus rau Linux ntsiav thiab nws cov kev cuam tshuam nrog CPU - tag nrho cov duab yog raws li hauv qab no:

Autoscaling thiab kev tswj cov peev txheej hauv Kubernetes (saib xyuas thiab tshaj tawm video)

cgroup muaj ob qhov chaw - qhov tseem ceeb no yog ob qho yooj yim "twists" uas tso cai rau koj los txiav txim:

  1. hnyav rau thawv (thov) yog Shares;
  2. feem pua ​​​​ntawm tag nrho CPU lub sijhawm rau kev ua haujlwm ntawm cov haujlwm ntim khoom (tso cai) yog quota.

Yuav ntsuas CPU li cas?

Muaj ntau txoj hauv kev:

  1. Yuav ua li cas parrots, tsis muaj leej twg paub - koj yuav tsum sib tham txhua lub sijhawm.
  2. Paj clearer, tab sis txheeb ze: 50% ntawm ib tug neeg rau zaub mov nrog 4 cores thiab nrog 20 cores yog txawv kiag li.
  3. Koj tuaj yeem siv cov uas twb tau hais lawm tes taw hnyav li, uas Linux paub, tab sis lawv kuj yog cov txheeb ze.
  4. Qhov kev xaiv tsim nyog tshaj plaws yog ntsuas cov peev txheej hauv computer vib nas this. Cov. nyob rau hauv vib nas this ntawm processor lub sij hawm txheeb ze rau vib nas this ntawm lub sij hawm tiag tiag: 1 thib ob ntawm lub sij hawm processor tau muab rau 1 tiag thib ob - qhov no yog ib tug tag nrho CPU core.

Yuav kom hais tau yooj yim dua, lawv pib ntsuas ncaj qha rau hauv cov noob, lub ntsiab lus los ntawm lawv tib lub sijhawm CPU txheeb ze rau qhov tiag. Txij li thaum Linux nkag siab qhov hnyav, tab sis tsis yog CPU ntau lub sij hawm / cores, ib lub tswv yim yuav tsum tau txhais los ntawm ib qho mus rau lwm qhov.

Cia peb xav txog ib qho piv txwv yooj yim nrog cov neeg rau zaub mov nrog 3 CPU cores, qhov twg peb lub pods yuav muab qhov hnyav (500, 1000 thiab 1500) uas tau yooj yim hloov mus rau qhov sib thooj ntawm cov cores faib rau lawv (0,5, 1 thiab 1,5).

Autoscaling thiab kev tswj cov peev txheej hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Yog tias koj siv tus neeg rau zaub mov thib ob, qhov twg yuav muaj ob zaug ntau li ntau cov cores (6), thiab muab tib lub pods rau ntawd, kev faib cov cores tuaj yeem xam tau yooj yim los ntawm kev sib npaug ntawm 2 (1, 2 thiab 3, feem). Tab sis ib lub sij hawm tseem ceeb tshwm sim thaum lub thib plaub pods tshwm nyob rau hauv lub server no, nws qhov hnyav, rau kev yooj yim, yuav yog 3000. Nws yuav siv sij hawm tam sim ntawd ib feem ntawm CPU cov peev txheej (ib nrab ntawm cov cores), thiab rau cov pods uas tseem tshuav lawv raug suav rov qab (ib nrab):

Autoscaling thiab kev tswj cov peev txheej hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Kubernetes thiab CPU cov peev txheej

Hauv Kubernetes, CPU cov peev txheej feem ntau ntsuas hauv milliadrax, i.e. 0,001 cores raug coj los ua qhov hnyav. (Tib yam hauv Linux / cgroups terminology hu ua CPU qhia, txawm hais tias, ntau dua, 1000 millicores = 1024 CPU sib koom.) K8s xyuas kom meej tias nws tsis tso ntau cov pods ntawm lub server dua li muaj cov peev txheej CPU rau qhov sib npaug ntawm qhov hnyav ntawm tag nrho cov pods.

Qhov no tshwm sim li cas? Thaum koj ntxiv ib tus neeg rau zaub mov rau Kubernetes pawg, nws tau tshaj tawm tias muaj pes tsawg CPU cores nws muaj. Thiab thaum tsim lub pod tshiab, Kubernetes tus teem sijhawm paub tias yuav xav tau pes tsawg cores no. Yog li, lub pod yuav raug xa mus rau lub server uas muaj cov cores txaus.

Yuav ua li cas yog tsis qhov kev thov tau teev tseg (piv txwv li lub pod tsis muaj tus lej ntawm cov cores nws xav tau)? Cia peb xav seb Kubernetes feem ntau suav cov peev txheej li cas.

Rau lub pod koj tuaj yeem hais qhia ob qho kev thov (CFS teem sijhawm) thiab txwv (nco txog lub teeb tsheb?):

  • Yog tias lawv tau teev tseg sib npaug, tom qab ntawd cov pod yog muab rau QoS chav kawm lav. Tus naj npawb ntawm cov cores no ib txwm muaj rau nws yog lav.
  • Yog tias qhov kev thov tsawg dua qhov txwv - QoS chav kawm tawg tau. Cov. Peb cia siab tias ib lub pod, piv txwv li, ib txwm siv 1 core, tab sis tus nqi no tsis yog qhov txwv rau nws: qee zaus pod tuaj yeem siv ntau dua (thaum lub server muaj kev pabcuam pub dawb rau qhov no).
  • Kuj tseem muaj QoS chav kawm ua kom zoo tshaj - nws suav nrog cov pods heev uas qhov kev thov tsis tau teev tseg. Cov peev txheej tau muab rau lawv kawg.

nco

Nrog kev nco, qhov xwm txheej zoo sib xws, tab sis txawv me ntsis - tom qab tag nrho, qhov xwm txheej ntawm cov peev txheej no txawv. Feem ntau, cov analogy yog raws li nram no:

Autoscaling thiab kev tswj cov peev txheej hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Cia peb saib yuav ua li cas thov tau siv hauv kev nco. Cia cov pods nyob rau hauv lub server, hloov lub cim xeeb noj, kom txog rau thaum ib tug ntawm lawv tau loj heev uas nws tsis nco qab. Hauv qhov no, OOM killer tshwm thiab tua cov txheej txheem loj tshaj plaws:

Autoscaling thiab kev tswj cov peev txheej hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Qhov no tsis yog ib txwm haum rau peb, yog li nws muaj peev xwm tswj tau cov txheej txheem twg tseem ceeb rau peb thiab tsis txhob tua. Txhawm rau ua qhov no, siv qhov parameter oom_score_adj.

Cia peb rov qab mus rau QoS cov chav kawm ntawm CPU thiab kos ib qho piv txwv nrog oom_score_adj qhov tseem ceeb uas txiav txim siab qhov tseem ceeb ntawm kev noj haus rau cov pods:

  • Qhov qis tshaj oom_score_adj tus nqi rau ib lub pod - -998 - txhais tau hais tias xws li lub pod yuav tsum raug tua kawg, qhov no lav.
  • Qhov siab tshaj plaws - 1000 - yog ua kom zoo tshaj, xws li cov pods raug tua ua ntej.
  • Txhawm rau xam cov nqi ntxiv (tawg tau) muaj ib tug formula, lub essence ntawm uas boils mus rau qhov tseeb hais tias qhov ntau cov kev pab cuam lub pod tau thov, qhov tsawg dua nws yuav raug tua.

Autoscaling thiab kev tswj cov peev txheej hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Qhov thib ob "twist" - limit_in_bytes - rau qhov txwv. Nrog nws, txhua yam yog yooj yim dua: peb tsuas yog muab qhov siab tshaj plaws ntawm kev tso tawm lub cim xeeb, thiab ntawm no (tsis zoo li CPU) tsis muaj lus nug txog kev ntsuas nws li cas (nco).

Tag nrho

Txhua lub pod hauv Kubernetes tau muab requests ΠΈ limits - ob qho tib si rau CPU thiab nco:

  1. Raws li kev thov, Kubernetes teem sijhawm ua haujlwm, uas faib cov pods ntawm cov servers;
  2. raws li tag nrho cov kev txwv, lub pod's QoS chav kawm yog txiav txim siab;
  3. Tus txheeb ze qhov hnyav yog xam raws li CPU thov;
  4. lub CFS teem sij hawm yog configured raws li CPU thov;
  5. OOM killer tau teeb tsa raws li kev thov nco;
  6. ib qho "tsheb ciav hlau" raug teeb tsa raws li CPU txwv;
  7. Raws li kev txwv kev nco, qhov txwv tau teeb tsa rau cgroup.

Autoscaling thiab kev tswj cov peev txheej hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Feem ntau, daim duab no teb tag nrho cov lus nug txog yuav ua li cas feem ntau ntawm kev tswj hwm cov peev txheej tshwm sim hauv Kubernetes.

Autoscaling

K8s pawg-autoscaler

Cia peb xav txog tias tag nrho pawg twb tau nyob thiab yuav tsum tau tsim ib lub pod tshiab. Thaum lub pod tsis tuaj yeem tshwm sim, nws dai rau hauv xwm txheej tseem tos. Rau nws tshwm sim, peb tuaj yeem txuas tus neeg rau zaub mov tshiab rau pawg lossis ... nruab pawg-autoscaler, uas yuav ua rau peb: xaj lub tshuab virtual los ntawm huab muab (siv API thov) thiab txuas rau pawg. , tom qab ntawd lub pod yuav ntxiv.

Autoscaling thiab kev tswj cov peev txheej hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Qhov no yog autoscaling ntawm Kubernetes pawg, uas ua haujlwm zoo (hauv peb qhov kev paub dhau los). Txawm li cas los xij, zoo li lwm qhov, muaj qee qhov nuances ntawm no ...

Ntev npaum li peb nce pawg loj, txhua yam zoo, tab sis yuav ua li cas thaum pawg pib tso nws tus kheej? Qhov teeb meem yog tias migrating pods (kom dawb hosts) yog technically nyuaj thiab kim nyob rau hauv cov nqe lus ntawm kev pab. Kubernetes siv txoj hauv kev sib txawv kiag li.

Xav txog ib pawg ntawm 3 servers uas muaj Deployment. Nws muaj 6 pods: tam sim no muaj 2 rau txhua tus neeg rau zaub mov. Rau qee yam peb xav tua ib qho ntawm cov servers. Ua li no peb yuav siv cov lus txib kubectl drain, uas:

  • yuav txwv tsis pub xa cov pods tshiab rau lub server no;
  • yuav tshem tawm cov pods uas twb muaj lawm ntawm lub server.

Txij li thaum Kubernetes yog lub luag haujlwm tswj hwm tus naj npawb ntawm cov pods (6), nws yooj yim yuav rov tsim dua lawv ntawm lwm cov nodes, tab sis tsis yog nyob rau ntawm ib tug neeg xiam oob qhab, vim nws twb tau cim tias tsis muaj rau hosting tshiab pods. Nov yog tus kws kho tsheb tseem ceeb rau Kubernetes.

Autoscaling thiab kev tswj cov peev txheej hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Txawm li cas los xij, muaj qhov nuance ntawm no thiab. Nyob rau hauv ib qho xwm txheej zoo sib xws, rau StatefulSet (es tsis yog Deployment), cov kev ua yuav txawv. Tam sim no peb twb muaj ib daim ntawv thov tseem ceeb - piv txwv li, peb lub pods nrog MongoDB, ib qho uas muaj qee yam teeb meem (cov ntaub ntawv tau ua corrupted los yog lwm qhov yuam kev uas tiv thaiv lub plhaub taum pib kom raug). Thiab peb rov txiav txim siab lov tes taw ib lub server. Yuav ua li cas?

Autoscaling thiab kev tswj cov peev txheej hauv Kubernetes (saib xyuas thiab tshaj tawm video)

MongoDB yuav tuag vim nws xav tau pawg pawg: rau ib pawg ntawm peb qhov kev teeb tsa, tsawg kawg ob yuav tsum ua haujlwm. Txawm li cas los xij, qhov no tsis tshwm sim - ua tsaug rau PodDisruptionBudget. Qhov kev ntsuas no txiav txim siab yam tsawg kawg nkaus uas yuav tsum tau muaj ntawm cov pods ua haujlwm. Paub tias ib qho ntawm MongoDB pods tsis ua haujlwm lawm, thiab pom tias PodDisruptionBudget yog teem rau MongoDB minAvailable: 2, Kubernetes yuav tsis tso cai rau koj rho tawm ib lub pod.

Cov kab hauv qab: txhawm rau txhawm rau txav (thiab qhov tseeb, qhov rov tsim dua) ntawm cov pods ua haujlwm kom raug thaum cov pawg raug tso tawm, nws yog qhov tsim nyog los teeb tsa PodDisruptionBudget.

Kab rov tav scaling

Cia peb xav txog lwm qhov xwm txheej. Muaj ib daim ntawv thov khiav raws li Kev Tshaj Tawm hauv Kubernetes. Cov neeg siv kev khiav tsheb tuaj rau nws cov pods (piv txwv li, muaj peb ntawm lawv), thiab peb ntsuas qee qhov ntsuas hauv lawv (hais, CPU load). Thaum lub load nce, peb sau qhov no ntawm ib lub sij hawm thiab nce tus naj npawb ntawm cov pods los faib kev thov.

Niaj hnub no nyob rau hauv Kubernetes qhov no tsis tas yuav tsum tau ua manually: ib qho kev nce / txo qis ntawm tus naj npawb ntawm cov pods tau teeb tsa nyob ntawm qhov tseem ceeb ntawm cov ntsuas ntsuas ntsuas.

Autoscaling thiab kev tswj cov peev txheej hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Cov lus nug tseem ceeb ntawm no yog: ntsuas raws nraim li cas ΠΈ txhais li cas tau txais txiaj ntsig (rau kev txiav txim siab hloov pauv tus naj npawb ntawm cov pods). Koj tuaj yeem ntsuas ntau:

Autoscaling thiab kev tswj cov peev txheej hauv Kubernetes (saib xyuas thiab tshaj tawm video)

Yuav ua li cas qhov no technically - sau metrics, thiab lwm yam. - Kuv tau hais meej meej hauv daim ntawv qhia txog Saib xyuas thiab Kubernetes. Thiab cov lus qhia tseem ceeb rau kev xaiv qhov zoo tshaj plaws tsis yog kev sim!

muaj Siv txoj kev (Kev siv Saturation thiab yuam kev), lub ntsiab lus uas yog raws li nram no. Ntawm lub hauv paus dab tsi nws ua rau kev txiav txim siab, piv txwv li, php-fpm? Raws li qhov tseeb tias cov neeg ua haujlwm khiav tawm, qhov no yog kev siv. Thiab yog tias cov neeg ua haujlwm dhau mus thiab tsis tau txais kev sib txuas tshiab, qhov no yog lawm kev tsuas xyaus. Ob qho ntawm cov kev ntsuas no yuav tsum tau ntsuas, thiab nyob ntawm qhov muaj nuj nqis, kev ntsuas yuav tsum tau ua.

Es tsis txhob ib tug xaus

Daim ntawv tshaj tawm muaj kev txuas ntxiv: hais txog kev ntsuas ntsug thiab xaiv cov peev txheej zoo li cas. Kuv yuav tham txog qhov no hauv cov yeeb yaj kiab yav tom ntej ntawm peb YouTube - subscribe kom koj tsis txhob plam!

Yeeb yaj duab thiab slides

Video los ntawm kev ua yeeb yam (44 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