Peb qhov kev tshawb pom los ntawm ib xyoos ntawm kev tsiv GitLab.com rau Kubernetes

Nco tseg. txhais.: Kubernetes kev saws me nyuam ntawm GitLab yog suav tias yog ib qho ntawm ob qho tseem ceeb ua rau lub tuam txhab txoj kev loj hlob. Txawm li cas los xij, txog thaum tsis ntev los no, cov txheej txheem ntawm GitLab.com kev pabcuam online tau tsim los ntawm cov tshuab virtual, thiab tsuas yog kwv yees li ib xyoos dhau los nws txoj kev tsiv mus rau K8s pib, uas tseem tsis tau tiav. Peb txaus siab los nthuav tawm cov lus txhais ntawm ib tsab xov xwm tsis ntev los no los ntawm GitLab SRE tus kws tshaj lij txog qhov no tshwm sim li cas thiab qhov kev txiav txim siab dab tsi cov engineers koom nrog hauv txoj haujlwm tsim.

Peb qhov kev tshawb pom los ntawm ib xyoos ntawm kev tsiv GitLab.com rau Kubernetes

Txog ib xyoos tam sim no, peb qhov kev faib vaj tse tau hloov pauv tag nrho cov kev pabcuam khiav ntawm GitLab.com rau Kubernetes. Lub sijhawm no, peb tau ntsib cov teeb meem cuam tshuam tsis yog tsuas yog hloov cov kev pabcuam mus rau Kubernetes, tab sis kuj tseem tswj hwm kev xa tawm hybrid thaum lub sijhawm hloov pauv. Cov lus qhia tseem ceeb uas peb tau kawm yuav raug tham hauv kab lus no.

Txij thaum pib ntawm GitLab.com, nws cov servers tau khiav hauv huab ntawm cov tshuab virtual. Cov tshuab virtual no tau tswj hwm los ntawm Tus Kws Ua Haujlwm thiab nruab nrog peb official Linux pob. Kev xa tawm tswv yim Nyob rau hauv rooj plaub uas daim ntawv thov yuav tsum tau hloov kho, muaj tsuas yog hloov kho cov neeg rau zaub mov fleet nyob rau hauv ib tug sib koom tes, raws li zoo raws li siv ib tug CI pipeline. Txoj kev no - txawm tias qeeb thiab me ntsis laj laj - xyuas kom meej tias GitLab.com siv tib lub teeb tsa thiab teeb tsa kev coj ua raws li cov neeg siv offline (kev tswj tus kheej) GitLab kev teeb tsa siv peb cov pob Linux rau qhov no.

Peb siv txoj kev no vim tias nws yog ib qho tseem ceeb heev kom muaj kev nyuaj siab thiab kev xyiv fab uas cov tswv cuab hauv zej zog tau ntsib thaum txhim kho thiab teeb tsa lawv cov ntawv theej ntawm GitLab. Txoj hauv kev no ua haujlwm tau zoo rau qee lub sijhawm, tab sis thaum tus naj npawb ntawm cov haujlwm ntawm GitLab tau tshaj 10 lab, peb pom tau tias nws tsis ua raws li peb cov kev xav tau rau kev ntsuas thiab xa tawm.

Thawj kauj ruam mus rau Kubernetes thiab huab-native GitLab

Qhov project tau tsim nyob rau hauv 2017 GitLab Charts los npaj GitLab rau huab xa tawm, thiab kom cov neeg siv nruab GitLab ntawm Kubernetes pawg. Peb paub tom qab ntawd tias kev txav GitLab mus rau Kubernetes yuav ua rau kom muaj peev xwm ntawm SaaS platform, ua kom yooj yim rau kev xa mus, thiab txhim kho kev ua haujlwm ntawm kev siv nyiaj txiag. Nyob rau tib lub sijhawm, ntau txoj haujlwm ntawm peb daim ntawv thov yog nyob ntawm mounted NFS partitions, uas ua rau qeeb ntawm kev hloov ntawm cov tshuab virtual.

Kev thawb mus rau huab ib txwm nyob thiab Kubernetes tso cai rau peb cov engineers los npaj kev hloov pauv hloov maj mam, thaum lub sijhawm peb tau tso tseg qee qhov ntawm daim ntawv thov kev vam khom ntawm lub network cia thaum txuas ntxiv txhim kho cov yam ntxwv tshiab. Txij li thaum peb tau pib npaj kev tsiv teb tsaws chaw nyob rau lub caij ntuj sov 2019, ntau qhov kev txwv no tau raug daws lawm, thiab cov txheej txheem ntawm kev tsiv teb tsaws GitLab.com rau Kubernetes tam sim no tau ua tiav zoo!

