Kubernetes nan DomClick: kijan pou dòmi anpè jere yon gwoup 1000 mikwosèvis

Non mwen se Viktor Yagofarov, epi mwen ap devlope platfòm Kubernetes nan DomClick kòm yon manadjè devlopman teknik nan ekip Ops (operasyon). Mwen ta renmen pale sou estrikti pwosesis Dev <-> Ops nou yo, karakteristik opere youn nan pi gwo gwoup k8s yo nan Larisi, ansanm ak pratik DevOps/SRE ke ekip nou an aplike.

Kubernetes nan DomClick: kijan pou dòmi anpè jere yon gwoup 1000 mikwosèvis

Ekip Ops

Ekip Ops la gen 15 moun kounye a. Twa nan yo responsab pou biwo a, de travay nan yon zòn lè diferan epi yo disponib, enkli nan mitan lannwit. Kidonk, yon moun ki soti nan Ops toujou nan monitè a ak pare pou reponn a yon ensidan nan nenpòt ki konpleksite. Nou pa gen orè lannwit, ki prezève psyche nou yo ak bay tout moun opòtinite pou jwenn ase dòmi ak pase tan amizman pa sèlman nan òdinatè a.

Kubernetes nan DomClick: kijan pou dòmi anpè jere yon gwoup 1000 mikwosèvis

Tout moun gen diferan konpetans: rezo, DBA, espesyalis pile ELK, administratè / devlopè Kubernetes, siveyans, Virtualization, espesyalis pyès ki nan konpitè, elatriye. Yon sèl bagay ini tout moun - tout moun ka ranplase nenpòt nan nou nan yon sèten mezi: pou egzanp, prezante nouvo nœuds nan gwoup k8s la, mete ajou PostgreSQL, ekri yon tiyo CI/CD + Ansible, otomatize yon bagay nan Python/Bash/Go, konekte pyès ki nan konpitè ak Sant done. Konpetans solid nan nenpòt domèn pa anpeche w chanje direksyon aktivite w epi kòmanse amelyore nan kèk lòt domèn. Pou egzanp, mwen te rantre nan yon konpayi kòm yon espesyalis PostgreSQL, e kounye a, zòn prensipal mwen an nan responsablite se grap Kubernetes. Nan ekip la, nenpòt wotè se akeyi ak sans nan ogmante trè devlope.

By wout la, nou ap lachas. Kondisyon pou kandida yo se byen estanda. Pou mwen pèsonèlman, li enpòtan ke yon moun anfòm nan ekip la, ki pa gen konfli, men tou konnen ki jan yo defann pwen de vi li, vle devlope epi li pa pè fè yon bagay nouvo, ofri lide li. Epitou, konpetans pwogramasyon nan lang scripting, konesans nan Basics yo nan Linux ak angle yo obligatwa. Angle a bezwen tou senpleman pou yon moun nan ka yon fakap ka google yon solisyon a pwoblèm nan nan 10 segonn, epi yo pa nan 10 minit. Kounye a li trè difisil pou jwenn espesyalis ki gen konesans pwofon nan Linux: li komik, men de sou twa kandida pa ka reponn kesyon an "Ki sa ki chaj mwayèn? Ki sa li fè? ", ak kesyon an "Ki jan yo rasanble yon pil fatra nwayo nan yon pwogram C" konsidere kòm yon bagay ki soti nan mond lan nan superhuman ... oswa dinozò. Nou dwe sipòte sa a, paske anjeneral moun yo gen anpil lòt konpetans devlope, men nou pral anseye Linux. Repons nan kesyon an "poukisa yon enjenyè DevOps bezwen konnen tout bagay sa yo nan mond lan modèn nan nwaj yo" pral oblije kite deyò sijè ki abòde lan atik la, men nan twa mo: tout sa a nesesè.

Ekip Zouti

Ekip Zouti a jwe yon wòl enpòtan nan automatisation. Travay prensipal yo se kreye zouti grafik ak CLI pratik pou devlopè yo. Pou egzanp, devlopman entèn nou an Confer pèmèt ou literalman woule yon aplikasyon nan Kubernetes ak jis kèk klik sourit, konfigirasyon resous li yo, kle nan vout, elatriye. Précédemment, te gen Jenkins + Helm 2, men mwen te oblije devlope pwòp zouti mwen pou elimine kopye-kole epi pote inifòmite nan sik lavi lojisyèl an.

Ekip Ops la pa ekri tiyo pou devlopè yo, men li ka bay konsèy sou nenpòt pwoblèm nan ekri yo (kèk moun toujou gen Helm 3).

DevOps

Kòm pou DevOps, nou wè li tankou sa a:

