Conas rochtain a fháil ar acmhainní Kubernetes Pod

Conas rochtain a fháil ar acmhainní Kubernetes PodAn Duais le Tohad

Agus tú ag tosú amach le Kubernetes, tá sé coitianta dearmad a dhéanamh ar acmhainní coimeádáin a bhunú. Ag an bpointe seo, is leor a chinntiú go n-oibríonn íomhá Docker agus gur féidir é a imscaradh chuig braisle Kubernetes.

Ach ina dhiaidh sin is gá an feidhmchlár a imscaradh i mbraisle táirgeachta in éineacht le feidhmchláir eile. Chun seo a dhéanamh, ní mór duit acmhainní a leithdháileadh don choimeádán agus a chinntiú go bhfuil go leor acu ann chun an feidhmchlár a chur ar bun agus a fheidhmiú, agus nach mbeidh fadhbanna ag feidhmchláir reatha eile.

Foireann Kubernetes aaS ó Mail.ru d'aistrigh alt faoi acmhainní coimeádáin (LAP & MEM), iarratais agus srianta acmhainní. Foghlaimeoidh tú buntáistí na socruithe seo agus cad a tharlóidh mura socraíonn tú iad.

Acmhainní ríomhaireachta

Tá dhá chineál acmhainní againn leis na haonaid seo a leanas:

  • Láraonad próiseála (LAP) - croíleacáin;
  • Cuimhne (MEM) - bearta.

Sonraítear acmhainní do gach coimeádán. Sa chomhad Pod YAML seo a leanas, feicfidh tú rannán acmhainní ina bhfuil na hacmhainní iarrtha agus teorainn:

  • Acmhainní Pod Iarrtha = suim acmhainní iarrtha na gcoimeádán go léir;
  • Teorainn Acmhainní Pod = Suim na dTeorainneacha Acmhainní Pod go léir.

apiVersion: v1
kind: Pod
metadata:
  name: backend-pod-name
  labels:
    application: backend
spec:
  containers:
    — name: main-container
      image: my-backend
      tag: v1
      ports:
      — containerPort: 8080
      resources:
        requests:
          cpu: 0.2 # REQUESTED CPU: 200m cores
          memory: "1Gi" # REQUESTED MEM: 1Gi
        limits:
          cpu: 1 # MAX CPU USAGE: 1 core
          memory: "1Gi" # MAX MEM USAGE:  1Gi
    — name: other-container
      image: other-app
      tag: v1
      ports:
      — containerPort: 8000
      resources:
        requests:
          cpu: "200m" # REQUESTED CPU: 200m cores
          memory: "0.5Gi" # REQUESTED MEM: 0.5Gi
        limits:
          cpu: 1 # MAX CPU USAGE: 1 core
          memory: "1Gi" # MAX MEM USAGE:  1Gi

Sampla d'Acmhainní Iarrtha agus Teoranta

Réimse resources.requested ón tsonraíocht Tá Pod ar cheann de na heilimintí a úsáidtear chun an nód atá ag teastáil a fháil. Is féidir leat imscaradh Pod a phleanáil dó cheana féin. Conas a aimsíonn tú nód oiriúnach?

Tá roinnt comhpháirteanna i Kubernetes, lena n-áirítear máistir nód nó máistir nód (Plána Rialaithe Kubernetes). Tá roinnt próisis ag an máistir nód: kube-apiserver, kube-controller-manager agus kube-scheduler.

Tá an próiseas kube-scheduler freagrach as pods nuachruthaithe a athbhreithniú agus as nóid oibrithe féideartha a aimsiú a thagann le gach iarratas ar pods, lena n-áirítear líon na n-acmhainní a iarrtar. Tá liosta na nóid a aimsíonn kube-scheduler rangaithe. Tá an pod sceidealta ar an nód leis na scóir is airde.

Conas rochtain a fháil ar acmhainní Kubernetes PodCá gcuirfear an Pod corcra?