Nta ntawm GitLab.com hauv Kubernetes

Rau GitLab.com, peb siv ib lub cheeb tsam GKE pawg uas tswj hwm txhua daim ntawv thov tsheb. Txhawm rau txo qhov nyuaj ntawm kev tsiv teb tsaws (tam sim no tsis yooj yim), peb tsom mus rau cov kev pabcuam uas tsis cia siab rau hauv zos cia lossis NFS. GitLab.com siv feem ntau monolithic Rails codebase, thiab peb xa cov tsheb khiav raws li cov yam ntxwv ntawm kev ua haujlwm rau cov ntsiab lus sib txawv uas raug cais rau hauv lawv tus kheej cov pas dej.

Nyob rau hauv rooj plaub ntawm frontend, cov hom no tau muab faib ua kev thov rau lub vev xaib, API, Git SSH / HTTPS thiab Registry. Nyob rau hauv cov ntaub ntawv ntawm lub backend, peb faib cov hauj lwm nyob rau hauv lub queue raws li ntau yam yam ntxwv nyob ntawm seb predefined ciam teb chaw, uas tso cai rau peb los teeb tsa Cov Hom Phiaj Qib Siab (SLOs) rau ntau yam haujlwm.

Tag nrho cov kev pabcuam GitLab.com no tau teeb tsa siv daim ntawv qhia tsis hloov GitLab Helm. Configuration yog nqa tawm nyob rau hauv subcharts, uas yuav xaiv tau enabled thaum peb maj mam tsiv cov kev pab cuam mus rau pawg. Txawm hais tias peb txiav txim siab tsis suav nrog qee qhov ntawm peb cov kev pabcuam hauv lub xeev hauv kev tsiv teb tsaws, xws li Redis, Postgres, GitLab Nplooj ntawv thiab Gitaly, siv Kubernetes tso cai rau peb txo qis tus naj npawb ntawm VMs uas kws ua zaub mov tam sim no tswj hwm.

Kubernetes Configuration Visibility thiab Management

Txhua qhov chaw yog tswj hwm los ntawm GitLab nws tus kheej. Rau qhov no, peb txoj haujlwm teeb tsa raws li Terraform thiab Helm yog siv. Peb sim siv GitLab nws tus kheej thaum twg ua tau los khiav GitLab, tab sis rau kev ua haujlwm peb muaj kev sib cais GitLab. Qhov no yog qhov xav tau los xyuas kom meej tias koj tsis nyob ntawm qhov muaj ntawm GitLab.com thaum ua GitLab.com xa tawm thiab hloov tshiab.

Txawm hais tias peb cov kav dej rau Kubernetes pawg khiav ntawm qhov kev teeb tsa GitLab cais, muaj cov iav ntawm cov chaw khaws ntaub ntawv uas tau tshaj tawm rau pej xeem ntawm qhov chaw nyob hauv qab no:

  • k8s-workloads/gitlab-com - GitLab.com configuration moj khaum rau GitLab Helm daim ntawv;
  • k8s-workloads/gitlab-helmfiles - Muaj kev teeb tsa rau cov kev pabcuam uas tsis cuam tshuam ncaj qha nrog daim ntawv thov GitLab. Cov no suav nrog kev teeb tsa rau kev txiav thiab saib xyuas pawg, nrog rau cov cuab yeej sib xyaw xws li PlantUML;
  • Gitlab-com-infrastructure - Terraform configuration rau Kubernetes thiab qub VM infrastructure. Ntawm no koj teeb tsa tag nrho cov peev txheej tsim nyog los khiav pawg, suav nrog pawg nws tus kheej, ntawm lub pas dej, cov nyiaj pabcuam, thiab chaw nyob IP chaw nyob.

Peb qhov kev tshawb pom los ntawm ib xyoos ntawm kev tsiv GitLab.com rau Kubernetes
Kev saib pej xeem raug pom thaum muaj kev hloov pauv. luv luv nrog rau qhov txuas mus rau cov ncauj lus kom ntxaws qhov sib txawv uas SRE tshuaj xyuas ua ntej hloov pauv rau pawg.