Ekip dev yo ekri kòd, woule li atravè Konferans bay dev -> qa/stage -> prod. Responsablite pou asire kòd la pa ralanti epi li pa gen erè se nan ekip Dev ak Ops yo. Nan lajounen, moun ki nan sèvis la nan ekip Ops la ta dwe premye reponn a yon ensidan ak aplikasyon l ', ak nan aswè a ak nan mitan lannwit, administratè a nan devwa (Ops) ta dwe reveye pwomotè a nan sèvis si li konnen pou asire w ke pwoblèm nan se pa nan enfrastrikti a. Tout mezi ak alèt nan siveyans parèt otomatikman oswa semi-otomatikman.

Zòn responsablite Ops la kòmanse soti nan moman aplikasyon an te woule nan pwodiksyon, men responsablite Dev pa fini la - nou fè menm bagay la epi nou nan menm bato a.

Devlopè yo konseye admin yo si yo bezwen èd pou ekri yon mikwosèvis admin (pa egzanp, Go backend + HTML5), ak administratè yo konseye devlopè yo sou nenpòt pwoblèm enfrastrikti oswa pwoblèm ki gen rapò ak k8s.

By wout la, nou pa gen yon monolith ditou, sèlman microservices. Nimewo yo byen lwen tèlman varye ant 900 ak 1000 nan gwoup prod k8s la, si yo mezire pa nimewo. deplwaman. Kantite gous yo varye ant 1700 ak 2000. Kounye a genyen anviwon 2000 gous nan gwoup prod la.

Mwen pa ka bay nimewo egzak, paske nou kontwole mikwosèvis ki pa nesesè epi koupe yo semi-otomatikman. K8s ede nou kenbe tras de antite ki pa nesesè yo initil-operatè, ki sove anpil resous ak lajan.

Jesyon resous

Siveyans

Siveyans byen estriktire ak enfòmatif vin poto prensipal la nan operasyon an nan yon gwo gwoup. Nou poko jwenn yon solisyon inivèsèl ki ta kouvri 100% nan tout bezwen siveyans, kidonk nou detanzantan kreye diferan solisyon koutim nan anviwònman sa a.

  • Zabbix. Bon siveyans fin vye granmoun, ki gen entansyon prensipalman swiv kondisyon an jeneral nan enfrastrikti a. Li di nou lè yon ne mouri an tèm de pwosesis, memwa, disk, rezo, ak sou sa. Pa gen anyen Supernatural, men nou gen tou yon DaemonSet separe nan ajan, avèk èd nan ki, pou egzanp, nou kontwole eta a nan dns nan gwoup la: nou gade pou gous coredns estipid, nou tcheke disponiblite a nan lame ekstèn. Li ta sanble ke poukisa deranje ak sa a, men ak volim gwo nan trafik eleman sa a se yon pwen grav nan echèk. mwen deja dekri, ki jan mwen te plede ak pèfòmans DNS nan yon gwoup.
  • Operatè Prometheus. Yon seri ekspòtatè diferan bay yon gwo apèsi sou tout eleman nan gwoup la. Apre sa, nou vizyalize tout bagay sa yo sou gwo tablodbò nan Grafana, epi sèvi ak alertmanager pou alèt.

Yon lòt zouti itil pou nou te lis antre. Nou te ekri li apre plizyè fwa nou te rankontre yon sitiyasyon kote yon ekip sipèpoze chemen Ingress yon lòt ekip, sa ki lakòz erè 50x. Koulye a, anvan deplwaye nan pwodiksyon, devlopè yo tcheke ke pèsonn pa pral afekte, epi pou ekip mwen an sa a se yon bon zouti pou premye dyagnostik pwoblèm ak Ingresses. Li komik ke okòmansman li te ekri pou admin e li te sanble pito "maladi", men apre ekip dev yo te tonbe nan renmen ak zouti a, li chanje anpil epi li te kòmanse sanble pa "yon admin te fè yon figi entènèt pou admin. ” Byento nou pral abandone zouti sa a ak sitiyasyon sa yo pral valide menm anvan tiyo a woule soti.

Resous ekip nan kib la

Anvan nou antre nan egzanp yo, li vo eksplike kijan nou asiyen resous pou yo mikwosèvis.

Pou konprann ki ekip ak nan ki kantite itilize yo resous yo (prosesè, memwa, SSD lokal), nou asiyen chak lòd pwòp li yo namespace nan "kib la" ak limite kapasite maksimòm li an tèm de processeur, memwa ak disk, li te deja diskite bezwen yo nan ekip yo. An konsekans, yon sèl kòmand, an jeneral, pa pral bloke tout gwoup la pou deplwaman, allocation dè milye de nwayo ak terabyte nan memwa. Aksè nan espas non yo akòde atravè AD (nou itilize RBAC). Espas non yo ak limit yo ajoute atravè yon demann rale nan repozitwa GIT la, ak Lè sa a, tout bagay otomatikman woule soti nan tiyo Ansible la.