Sa phictiúr is féidir leat a fheiceáil gur chóir do kube-scheduler Pod corcra nua a sceidealú. Tá dhá nód i mbraisle Kubernetes: A agus B. Mar a fheiceann tú, ní féidir le kube-scheduler Pod a sceidealú ar nód A - ní mheaitseálann na hacmhainní atá ar fáil (gan iarraidh) le hiarratais an Phod corcra. Mar sin, ní bheidh an 1 GB de chuimhne a iarrann an Pod corcra oiriúnach ar nód A, ós rud é gurb é 0,5 GB an chuimhne atá ar fáil. Ach tá go leor acmhainní ag nód B. Mar thoradh air sin, cinneann kube-scheduler gurb é nód B ceann scríbe an phod corcra.

Anois tá a fhios againn conas a théann na hacmhainní a iarrtar i bhfeidhm ar an rogha nód chun an Pod a rith. Ach cén tionchar atá ag acmhainní imeallacha?

Is teorainn í an teorainn acmhainne nach féidir leis an LAP/MEM a thrasnú. Mar sin féin, tá acmhainn an LAP solúbtha, mar sin ní chuirfidh coimeádáin a shroicheann a dteorainneacha LAP an Pod amach. Ina áit sin, cuirfear tús le smeartha LAP. Má shroichtear an teorainn úsáide MEM, stopfar an coimeádán mar gheall ar OOM-Killer agus déanfar é a atosú má cheadaítear é leis an socrú RestartPolicy.

Na hacmhainní iarrtha agus uasta go mion

Conas rochtain a fháil ar acmhainní Kubernetes PodCumarsáid acmhainní idir Docker agus Kubernetes

Is é an bealach is fearr chun a mhíniú conas a oibríonn iarratais acmhainní agus teorainneacha acmhainní an caidreamh idir Kubernetes agus Docker a thabhairt isteach. San íomhá thuas is féidir leat a fheiceáil conas a bhaineann réimsí Kubernetes agus bratacha tosaithe Docker.

Cuimhne: iarraidh agus teorannú

containers:
...
 resources:
   requests:
     memory: "0.5Gi"
   limits:
     memory: "1Gi"

Mar a luadh thuas, déantar cuimhne a thomhas i mbearta. Bunaithe ar Doiciméid Kubernetes, is féidir linn cuimhne a shonrú mar uimhir. De ghnáth is slánuimhir é, mar shampla 2678 - is é sin, 2678 bytes. Is féidir leat iarmhíreanna a úsáid freisin G и Gi, is é an rud is mó a mheabhrú nach bhfuil siad comhionann. Is é an chéad deachúil agus an dara ceann dénártha. Cosúil leis an sampla atá luaite i ndoiciméadú k8s: 128974848, 129e6, 129M, 123Mi - tá siad comhionann go praiticiúil.

Rogha Kubernetes limits.memory oireann an bhratach --memory ó Docker. I gcás request.memory Níl aon saighead ann do Docker toisc nach n-úsáideann Docker an réimse seo. Is féidir leat a iarraidh, an bhfuil sé seo riachtanach fiú? Is gá. Mar a dúirt mé cheana, tá an réimse tábhachtach do Kubernetes. Bunaithe ar an bhfaisnéis uaidh, cinneann kube-scheduler cén nód chun an Pod a sceidealú.

Cad a tharlaíonn mura socraíonn tú go leor cuimhne d’iarratas?

Má tá teorainneacha na cuimhne iarrtha bainte amach ag an gcoimeádán, ansin cuirtear an Pod i ngrúpa Podanna a stopann nuair nach bhfuil go leor cuimhne sa nód.

Cad a tharlaíonn má shocraíonn tú an teorainn chuimhne ró-íseal?

Má sháraíonn an coimeádán an teorainn chuimhne, cuirfear deireadh leis mar gheall ar OOM-Killed. Agus atosóidh sé más féidir bunaithe ar RestartPolicy áit a bhfuil an luach réamhshocraithe Always.

Cad a tharlaíonn mura sonraíonn tú an chuimhne iarrtha?

Glacfaidh Kubernetes an luach teorann agus socróidh sé é mar an luach réamhshocraithe.

Cad is féidir a tharlóidh mura sonraíonn tú teorainn chuimhne?