Rau SRE, qhov txuas ua rau cov ncauj lus kom ntxaws qhov sib txawv hauv GitLab installation, uas yog siv rau kev tsim khoom thiab kev nkag mus rau qhov txwv. Qhov no tso cai rau cov neeg ua haujlwm thiab cov zej zog, tsis muaj kev nkag mus rau qhov haujlwm ua haujlwm (uas tsuas yog qhib rau SREs), saib cov kev hloov pauv uas tau thov. Los ntawm kev sib txuas cov pej xeem GitLab piv txwv rau cov cai nrog tus kheej piv txwv rau CI cov kav dej, peb tuav ib qho kev ua haujlwm thaum ua kom muaj kev ywj pheej los ntawm GitLab.com rau kev hloov kho tshiab.

Qhov peb pom thaum lub sijhawm tsiv teb tsaws chaw

Thaum lub sijhawm txav mus los, tau txais kev paub dhau los uas peb siv rau kev tsiv teb tsaws tshiab thiab kev xa tawm hauv Kubernetes.

1. Cov nqi nce ntxiv vim kev tsheb khiav ntawm thaj chaw muaj

Peb qhov kev tshawb pom los ntawm ib xyoos ntawm kev tsiv GitLab.com rau Kubernetes
Txhua hnub egress txheeb cais (bytes ib hnub) rau Git repository fleet ntawm GitLab.com

Google faib nws lub network rau hauv cheeb tsam. Cov, nyob rau hauv lem, muab faib mus rau hauv accessibility zones (AZ). Git hosting yog txuam nrog ntau cov ntaub ntawv, yog li nws yog ib qho tseem ceeb rau peb tswj lub network egress. Rau kev khiav tsheb sab hauv, egress tsuas yog dawb yog tias nws nyob hauv tib thaj chaw muaj. Raws li kev sau ntawv no, peb tab tom ua haujlwm kwv yees li 100 TB ntawm cov ntaub ntawv hauv ib hnub ua haujlwm (thiab qhov ntawd tsuas yog rau Git repositories). Cov kev pabcuam uas nyob hauv tib lub tshuab virtual hauv peb cov qub VM-raws li topology tam sim no khiav hauv Kubernetes pods sib txawv. Qhov no txhais tau hais tias qee qhov kev khiav tsheb uas yav dhau los hauv zos rau VM tuaj yeem taug kev sab nraud ntawm thaj chaw muaj.

Cov pawg GKE hauv cheeb tsam tso cai rau koj nthuav dav ntau thaj chaw muaj rau kev rov ua dua. Peb tab tom xav txog qhov ua tau faib lub regional GKE pawg rau hauv ib cheeb tsam ib pawg rau cov kev pabcuam uas tsim kom muaj tsheb khiav ntau. Qhov no yuav txo cov nqi egress thaum tswj xyuas pawg-theem redundancy.

2. Kev txwv, kev thov kev pab thiab scaling

Peb qhov kev tshawb pom los ntawm ib xyoos ntawm kev tsiv GitLab.com rau Kubernetes
Tus naj npawb ntawm replicas ua cov tsheb khiav ntawm registry.gitlab.com. Tsheb thauj mus los siab tshaj ntawm ~ 15: 00 UTC.

Peb zaj dab neeg tsiv teb tsaws chaw pib thaum Lub Yim Hli 2019, thaum peb tsiv teb tsaws peb thawj qhov kev pabcuam, GitLab Container Registry, mus rau Kubernetes. Lub hom phiaj tseem ceeb, kev pabcuam tsheb thauj mus los no yog qhov kev xaiv zoo rau thawj qhov kev tsiv teb tsaws chaw vim tias nws yog daim ntawv thov tsis muaj neeg nyob nrog ob peb sab nraud. Thawj qhov teeb meem peb tau ntsib yog coob tus ntawm kev tshem tawm cov pods vim tsis muaj lub cim xeeb ntawm cov nodes. Vim li no, peb yuav tsum hloov kev thov thiab txwv.