Yon egzanp sou allocation resous nan yon ekip:

namespaces:

  chat-team:
    pods: 23
    limits:
      cpu: 11
      memory: 20Gi
    requests:
      cpu: 11
      memory: 20Gi

Demann ak limit

kib" Mande se kantite resous rezève garanti pou pod (yonn oswa plizyè resipyan docker) nan yon gwoup. Limit se yon maksimòm ki pa garanti. Ou ka wè souvan sou graf yo ki jan kèk ekip te mete tèt li twòp demann pou tout aplikasyon li yo epi yo pa ka deplwaye aplikasyon an nan "kib la", paske tout demann anba espas non yo te deja "depanse".

Fason ki kòrèk la soti nan sitiyasyon sa a se gade nan konsomasyon aktyèl la resous epi konpare li ak kantite lajan yo mande a (Demann).

Kubernetes nan DomClick: kijan pou dòmi anpè jere yon gwoup 1000 mikwosèvis
Kubernetes nan DomClick: kijan pou dòmi anpè jere yon gwoup 1000 mikwosèvis

Nan Ekran ki anwo yo ou ka wè ke CPU "Mande" yo matche ak kantite reyèl la nan fil, ak Limit yo ka depase kantite reyèl la nan fil CPU =)

Koulye a, ann gade nan kèk espas non an detay (mwen te chwazi namespace kube-system - espas non sistèm lan pou eleman yo nan "Kib la" tèt li) epi wè rapò a nan tan aktyèlman itilize processeur ak memwa a youn nan mande a:

Kubernetes nan DomClick: kijan pou dòmi anpè jere yon gwoup 1000 mikwosèvis

Li evidan ke pi plis memwa ak CPU rezève pou sèvis sistèm pase yo aktyèlman itilize. Nan ka sistèm kube a, sa a jistifye: sa te rive ke nginx kontwolè antre oswa nodelocaldns nan pik yo frape CPU a ak boule anpil RAM, kidonk isit la se jistifye yon rezèv. Anplis de sa, nou pa ka konte sou tablo pou 3 èdtan ki sot pase yo: li se dezirab yo wè mezi istorik sou yon gwo peryòd de tan.

Yo te devlope yon sistèm "rekòmandasyon". Pou egzanp, isit la ou ka wè ki resous ki ta pi bon nan ogmante "limit" yo (anwo a pèmèt ba) pou ke "throttling" pa rive: moman sa a lè yon resous te deja depanse CPU oswa memwa nan tranch tan an ak ap tann jiskaske li pral "dejele":

Kubernetes nan DomClick: kijan pou dòmi anpè jere yon gwoup 1000 mikwosèvis

Epi men gous yo ki ta dwe diminye apeti yo:

Kubernetes nan DomClick: kijan pou dòmi anpè jere yon gwoup 1000 mikwosèvis

sou throttling + siveyans resous, ou ka ekri plis pase yon atik, kidonk poze kesyon nan kòmantè yo. Nan kèk mo, mwen ka di ke travay la nan otomatize mezi sa yo trè difisil epi li mande anpil tan ak balanse ak fonksyon "fenèt" ak "CTE" Prometheus / VictoriaMetrics (tèm sa yo se nan guillemets, depi gen prèske pa gen anyen tankou sa a nan PromQL, epi ou dwe divize demann pè nan plizyè ekran tèks epi optimize yo).

Kòm yon rezilta, devlopè yo gen zouti pou kontwole espas non yo nan Cube, epi yo kapab chwazi pou tèt yo ki kote ak ki lè ki aplikasyon yo ka gen resous yo "koupe," ak ki sèvè yo ka bay CPU a tout lannwit lan.

Metodoloji

Nan konpayi an jan li ye kounye a alamòd, nou respekte DevOps- ak SRE-pratikan Lè yon konpayi gen 1000 mikwosèvis, apeprè 350 devlopè ak 15 admin pou tout enfrastrikti a, ou dwe "fè alamòd": dèyè tout "baswords" sa yo gen yon bezwen ijan pou otomatize tout bagay ak tout moun, epi admins pa ta dwe yon kou boutèy. nan pwosesis.

Kòm Ops, nou bay divès mezi ak tablodbò pou devlopè ki gen rapò ak pousantaj repons sèvis ak erè.