Níl aon srianta ar an gcoimeádán; is féidir leis an oiread cuimhne a úsáid agus is mian leis. Má thosaíonn sé ag baint úsáide as gach cuimhne atá ar fáil ar an nód, ansin maróidh OOM é. Déanfar an coimeádán a atosú ansin más féidir bunaithe ar RestartPolicy.

Cad a tharlaíonn mura sonraíonn tú teorainneacha cuimhne?

Is é seo an cás is measa: níl a fhios ag an sceidealóir cé mhéad acmhainní a theastaíonn ón gcoimeádán, agus féadfaidh sé seo fadhbanna tromchúiseacha a chruthú ar an nód. Sa chás seo, bheadh ​​sé go deas teorainneacha réamhshocraithe a bheith ar an ainmspás (socraithe ag LimitRange). Níl aon teorainneacha réamhshocraithe - níl aon teorainneacha ag an Pod, is féidir leis an oiread cuimhne a úsáid agus is mian leis.

Má tá an chuimhne iarrtha níos mó ná mar is féidir leis an nód a thairiscint, ní bheidh an Pod sceidealaithe. Tá sé tábhachtach cuimhneamh air sin Requests.memory - ní an t-íosluach. Is cur síos é seo ar an méid cuimhne atá leordhóthanach chun an coimeádán a choinneáil ag rith go leanúnach.

De ghnáth moltar an luach céanna a shocrú le haghaidh request.memory и limit.memory. Cinntíonn sé seo nach ndéanfaidh Kubernetes Pod a sceidealú ar nód a bhfuil go leor cuimhne aige chun an Pod a rith ach nach bhfuil go leor chun é a rith. Coinnigh i gcuimhne: ní thógann pleanáil Kubernetes Pod ach san áireamh requests.memoryAgus limits.memory ní chuireann san áireamh.

LAP: iarratas agus teorainn

containers:
...
 resources:
   requests:
     cpu: 1
   limits:
     cpu: "1200m"

Le LAP tá gach rud beagán níos casta. Ag filleadh ar an bpictiúr ar an gcaidreamh idir Kubernetes agus Docker, is féidir leat é sin a fheiceáil request.cpu соответствует --cpu-shares, ach limit.cpu oireann an bhratach cpus sa Docker.

Méadaítear an LAP a iarrann Kubernetes faoi 1024, comhréir na dtimthriallta LAP. Más mian leat 1 croí iomlán a iarraidh, ní mór duit cur leis cpu: 1mar a thaispeántar thuas.

Má iarrann tú eithne iomlán (comhaireacht = 1024) ní chiallaíonn sé sin go bhfaighidh do choimeádán é. Mura bhfuil ach croí amháin ag do mheaisín óstach agus go bhfuil níos mó ná coimeádán amháin á rith agat, ansin caithfidh gach coimeádán an LAP atá ar fáil a roinnt eatarthu. Conas a tharlaíonn sé seo? Breathnaímid ar an bpictiúr.

Conas rochtain a fháil ar acmhainní Kubernetes Pod
Iarratas LAP - Croíchóras Aonair

Samhlóimid go bhfuil córas óstach aon-lárnach agat ag rith coimeádáin. Rinne Mam (Kubernetes) pie (LAP) a bhácáil agus ba mhaith léi é a roinnt idir leanaí (coimeádáin). Tá triúr leanaí ag iarraidh pióg iomlán (comhréir = 1024), tá leanbh eile ag iarraidh leath pióg (512). Ba mhaith le Mam a bheith cothrom agus déanann sí ríomh simplí.

# Сколько пирогов хотят дети?
# 3 ребенка хотят по целому пирогу и еще один хочет половину пирога
cakesNumberKidsWant = (3 * 1) + (1 * 0.5) = 3.5
# Выражение получается так:
3 (ребенка/контейнера) * 1 (целый пирог/полное ядро) + 1 (ребенок/контейнер) * 0.5 (половина пирога/половина ядра)
# Сколько пирогов испечено?
availableCakesNumber = 1
# Сколько пирога (максимально) дети реально могут получить?
newMaxRequest = 1 / 3.5 =~ 28%