Nws tau pom tias nyob rau hauv cov ntaub ntawv ntawm ib daim ntawv thov uas nco noj nce nyob rau hauv lub sij hawm, tsis tshua muaj nqi rau kev thov (reserving nco rau txhua pod) ua ke nrog ib tug "siab dav" nyuaj txwv ntawm kev siv coj mus rau saturation. (saturation) nodes thiab qib siab ntawm kev ntiab tawm. Txhawm rau daws qhov teeb meem no, nws yog nws tau txiav txim siab kom nce kev thov thiab txo qis. Qhov no coj lub siab tawm ntawm cov nodes thiab xyuas kom cov pods muaj lub neej voj voog uas tsis tso siab ntau dhau ntawm cov node. Tam sim no peb pib tsiv teb tsaws nrog siab dav (thiab yuav luag zoo ib yam) thov thiab txwv qhov tseem ceeb, kho lawv raws li qhov tsim nyog.

3. Metrics thiab cav

Peb qhov kev tshawb pom los ntawm ib xyoos ntawm kev tsiv GitLab.com rau Kubernetes
Cov kev faib vaj tse tsom rau latency, qhov yuam kev tus nqi thiab saturation nrog ntsia cov hom phiaj qib kev pabcuam (SLO) linked to muaj dav dav ntawm peb qhov system.

Nyob rau hauv xyoo tas los no, ib qho ntawm cov xwm txheej tseem ceeb hauv kev faib vaj tse yog kev txhim kho hauv kev saib xyuas thiab ua haujlwm nrog SLOs. SLOs tau tso cai rau peb los teeb tsa lub hom phiaj rau cov kev pabcuam tus kheej uas peb tau saib xyuas zoo thaum tsiv teb tsaws chaw. Tab sis txawm tias nrog qhov kev soj ntsuam zoo dua, nws tsis yog ib txwm ua tau kom pom cov teeb meem tam sim ntawd siv cov ntsuas ntsuas thiab ceeb toom. Piv txwv li, los ntawm kev tsom mus rau latency thiab kev ua yuam kev tus nqi, peb tsis tau them tag nrho cov kev siv rau ib qho kev pab cuam uas tab tom tsiv teb tsaws chaw.

Qhov teeb meem no tau pom yuav luag tam sim ntawd tom qab tsiv qee qhov chaw ua haujlwm mus rau pawg. Nws tau dhau los ua mob hnyav heev thaum peb yuav tsum tau kuaj xyuas cov haujlwm uas tus lej ntawm kev thov tsawg, tab sis uas muaj qhov tshwj xeeb ntawm qhov kev cia siab. Ib qho ntawm cov lus qhia tseem ceeb los ntawm kev tsiv teb tsaws yog qhov yuav tsum tau coj mus rau hauv tus account tsis yog tsuas yog kev ntsuas thaum saib xyuas, tab sis kuj suav nrog thiab "ntev Tail" (qhov no yog hais txog xws li lawv tis ntawm daim duab - approx. txhais.) yuam kev. Tam sim no rau txhua qhov kev tsiv teb tsaws chaw peb suav nrog cov ncauj lus kom ntxaws ntawm cov lus nug hauv cav (cov lus nug) thiab npaj cov txheej txheem rollback meej uas tuaj yeem hloov ntawm ib qho mus rau lwm qhov yog tias muaj teeb meem tshwm sim.

Kev pabcuam tib yam kev thov nyob rau tib lub sijhawm ntawm VM cov txheej txheem qub thiab Kubernetes-raws li kev tsim kho tshiab tau nthuav tawm qhov kev sib tw tshwj xeeb. Tsis zoo li lift-and-shift migration (Kev hloov pauv sai ntawm cov ntawv thov "raws li yog" rau cov txheej txheem tshiab; cov ntsiab lus ntxiv tuaj yeem nyeem, piv txwv li, no - kwv yees. txhais.), ua haujlwm ua ke ntawm "laus" VMs thiab Kubernetes xav kom cov cuab yeej saib xyuas tau sib haum nrog ob qho tib si ib puag ncig thiab tuaj yeem ua ke cov kev ntsuas rau hauv ib qho kev pom. Nws yog ib qho tseem ceeb uas peb siv tib lub dashboards thiab teev cov lus nug kom ua tiav kev soj ntsuam zoo ib yam thaum lub sijhawm hloov pauv.

4. Hloov tsheb mus rau ib pawg tshiab

Rau GitLab.com, ib feem ntawm cov servers tau mob siab rau canary theem. Canary Park pab peb cov haujlwm sab hauv thiab tuaj yeem ua tau enabled los ntawm cov neeg siv. Tab sis nws yog feem ntau tsim los sim cov kev hloov pauv tau ua rau kev tsim kho vaj tse thiab kev siv. Thawj qhov kev pabcuam tsiv teb tsaws chaw pib los ntawm kev lees txais cov tsheb thauj mus los tsawg tsawg, thiab peb txuas ntxiv siv txoj hauv kev no kom ntseeg tau tias SLOs tau ntsib ua ntej xa tag nrho cov tsheb mus rau pawg.