Nou itilize metodoloji tankou: WOUJ, SÈVI AK и Siyal Goldenpa konbine yo ansanm. Nou eseye minimize kantite tablodbò yo pou yon ti koutje sou li klè ki sèvis k ap degrade kounye a (pa egzanp, kòd repons pou chak segonn, tan repons pa 99yèm percentile), elatriye. Le pli vit ke kèk nouvo mezi vin nesesè pou tablodbò jeneral, nou imedyatman trase epi ajoute yo.

Mwen pa trase graf pou yon mwa. Sa a se pwobableman yon bon siy: sa vle di pi fò nan "vle" yo te deja reyalize. Sa te rive ke pandan semèn nan mwen ta trase kèk nouvo graf omwen yon fwa pa jou.

Kubernetes nan DomClick: kijan pou dòmi anpè jere yon gwoup 1000 mikwosèvis

Kubernetes nan DomClick: kijan pou dòmi anpè jere yon gwoup 1000 mikwosèvis

Rezilta a gen anpil valè paske kounye a devlopè yo byen raman ale nan admin yo ak kesyon "kote yo gade nan kèk kalite metrik."

Aplikasyon Sèvis may se jis alantou kwen an epi yo ta dwe fè lavi anpil pi fasil pou tout moun, kòlèg ki soti nan Zouti yo deja pre aplike abstrè "Istio nan yon moun ki an sante": sik lavi a nan chak demann HTTP (yo) yo pral vizib nan siveyans, ak li pral toujou posib yo konprann "nan ki etap tout bagay te kraze" pandan entè-sèvis (epi pa sèlman) entèraksyon. Abònman ak nouvèl ki soti nan sant DomClick la. =)

Sipò enfrastrikti Kubernetes

Istorikman, nou itilize vèsyon an patched Kubespray — Ansible wòl pou deplwaye, pwolonje ak ajou Kubernetes. Nan kèk pwen, sipò pou enstalasyon ki pa kubeadm yo te koupe nan branch prensipal la, ak pwosesis pou chanje nan kubeadm pa te pwopoze. Kòm yon rezilta, konpayi Southbridge te fè pwòp fouchèt li (ak sipò kubeadm ak yon ranje rapid pou pwoblèm kritik).

Pwosesis pou mete ajou tout grap k8s sanble sa a:

  • Ann pran li Kubespray soti nan Southbridge, tcheke avèk fil nou an, Merjim.
  • Nou ap woule aktyalizasyon a Estrès- "kib".
  • Nou woule aktyalizasyon a yon sèl ne nan yon moman (nan Ansible sa a se "seri: 1") nan Dev- "kib".
  • Nou mete ajou Prod nan Samdi aswè yon nœud alafwa.

Gen plan pou ranplase li nan lavni Kubespray pou yon bagay pi vit epi ale nan kubeadm.

An total nou gen twa "Kib": Estrès, Dev ak Prod. Nou planifye pou lanse yon lòt (sibstiti cho) Prod-"Cube" nan dezyèm sant done. Estrès и Dev ap viv nan "machin vityèl" (oVirt pou Estrès ak VMWare nwaj pou Dev). Prod- "Kib" ap viv sou "metal fè": sa yo se nœuds ki idantik ak 32 fil CPU, 64-128 GB memwa ak 300 GB SSD RAID 10 - gen 50 nan yo an total. Twa "mens" nœuds yo dedye a "mèt" Prod- "Kiba": 16 GB memwa, 12 fil CPU.

Pou lavant, nou pito sèvi ak "fè metal" epi evite kouch nesesè tankou OpenStack: nou pa bezwen "vwazen fè bwi" ak CPU vòlè tan. Ak konpleksite nan administrasyon apeprè double nan ka OpenStack nan kay la.

Pou CI/CD "Kibik" ak lòt konpozan enfrastrikti nou itilize yon sèvè GIT separe, Helm 3 (se te yon tranzisyon olye douloure soti nan Helm 2, men nou trè kontan ak opsyon yo). atomik), Jenkins, Ansible ak Docker. Nou renmen karakteristik branch ak deplwaman nan diferan anviwònman soti nan yon sèl depo.

Konklizyon

Kubernetes nan DomClick: kijan pou dòmi anpè jere yon gwoup 1000 mikwosèvis
Sa a se, an tèm jeneral, ki sa pwosesis DevOps la sanble nan DomClick nan pèspektiv nan yon enjenyè operasyon. Atik la te vin mwens teknik pase mwen te espere: Se poutèt sa, swiv nouvèl la DomClick sou Habré: pral gen plis atik "hardcore" sou Kubernetes ak plis ankò.

Sous: www.habr.com

Add nouvo kòmantè