Bunaithe ar an ríomh, gheobhaidh triúr leanaí 28% den chroílár, agus ní an croí iomlán. Gheobhaidh an ceathrú leanbh 14% den eithne iomlán, ní leath. Ach beidh rudaí difriúil má tá córas il-lárnach agat.

Conas rochtain a fháil ar acmhainní Kubernetes Pod
Iarratas LAP - Córas Il-Chroí (4).

San íomhá thuas is féidir leat a fheiceáil gur mhaith le triúr leanaí pie iomlán, agus ba mhaith le duine leath. Ós rud é gur bhácáil mamaí ceithre pióga, gheobhaidh gach ceann dá leanaí an oiread agus is mian leo. I gcóras illárnach, déantar acmhainní próiseálaithe a dháileadh ar na croíleacáin phróiseálaithe go léir atá ar fáil. Má tá coimeádán teoranta do níos lú ná croí iomlán LAP amháin, is féidir é a úsáid fós ag 100%.

Déantar na ríomhanna thuas a shimpliú chun tuiscint a fháil ar an gcaoi a ndéantar LAP a dháileadh i measc coimeádáin. Ar ndóigh, seachas na coimeádáin féin, tá próisis eile ann a úsáideann acmhainní LAP freisin. Nuair a bhíonn próisis i gcoimeádán amháin díomhaoin, is féidir le daoine eile a acmhainn a úsáid. CPU: "200m" соответствует CPU: 0,2, rud a chiallaíonn thart ar 20% de chroí amháin.

Anois, déanaimis labhairt faoi limit.cpu. Méadaítear an LAP a theorannaíonn Kubernetes faoi 100. Is é an toradh ná an méid ama is féidir leis an gcoimeádán a úsáid gach 100 µs (cpu-period).

limit.cpu a mheaitseálann bratach an Docker --cpus. Is meascán nua de shean é seo --cpu-period и --cpu-quota. Trí é a shocrú, cuirimid in iúl cé mhéad acmhainní LAP atá ar fáil is féidir leis an gcoimeádán a úsáid is mó sula dtosaíonn an scóig:

  • cpus - teaglaim cpu-period и cpu-quota. cpus = 1.5 comhionann le socrú cpu-period = 100000 и cpu-quota = 150000;
  • LAP-tréimhse - tréimhse LAP CFS sceidealóir, réamhshocraithe 100 microseconds;
  • cpu-quota - líon na miocroicindí taobh istigh cpu-period, atá teorantach ag an gcoimeádán.

Cad a tharlóidh mura shuiteáil tú go leor LAP iarrtha?

Má tá níos mó ag teastáil ón gcoimeádán ná mar atá suiteáilte aige, goidfidh sé LAP ó phróisis eile.

Cad a tharlaíonn má shocraíonn tú teorainn an LAP ró-íseal?

Ós rud é go bhfuil acmhainn an LAP inchoigeartaithe, cuirfear an scóig ar siúl.

Cad a tharlaíonn mura sonraíonn tú iarratas LAP?

Mar is amhlaidh le cuimhne, tá luach an iarratais cothrom leis an teorainn.

Cad a tharlaíonn mura sonraíonn tú teorainn LAP?

Úsáidfidh an coimeádán an oiread LAP agus a theastaíonn uaidh. Má shainmhínítear polasaí réamhshocraithe LAP (LimitRange) san ainmspás, ansin úsáidtear an teorainn seo don choimeádán freisin.

Cad a tharlaíonn mura sonraíonn tú iarratas nó teorainn LAP?

Cosúil le cuimhne, is é seo an cás is measa. Níl a fhios ag an sceidealóir cé mhéad acmhainní atá de dhíth ar do choimeádán, agus féadfaidh sé seo fadhbanna tromchúiseacha a chruthú ar an nód. Chun é seo a sheachaint, ní mór duit teorainneacha réamhshocraithe a shocrú le haghaidh spásanna ainmneacha (LimitRange).

