Kubernetes: Haɓaka ayyukan ku ta hanyar cire iyakokin CPU

Komawa cikin 2016 mu a Buffer ya koma Kubernetes, kuma yanzu game da nodes 60 (a kan AWS) da kwantena 1500 suna aiki akan gungu na k8s wanda ke sarrafawa. kops. Duk da haka, mun koma microservices ta hanyar gwaji da kuskure, kuma ko da bayan shekaru da yawa na aiki tare da k8s har yanzu muna fuskantar sababbin matsaloli. A cikin wannan sakon za mu yi magana a kai gazawar sarrafawa: dalilin da ya sa muka yi tunanin sun kasance masu kyau aiki da kuma dalilin da ya sa suka ƙare ba su da kyau sosai.

Ƙayyadaddun na'ura mai sarrafawa da maƙarƙashiya

Kamar sauran masu amfani da Kubernetes, Google yana ba da shawarar saita iyakoki na CPU. Ba tare da irin wannan saitin ba, kwantena a cikin kumburi na iya ɗaukar duk ikon sarrafawa, wanda hakan ke haifar da mahimman hanyoyin Kubernetes (misali. kubelet) zai daina amsa buƙatun. Don haka, saita iyakokin CPU hanya ce mai kyau don kare nodes ɗin ku.

Iyakokin sarrafawa sun saita akwati zuwa matsakaicin lokacin CPU da zai iya amfani da shi na takamaiman lokaci (tsoho shine 100ms), kuma akwati ba zai taɓa wuce wannan iyaka ba. Kubernetes don srotting akwati da kuma hana shi daga ƙetare iyaka, ana amfani da kayan aiki na musamman Farashin CFS, amma waɗannan iyakokin CPU na wucin gadi sun ƙare suna cutar da aikin da haɓaka lokacin amsawar kwantena.

Me zai iya faruwa idan ba mu saita iyakoki na sarrafawa ba?

Abin takaici, mu da kanmu mun fuskanci wannan matsala. Kowane kumburi yana da tsari da ke da alhakin sarrafa kwantena kubelet, kuma ya daina amsa buƙatun. Kullin, lokacin da wannan ya faru, zai shiga cikin jihar NotReady, kuma kwantena daga gare ta za a tura su zuwa wani wuri kuma su haifar da matsaloli iri ɗaya akan sababbin nodes. Ba kyakkyawan labari ba ne, a faɗi kaɗan.

Bayyana matsalar ƙumburi da amsawa

Makullin ma'auni don bin diddigin akwati shine trottling, yana nuna sau nawa aka murƙushe kwandon ku. Mun lura da sha'awar kasancewar maƙarƙashiya a cikin wasu kwantena, ba tare da la'akari da ko nauyin mai sarrafa ya wuce gona da iri ba. A matsayin misali, bari mu kalli ɗayan manyan APIs ɗin mu:

Kubernetes: Haɓaka ayyukan ku ta hanyar cire iyakokin CPU

Kamar yadda kuke gani a ƙasa, mun saita iyaka zuwa 800m (0.8 ko 80% core), da ƙima mafi girma a mafi kyawun isa 200m (20%). Zai yi kama da cewa kafin murkushe sabis ɗin har yanzu muna da iko da yawa na processor, duk da haka ...

Kubernetes: Haɓaka ayyukan ku ta hanyar cire iyakokin CPU
Wataƙila kun lura cewa ko da lokacin da kayan aikin ke ƙasa da ƙayyadaddun iyaka - mahimmanci a ƙasa - har yanzu yana faruwa.

Fuskantar wannan, ba da daɗewa ba mun gano albarkatu da yawa (matsala akan github, gabatarwa akan zadano, post na omio) game da raguwar aiki da lokacin amsawa na ayyuka saboda maƙarƙashiya.

Me yasa muke ganin srottling a ƙananan nauyin CPU? Gajeren sigar ita ce: "akwai kwaro a cikin kwayayen Linux wanda ke haifar da buguwar kwantena tare da ƙayyadaddun iyakokin sarrafawa." Idan kuna sha'awar yanayin matsalar, kuna iya karanta gabatarwar (видео и rubutu Zaɓuɓɓuka) na Dave Chiluk.