Nyob rau hauv rooj plaub ntawm kev tsiv teb tsaws, qhov no txhais tau hais tias kev thov rau cov haujlwm sab hauv raug xa mus rau Kubernetes ua ntej, thiab tom qab ntawd peb maj mam hloov qhov seem ntawm cov tsheb mus rau pawg los ntawm kev hloov qhov hnyav rau qhov backend los ntawm HAProxy. Thaum lub sij hawm tsiv teb tsaws los ntawm VM mus rau Kubernetes, nws tau pom tseeb tias nws muaj txiaj ntsig zoo kom muaj txoj hauv kev yooj yim rau kev hloov tsheb ntawm cov qub thiab tshiab infrastructure thiab, raws li, khaws cov qub infrastructure npaj rau rollback nyob rau hauv thawj ob peb hnub tom qab tsiv teb tsaws.

5. Khaws lub peev xwm ntawm cov pods thiab lawv siv

Yuav luag tam sim ntawd cov teeb meem hauv qab no tau txheeb xyuas: pods rau qhov kev pab cuam Registry pib sai, tab sis launching pods rau Sidekiq coj mus rau ob feeb. Lub sijhawm pib ua haujlwm ntev rau Sidekiq pods tau dhau los ua qhov teeb meem thaum peb pib tsiv chaw ua haujlwm rau Kubernetes rau cov neeg ua haujlwm uas yuav tsum tau ua haujlwm sai thiab ntsuas nrawm.

Hauv qhov no, zaj lus qhia yog tias thaum Kubernetes 'Horizontal Pod Autoscaler (HPA) ua haujlwm kev loj hlob zoo, nws yog ib qho tseem ceeb uas yuav tau xav txog cov yam ntxwv ntawm cov khoom ua haujlwm thiab faib cov peev xwm seem rau cov pods (tshwj xeeb tshaj yog thaum kev thov tsis sib xws). Hauv peb qhov xwm txheej, muaj kev ua haujlwm sai sai, ua rau muaj kev ntsuas nrawm, uas ua rau kom muaj kev txaus siab ntawm CPU cov peev txheej ua ntej peb muaj sijhawm los ntsuas lub pas dej.

Muaj ib txwm muaj kev ntxias kom nyem ntau npaum li qhov ua tau tawm ntawm pawg, txawm li cas los xij, tau pib ntsib teeb meem kev ua tau zoo, tam sim no peb tab tom pib nrog cov pob nyiaj siv dav dav thiab txo qis tom qab, ua tib zoo saib ntawm SLOs. Launching pods rau qhov kev pabcuam Sidekiq tau nrawm nrawm thiab tam sim no siv sijhawm li 40 vib nas this ntawm qhov nruab nrab. Los ntawm txo lub sij hawm tso tawm ntawm pods yeej ob qho tib si GitLab.com thiab peb cov neeg siv ntawm tus kheej tswj kev teeb tsa ua haujlwm nrog GitLab Helm daim ntawv qhia.

xaus

Tom qab tsiv txhua qhov kev pabcuam, peb zoo siab rau cov txiaj ntsig ntawm kev siv Kubernetes hauv kev tsim khoom: kev xa tawm sai dua thiab kev nyab xeeb dua, kev nthuav dav, thiab kev faib cov peev txheej zoo dua. Ntxiv mus, qhov zoo ntawm kev tsiv teb tsaws mus dhau qhov kev pabcuam GitLab.com. Txhua qhov kev txhim kho rau daim ntawv qhia Helm tau txais txiaj ntsig zoo rau nws cov neeg siv.

Kuv vam tias koj yuav nyiam zaj dab neeg ntawm peb Kubernetes taug txuj kev nyuaj. Peb txuas ntxiv mus hloov tag nrho cov kev pabcuam tshiab rau pawg. Cov ntaub ntawv ntxiv tuaj yeem nrhiav tau hauv cov ntawv tshaj tawm hauv qab no:

PS los ntawm tus txhais lus

Nyeem kuj ntawm peb blog:

Tau qhov twg los: www.hab.com

Ntxiv ib saib