Cuimhnigh: má iarrann tú níos mó LAP ná mar is féidir leis na nóid a sholáthar, ní bheidh an Pod sceidealaithe. Requests.cpu - ní an t-íosluach, ach luach atá leordhóthanach chun an Pod a thosú agus oibriú gan teipeanna. Mura ndéanann an t-iarratas ríomhaireachtaí casta, is é an rogha is fearr a shuiteáil request.cpu <= 1 agus an oiread macasamhla agus is gá a sheoladh.

Méid idéalach na n-acmhainní iarrtha nó teorainn acmhainní

D’fhoghlaimíomar faoi theorannú acmhainní ríomhaireachta. Anois tá sé in am an cheist a fhreagairt: “Cé mhéad acmhainn atá ag teastáil ó mo Phod chun an feidhmchlár a rith gan aon fhadhbanna? Cad é an méid idéalach?

Ar an drochuair, níl aon freagraí soiléire ar na ceisteanna seo. Mura bhfuil a fhios agat conas a oibríonn d’fheidhmchlár nó cé mhéad LAP nó cuimhne atá de dhíth air, is é an rogha is fearr ná go leor cuimhne agus LAP a thabhairt don fheidhmchlár agus ansin tástálacha feidhmíochta a reáchtáil.

Chomh maith le tástálacha feidhmíochta, monatóireacht a dhéanamh ar iompar an iarratais i monatóireacht a dhéanamh ar feadh seachtaine. Má thugann na graif le fios go bhfuil níos lú acmhainní á n-úsáid ag d’iarratas ná mar a d’iarr tú, is féidir leat an méid LAP nó cuimhne a iarradh a laghdú.

Mar shampla féach seo Painéal Grafana. Taispeánann sé an difríocht idir an teorainn acmhainní nó acmhainní iarrtha agus an úsáid acmhainní reatha.

Conclúid

Cuidíonn acmhainní a iarraidh agus a theorannú do bhraisle Kubernetes a choinneáil sláintiúil. Laghdaíonn cumraíocht chuí teorann costais agus coinníonn sé feidhmchláir i gcónaí.

Go hachomair, tá roinnt rudaí le cur i gcuimhne:

  1. Is cumraíocht iad acmhainní iarrtha a chuirtear san áireamh ag am tosaithe (nuair a bheartaíonn Kubernetes an t-iarratas a óstáil). I gcodarsnacht leis sin, tá sé tábhachtach acmhainní a theorannú ag am rite - nuair atá an feidhmchlár ag rith ar an nód cheana féin.
  2. I gcomparáid le cuimhne, is acmhainn rialaithe é an LAP. Mura bhfuil go leor LAP ann, ní dhúnfar do Phod agus cuirfear an mheicníocht sníomh ar siúl.
  3. Ní íosluachanna agus uasluachanna iad acmhainní iarrtha agus teorainn acmhainní! Trí na hacmhainní a iarrtar a shainiú, cinntíonn tú go rithfidh an feidhmchlár gan fadhbanna.
  4. Is dea-chleachtas é an t-iarratas cuimhne a shocrú cothrom leis an teorainn chuimhne.
  5. OK suiteáil iarrtha CPU <=1, mura ndéanann an t-iarratas ríomhaireachtaí casta.
  6. Má iarrann tú níos mó acmhainní ná mar atá ar fáil ar nód, ní bheidh an Pod sceidealaithe don nód sin choíche.
  7. Chun an méid ceart acmhainní/teorainneacha acmhainní iarrtha a chinneadh, bain úsáid as tástáil ualaigh agus monatóireacht.

Tá súil agam go gcabhraíonn an t-alt seo leat bunchoincheap an teorannaithe acmhainní a thuiscint. Agus beidh tú in ann an t-eolas seo a chur i bhfeidhm i do chuid oibre.

N-éirí leat!

Cad eile atá le léamh:

  1. Inbhraiteacht SRE: Ainmspásanna agus Struchtúr Méadrach.
  2. 90+ Uirlisí Úsáideacha do Kubernetes: Imscaradh, Bainistíocht, Monatóireacht, Slándáil agus Tuilleadh.
  3. Ár gcainéal Timpeall Kubernetes i Telegram.

Foinse: will.com

Add a comment