Cire hane-hane na CPU (tare da taka tsantsan)

Bayan doguwar tattaunawa, mun yanke shawarar cire hane-hane daga duk ayyukan da suka shafi ayyuka masu mahimmanci kai tsaye ko a kaikaice ga masu amfani da mu.

Shawarar ba ta da sauƙi domin muna daraja kwanciyar hankalin tarin mu sosai. A baya, mun riga mun gwada rashin kwanciyar hankali na gungu namu, sannan ayyukan sun cinye albarkatu da yawa kuma sun rage aikin su duka. Yanzu komai ya ɗan bambanta: mun fahimci abin da muke tsammani daga gungu namu, da kuma kyakkyawar dabara don aiwatar da canje-canjen da aka tsara.

Kubernetes: Haɓaka ayyukan ku ta hanyar cire iyakokin CPU
Wasiƙun kasuwanci akan wani batu mai mahimmanci.

Yadda za a kare nodes ɗin ku lokacin da aka ɗaga hani?

Ware sabis na "marasa iyaka":

A baya, mun riga mun ga wasu nodes sun shiga cikin yanayi notReady, da farko saboda ayyukan da suka cinye albarkatu masu yawa.

Mun yanke shawarar sanya irin waɗannan ayyuka a cikin nodes daban ("labeled") don kada su tsoma baki tare da ayyukan "masu alaƙa". Sakamakon haka, ta hanyar yiwa wasu nodes alama da ƙara ma'aunin haƙuri zuwa sabis na "marasa alaƙa", mun sami babban iko akan gungu, kuma ya zama da sauƙi a gare mu don gano matsaloli tare da nodes. Don aiwatar da irin waɗannan hanyoyin da kanku, zaku iya sanin kanku da su takardun shaida.

Kubernetes: Haɓaka ayyukan ku ta hanyar cire iyakokin CPU

Sanya madaidaicin processor da buƙatar ƙwaƙwalwar ajiya:

Babban tsoronmu shine tsarin zai cinye albarkatu da yawa kuma kumburin zai daina amsa buƙatun. Tun da yanzu (godiya ga Datadog) za mu iya saka idanu a sarari duk ayyukan da ke kan gungu namu, na bincika watanni da yawa na aiki na waɗanda muka yi niyyar sanyawa a matsayin "marasa alaƙa". Na kawai saita matsakaicin amfani da CPU tare da gefe na 20%, don haka aka ware sarari a cikin kumburi idan k8s yayi ƙoƙarin sanya wasu ayyuka zuwa kumburi.

Kubernetes: Haɓaka ayyukan ku ta hanyar cire iyakokin CPU

Kamar yadda kuke gani a cikin jadawali, matsakaicin nauyin mai sarrafawa ya kai 242m CPU cores (0.242 processor cores). Don buƙatar na'ura mai sarrafawa, ya isa ya ɗauki lamba ta ɗan fi girma fiye da wannan ƙimar. Lura cewa tun da sabis ɗin na mai amfani ne, ƙimar kaya mafi girma ta zo daidai da zirga-zirga.

Yi haka tare da amfani da ƙwaƙwalwar ajiya da tambayoyi, da voila - duk an saita ku! Don ƙarin tsaro, za ka iya ƙara a kwance kwaf autoscaling. Don haka, duk lokacin da nauyin albarkatun ya yi girma, autoscaling zai haifar da sababbin kwasfa, kuma kubernetes zai rarraba su zuwa nodes tare da sarari kyauta. Idan babu sarari da ya rage a cikin gungu da kanta, zaku iya saita kanku faɗakarwa ko saita ƙarin sabbin nodes ta hanyar sarrafa su.

Daga cikin minuses, yana da kyau a lura cewa mun rasa a cikin "ganga yawa", i.e. adadin kwantena da ke gudana akan kumburi ɗaya. Hakanan muna iya samun “shakatawa” da yawa a ƙarancin zirga-zirgar zirga-zirgar zirga-zirga, kuma akwai kuma damar da za ku isa babban nauyin sarrafawa, amma nodes ɗin autoscaling yakamata ya taimaka tare da na ƙarshe.

Результаты

Na yi farin cikin buga waɗannan kyakkyawan sakamako daga gwaje-gwaje a cikin ƴan makonnin da suka gabata; mun riga mun ga ci gaba mai mahimmanci a cikin martani a duk ayyukan da aka gyara:

Kubernetes: Haɓaka ayyukan ku ta hanyar cire iyakokin CPU

Mun sami sakamako mafi kyau akan shafinmu na gida (buffer.com), can sabis ɗin ya ƙara haɓaka sau ashirin da biyu!

Kubernetes: Haɓaka ayyukan ku ta hanyar cire iyakokin CPU

An gyara bug kernel na Linux?

Haka ne, An riga an gyara kwaro kuma an ƙara gyara a cikin kwaya rarraba nau'in 4.19 kuma mafi girma.

Koyaya, lokacin karatun matsalolin kubernetes akan github na biyu na Satumba 2020 har yanzu muna ci karo da ambaton wasu ayyukan Linux tare da kwaro iri ɗaya. Na yi imani cewa wasu rarrabawar Linux har yanzu suna da wannan kwaro kuma suna aiki kawai don gyara shi.

Idan nau'in rarraba ku ya kasance ƙasa da 4.19, Ina ba da shawarar sabuntawa zuwa na baya-bayan nan, amma a kowane hali yakamata ku gwada cire ƙuntatawar sarrafawa kuma ku ga idan hargitsin ya ci gaba. A ƙasa zaku iya ganin jerin ɓangaren ayyukan gudanarwa na Kubernetes da rarrabawar Linux:

  • Debian: gyara hadedde cikin sabuwar sigar rarraba, busters, kuma yayi kama da sabo (Agusta 2020). Wasu sigogin da suka gabata ma ana iya gyara su.
  • Ubuntu: gyara hadedde cikin sabuwar sigar Ubuntu Focal Fossa 20.04
  • EKS ya sami gyara tukuna a watan Disamba 2019. Idan sigar ku ta yi ƙasa da wannan, ya kamata ku sabunta AMI.
  • kops: Daga Yuni 2020 у kops 1.18+ Hoton mai masaukin baki zai kasance Ubuntu 20.04. Idan sigar kops ɗinku ya tsufa, ƙila ku jira gyara. Mu kanmu muna jira yanzu.
  • GKE (Google Cloud): Gyara hadedde a watan Janairun 2020, duk da haka akwai matsaloli tare da throttling har yanzu ana lura da su.

Me za a yi idan gyaran ya gyara matsalar ƙumburi?

Ban tabbata an warware matsalar gaba daya ba. Lokacin da muka isa sigar kernel tare da gyara, zan gwada tarin kuma in sabunta post ɗin. Idan wani ya riga ya sabunta, zan yi sha'awar karanta sakamakonku.

ƙarshe

  • Idan kuna aiki tare da kwantena Docker a ƙarƙashin Linux (komai Kubernetes, Mesos, Swarm ko wasu), kwantena naku na iya rasa aiki saboda murƙushewa;
  • Gwada sabuntawa zuwa sabon sigar rarraba ku da fatan cewa an riga an gyara kwaro;
  • Cire iyakokin sarrafawa zai magance matsalar, amma wannan fasaha ce mai haɗari wanda ya kamata a yi amfani da shi tare da taka tsantsan (yana da kyau a fara sabunta kwaya kuma kwatanta sakamakon);
  • Idan kun cire iyakokin CPU, a hankali ku kula da CPU da yadda ake amfani da ƙwaƙwalwar ajiya kuma ku tabbata albarkatun CPU ɗinku sun wuce amfanin ku;
  • Zaɓuɓɓuka mai aminci zai zama na'urar sikeli ta atomatik don ƙirƙirar sabbin kwasfan fayiloli idan akwai babban nauyin kayan masarufi, ta yadda kubernetes ke ba su ga nodes kyauta.

Ina fatan wannan sakon zai taimaka muku inganta aikin tsarin kwantena.

PS Yana da marubucin yayi daidai da masu karatu da masu sharhi (a Turanci).


source: www.habr.com

Add a comment