E iwa nga Tohu Mahinga Kubernetes

E iwa nga Tohu Mahinga Kubernetes

Kia ora katoa! Ko Oleg Sidorenkov toku ingoa, kei te mahi ahau i DomClick hei upoko mo te roopu hanganga. Neke atu i te toru tau matou e whakamahi ana i te Kubik i roto i nga mahi whakangao, a i roto i tenei waa he maha nga waa whakamere i a maatau. I tenei ra ka korero atu ahau ki a koe me pehea, me te huarahi tika, ka taea e koe te kohi atu i nga mahi mai i te vanilla Kubernetes mo to roopu. Kia rite tonu!

Kei te tino mohio koutou ko te Kubernetes he punaha puna tuwhera ka taea te whakarite mo te hanga ipu; pai, 5 ranei nga rua e mahi makutu ma te whakahaere i te huringa ora o o ratonga miihini i roto i te taiao tūmau. I tua atu, he taputapu tino ngawari ka taea te whakahiato penei i a Lego mo te tino whakaritenga mo nga mahi rereke.

A he pai nga mea katoa: makahia nga kaitoro ki roto i te tautau ka rite ki nga wahie ki roto i te pouaka ahi, a kaore koe e mohio ki te pouri. Engari mena ko koe mo te taiao, ka whakaaro koe: "Me pehea e taea ai e au te pupuri i te ahi kia ka tonu me te whakaora i te ngahere?" I etahi atu kupu, me pehea te rapu huarahi hei whakapai ake i nga hanganga me te whakaiti i nga utu.

1. Aroturukihia te roopu me nga rauemi tono

E iwa nga Tohu Mahinga Kubernetes

Ko tetahi o nga tikanga tino noa, engari e whai hua ana ko te whakauru i nga tono/tepe. Wehea nga tono ma nga mokowā ingoa, me nga waahi ingoa ma nga roopu whanaketanga. I mua i te tukunga, whakatauhia nga uara tono mo te kohi o te wa tukatuka, te mahara, me te rokiroki ephemeral.

resources:
   requests:
     memory: 2Gi
     cpu: 250m
   limits:
     memory: 4Gi
     cpu: 500m

Na roto i nga wheako, i tae matou ki te whakatau: kaua e nui ake te rua o nga tono mai i nga rohe. Ko te rōrahi o te kāhui ka tatauhia i runga i nga tono, a ki te hoatu e koe he rereketanga o nga rauemi ki nga tono, hei tauira, 5-10 nga wa, ka whakaaro he aha te mea ka pa ki to pona ka whakakiia ki nga pene ka riro ohorere mai te kawenga. Kaore he mea pai. I te iti rawa, te tarai, me te nui rawa atu, ka poroporoaki koe ki te kaimahi ka whiwhi i te kawenga porohita i runga i nga waahanga e toe ana i muri i te tiimata o te neke.

I tua atu, me te awhina limitranges I te timatanga, ka taea e koe te whakarite uara rauemi mo te ipu - te iti, te teitei me te taunoa:

➜  ~ kubectl describe limitranges --namespace ops
Name:       limit-range
Namespace:  ops
Type        Resource           Min   Max   Default Request  Default Limit  Max Limit/Request Ratio
----        --------           ---   ---   ---------------  -------------  -----------------------
Container   cpu                50m   10    100m             100m           2
Container   ephemeral-storage  12Mi  8Gi   128Mi            4Gi            -
Container   memory             64Mi  40Gi  128Mi            128Mi          2

Kaua e wareware ki te whakawhāiti i ngā rauemi mokowāingoa kia kore e taea e te kapa kotahi te tango i nga rauemi katoa o te roopu:

➜  ~ kubectl describe resourcequotas --namespace ops
Name:                   resource-quota
Namespace:              ops
Resource                Used          Hard
--------                ----          ----
limits.cpu              77250m        80
limits.memory           124814367488  150Gi
pods                    31            45
requests.cpu            53850m        80
requests.memory         75613234944   150Gi
services                26            50
services.loadbalancers  0             0
services.nodeports      0             0

Ka kitea mai i te whakaahuatanga resourcequotas, ki te hiahia te roopu ops ki te tuku i nga pods ka pau i te 10 cpu ano, ka kore e whakaaehia e te kaiwhakariterite tenei ka tukuna he hapa:

Error creating: pods "nginx-proxy-9967d8d78-nh4fs" is forbidden: exceeded quota: resource-quota, requested: limits.cpu=5,requests.cpu=5, used: limits.cpu=77250m,requests.cpu=53850m, limited: limits.cpu=10,requests.cpu=10

Hei whakaoti i taua raruraru, ka taea e koe te tuhi i tetahi taputapu, hei tauira, penei tenei, ka taea ki te rokiroki me te tuku i te ahua o nga rauemi whakahau.

2. Kōwhiria te rokiroki kōnae tino pai

E iwa nga Tohu Mahinga Kubernetes

I konei e hiahia ana ahau ki te pa atu ki te kaupapa o nga pukapuka e mau tonu ana me te puunaha iti kopae o nga pona kaimahi Kubernetes. Te ti'aturi nei au e kore tetahi e whakamahi i te "Cube" i runga i te HDD ki te hanga, engari i etahi wa kaore e ranea te SSD. I raru matou i te wa e patu ana nga rakau i te kōpae na nga mahi I/O, a he iti noa nga otinga:

  • Whakamahia nga SSD mahi nui ka huri ranei ki te NVMe (mehemea kei te whakahaere koe i taau ake taputapu).

  • Whakaitihia te taumata takitaki.

  • Mahia "maamaa" te whakataurite o nga poti e rawe ana i te kōpae (podAntiAffinity).

Ko te mata o runga e whakaatu ana he aha te mea ka tupu i raro i te nginx-ingress-controller ki te kōpae ina whakahohea te takiuru uru_logs (~12 mano rangitaki/hekona). Ko tenei ahuatanga, ko te tikanga, ka taea te paheketanga o nga tono katoa i runga i tenei node.

Mo te PV, aue, kaore au i whakamatau i nga mea katoa momo Rorohiko Tonu. Whakamahia te kōwhiringa pai e pai ana ki a koe. I nga wa o mua, kua pa ki to tatou whenua ko tetahi waahanga iti o nga ratonga e hiahia ana ki nga pukapuka RWX, a kua roa kua timata ratou ki te whakamahi i te rokiroki NFS mo tenei mahi. He iti me te ... nui. Ae ra, i kai maua ko ia i te taaka - manaakitia koe, engari i ako matou ki te whakatikatika, kare ano toku mahunga e mamae. A, ki te taea, neke ki te rokiroki ahanoa S3.

3. Kohikohia nga whakaahua kua pai ake

E iwa nga Tohu Mahinga Kubernetes

He pai ake te whakamahi i nga whakaahua kua whakapai ake i nga ipu kia taea ai e Kubernetes te tiki tere me te mahi pai ake. 

Ko te tikanga o te arotau ko nga whakaahua:

  • kia kotahi anake te tono, kia kotahi noa te mahi;

  • he iti te rahi, na te mea ka tukuna nga whakaahua nui ki runga i te whatunga;

  • he tohu mutunga hauora me te reri e taea ai e Kubernetes te mahi i te wa e paheke ana;

  • te whakamahi i nga punaha whakahaere pai-putea (penei i te Alpine, i te CoreOS ranei), he kaha ake te aukati ki nga hapa whirihoranga;

  • whakamahia nga hanga-waahanga maha kia taea ai e koe anake te tuku tono whakahiato, kaua ko nga puna e whai ake nei.

He maha nga taputapu me nga ratonga ka taea e koe te tirotiro me te arotau i nga whakaahua i runga i te rere. He mea nui kia mau tonu nga korero me te whakamatautau mo te haumaru. Ko te mutunga ka whiwhi koe:

  1. Kua whakaitihia te uta o te whatunga i runga i te huinga katoa.

  2. Te whakaiti i te wa whakaoho ipu.

  3. He iti ake te rahi o to rehita Docker katoa.

4. Whakamahia keteroki DNS

E iwa nga Tohu Mahinga Kubernetes

Mena ka korero tatou mo nga kawenga nui, he tino kino te ora me te kore e aro ki te punaha DNS o te tautau. I tetahi wa, i tautoko nga kaihanga Kubernetes i ta raatau otinga kube-dns. I whakatinanahia ano i konei, engari ko tenei rorohiko kaore i tino arohia, kaore hoki i whakaputa i nga mahi e hiahiatia ana, ahakoa he mahi ngawari. Na ka puta mai nga coredns, i huri matou ki reira kaore he pouri; no muri mai ka noho hei ratonga DNS taunoa i roto i nga K8s. I etahi wa, ka piki ake matou ki te 40 mano rps ki te punaha DNS, a ka iti ano tenei otinga. Engari, na te waimarie, ka puta mai a Nodelocaldns, aka node local cache, aka NodeLocal DNSCache.

He aha tatou ka whakamahi ai i tenei? He pepeke kei roto i te kakano Linux, na te maha o nga waea mai i te conntrack NAT ki runga i te UDP, ka puta he ahuatanga whakataetae mo nga whakaurunga ki nga ripanga hono, ka ngaro tetahi waahanga o te hokohoko ma te NAT (ko ia haerenga ma te Ratonga ko NAT). Ka whakatauhia e Nodelocaldns tenei raru ma te whakakore i te NAT me te whakahou i te hononga ki te TCP ki te DNS whakarunga, me te keteroki a rohe i nga patai DNS whakarunga (tae atu ki te keteroki kino 5-tuarua poto).

5. Whakatauhia nga pene ki te whakapae me te poutū aunoa

E iwa nga Tohu Mahinga Kubernetes

Ka taea e koe te kii ma te maia kua reri katoa o ratonga moroiti mo te pikinga e rua ki te toru nga wa o te kawenga? Me pehea te tohatoha tika i nga rauemi ki o tono? Ko te pupuri i nga poti e rua e rere ana i tua atu o te taumahatanga ka nui ake pea te mahi, engari ma te pupuri ki muri ki muri ka tupono te heke mai i te piki ohorere o te waka ki te ratonga. Nga ratonga penei Whakapae Autoscaler Pod и Poutū Poutū Aunoa.

VPA ka taea e koe te whakaara aunoa i nga tono/tepe o o ipu ki roto i te pona i runga i te whakamahinga tuturu. Me pehea e whai hua ai? Mena kei a koe nga pene kaore e taea te whakaheke whakapae mo etahi take (kaore i te tino pono), ka taea e koe te ngana ki te tuku huringa ki ona rauemi ki te VPA. Ko tana ahuatanga he punaha tohutohu e pa ana ki nga korero o mua me nga korero o naianei mai i te metric-server, na, ki te kore koe e hiahia ki te whakarereke aunoa i nga tono/tepe, ka taea e koe te aro turuki i nga rauemi e taunaki ana mo o ipu me te arotau i nga tautuhinga hei whakaora i te PTM me mahara i roto i te tautau.

E iwa nga Tohu Mahinga KubernetesHe whakaahua i tangohia mai i https://levelup.gitconnected.com/kubernetes-autoscaling-101-cluster-autoscaler-horizontal-pod-autoscaler-and-vertical-pod-2a441d9ad231

Ko te kaihōtaka i Kubernetes kei runga tonu i nga tono. Ahakoa he aha te uara ka tukuna e koe ki reira, ka rapuhia e te kaihōtaka he node e tika ana i runga. Ko nga uara tepe e hiahiatia ana kia mohio ai te cubelet ki te wa e werohia ai, e patu ana ranei i te pene. Na i te mea ko te tawhā nui anake ko te uara tono, ka mahi tahi a VPA. I nga wa katoa ka whakatauhia e koe tetahi tono, ka whakatauhia e koe he aha nga tono. Ka aha ki nga rohe? Ko tenei tawhā ka whakatauhia kia riterite.

Hei tauira, koinei nga tautuhinga pod o mua:

resources:
   requests:
     memory: 250Mi
     cpu: 200m
   limits:
     memory: 500Mi
     cpu: 350m

Ka whakatauhia e te miihini tohutohu me 300m CPU me te 500Mi to tono kia pai te whakahaere. Ka whiwhi koe i nga tautuhinga e whai ake nei:

resources:
   requests:
     memory: 500Mi
     cpu: 300m
   limits:
     memory: 1000Mi
     cpu: 525m

Ka rite ki te korero i runga ake nei, he tauine rite tenei i runga i te owehenga tono/tepe i roto i te whakaaturanga:

  • PTM: 200m → 300m: ōwehenga 1:1.75;

  • Mahara: 250Mi → 500Mi: ōwehenga 1:2.

Tuhinga o mua HPA, ka marama ake te tikanga o te mahi. Ko nga inenga penei i te PTM me te mahara he paepae, a, ki te nui ake te toharite o nga tauira katoa i te paepae, ka whakatauhia te tono ma te +1 sub kia taka ra ano te uara ki raro i te paepae, kia tae ra ano ki te nui o nga tauira.

E iwa nga Tohu Mahinga KubernetesHe whakaahua i tangohia mai i https://levelup.gitconnected.com/kubernetes-autoscaling-101-cluster-autoscaler-horizontal-pod-autoscaler-and-vertical-pod-2a441d9ad231

I tua atu i nga inenga o mua penei i te PTM me te mahara, ka taea e koe te whakarite i nga paepae ki o inenga ritenga mai i Prometheus me te mahi tahi ki a raatau ki te whakaaro koe koinei te tohu tino tika mo te wa e tauine ai to tono. Kia u ana te tono ki raro i te paepae ineine kua tohua, ka timata te HPA ki te whakaheke i nga poti ki te iti rawa o nga tauira, kia tutuki ra ano te uta ki te paepae kua tohua.

6. Kaua e wareware ki te Node Affinity me te Pod Affinity

E iwa nga Tohu Mahinga Kubernetes

Karekau nga pona katoa e rere ana i runga i te taputapu kotahi, a kaore nga pene katoa e tika kia whakahaere i nga tono rorohiko-kaha. Ko nga Kubernetes ka taea e koe te whakarite i te motuhake o nga pona me nga pona e whakamahi ana Hononga Node и Pod Affinity.

Mena kei a koe nga pona e pai ana mo nga mahi rorohiko-kaha, na mo te tino pai he pai ake te here i nga tono ki nga waahanga e rite ana. Hei mahi i tenei whakamahi nodeSelector me te tapanga node.

Me kii e rua ou pona: kotahi me CPUType=HIGHFREQ me te maha o nga tino tere, me tetahi atu MemoryType=HIGHMEMORY nui ake te mahara me te tere ake o te mahi. Ko te huarahi ngawari ko te tautapa i te horahanga ki tetahi node HIGHFREQma te taapiri atu ki te waahanga spec kaikowhiri penei:

…
nodeSelector:
	CPUType: HIGHFREQ

Ko te huarahi utu nui ake me te motuhake ki te mahi i tenei ko te whakamahi nodeAffinity i te mara affinity razdela spec. E rua nga whiringa:

  • requiredDuringSchedulingIgnoredDuringExecution: te whakatakotoranga pakeke (ka tukuna e te kai-whakarite nga pene ki runga i nga waahanga motuhake (kaore he waahi));

  • preferredDuringSchedulingIgnoredDuringExecution: te whakatakotoranga ngawari (ka ngana te kaihōtaka ki te hora ki nga pona motuhake, a ki te kore tera, ka ngana ki te tuku ki te pona e whai ake nei).

Ka taea e koe te tautuhi i tetahi wetereo motuhake mo te whakahaere tapanga node, penei In, NotIn, Exists, DoesNotExist, Gt ranei Lt. Engari, kia mahara ko nga tikanga uaua i roto i nga rarangi roa o nga tapanga ka whakaroa i te whakatau i nga ahuatanga kino. Arā, kia ngawari noa.

Ka rite ki te korero i runga ake nei, ka taea e Kubernetes te tautuhi i te hononga o nga pene o naianei. Arā, ka taea e koe te mohio kei te mahi tahi etahi poti me etahi atu poti i roto i te rohe waatea (e pa ana ki nga kapua) me nga pona.

В podAffinity mara affinity razdela spec e wātea ana nga mara rite i roto i te take o nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution и preferredDuringSchedulingIgnoredDuringExecution. Ko te rereke anake ko tera matchExpressions ka herea nga pene ki tetahi pona e whakahaere ana i tetahi poti me taua tapanga.

Ka tukuna ano e Kubernetes tetahi mara podAntiAffinity, karekau e herea te pene ki tetahi pona me nga pene motuhake.

Mo nga korero nodeAffinity Ka taea ano te tohutohu: ngana ki te pupuri i nga ture kia ngawari me te arorau, kaua e ngana ki te whakakii i te tohu o te pona me te huinga ture uaua. He tino ngawari ki te hanga i tetahi ture e kore e taurite ki nga tikanga o te tautau, te hanga i te kawenga koretake i runga i te kaataka me te whakaiti i nga mahi katoa.

7. Tants & Tolerances

He huarahi ke atu ki te whakahaere i te raarangi. Mena he kahui nui koe me nga rau o nga pona me nga mano o nga ratonga moroiti, he tino uaua ki te kore e tuku i etahi pona kia noho ki runga i etahi pona.

Ko te tikanga o te tants—te aukati i nga ture—ka awhina i tenei. Hei tauira, i roto i etahi ahuatanga ka taea e koe te aukati i etahi pona kia kore e rere nga pona. Hei tono taint ki tetahi node motuhake me whakamahi koe i te whiringa taint i te kubectl. Tauwhāitihia te kī me te uara katahi ka whakapouri NoSchedule ranei NoExecute:

$ kubectl taint nodes node10 node-role.kubernetes.io/ingress=true:NoSchedule

He mea tika ano kia mohio ko te miihini taint e tautoko ana i nga paanga matua e toru: NoSchedule, NoExecute и PreferNoSchedule.

  • NoSchedule ko te tikanga mo tenei wa karekau he urunga e tika ana ki roto i te tohu o te pod tolerations, e kore e taea te tuku ki runga i te node (i tenei tauira node10).

  • PreferNoSchedule - putanga ngawari NoSchedule. I tenei keehi, ka ngana te kaihōtaka kia kaua e toha nga poti karekau he urunga taurite tolerations ia node, engari ehara tenei i te herenga uaua. Mena karekau he rauemi kei roto i te kahui, katahi ka timata nga putunga ki te hora ki runga i tenei node.

  • NoExecute - ma tenei paanga ka puta te whakatahitanga o nga poro karekau he urunga tolerations.

He mea whakamiharo, ka taea te whakakore i tenei whanonga ma te whakamahi i te tikanga tuku. He watea tenei ina he node "kua rahuitia" me tuu noa nga ratonga hanganga ki runga. Me pehea te mahi? Whakaaetia ko nga peera anake e pai ana te manawanui.

Anei te ahua o te whakatakotoranga pod:

spec:
   tolerations:
     - key: "node-role.kubernetes.io/ingress"
        operator: "Equal"
        value: "true"
        effect: "NoSchedule"

Ehara tenei i te mea ka taka mai te reanga o muri mai ki runga i tenei node, ehara tenei i te tikanga Node Affinity me nodeSelector. Engari ma te whakakotahi i te maha o nga ahuatanga, ka taea e koe te whakatutuki i nga tautuhinga whakahōtaka tino ngawari.

8. Whakatakotoria te Manaakitanga Pod Deployment

Na te mea kua tautapahia nga pona ki nga pona, ehara i te mea me rite te kaupapa matua katoa. Hei tauira, ka hiahia pea koe ki te tuku i etahi putunga ki mua i etahi atu.

He rereke nga huarahi e tuku ana a Kubernetes ki te whirihora i te Pod Priority and Preemption. He maha nga waahanga o te tautuhinga: ahanoa PriorityClass me nga whakaahuatanga mara priorityClassName i roto i te whakatakotoranga pod. Kia titiro tatou ki tetahi tauira:

apiVersion: scheduling.k8s.io/v1
kind: PriorityClass
metadata:
  name: high-priority
value: 99999
globalDefault: false
description: "This priority class should be used for very important pods only"

Hanga tatou PriorityClass, hoatu he ingoa, he whakaahuatanga me te uara. Te teitei ake value, ko teitei ake te kaupapa matua. Ka taea e te uara he tauoti 32-bit iti iho i te rite ranei ki te 1. Ko nga uara teitei ake ka rahuitia mo nga punaha miihana-nui kaore e taea te aukati. Ka puta noa te nekehanga mena karekau he waahi hei huri i tetahi poti matua-nui, katahi ka wehea etahi o nga pona mai i tetahi pona. Mēnā he mārō rawa tēnei tikanga māu, ka taea e koe te tāpiri i te kōwhiringa preemptionPolicy: Never, katahi ka kore he waahi, ka tu tuatahi te poti ki te rarangi ka tatari kia kitea e te kaiwhakarite nga rauemi kore utu mo taua mea.

I muri mai, ka hangahia e matou he putea hei tohu i te ingoa priorityClassName:

apiVersion: v1
kind: Pod
metadata:
  name: static-web
  labels:
    role: myrole
 spec:
  containers:
    - name: web
      image: nginx
      ports:
        - name: web
          containerPort: 80
          protocol: TCP
  priorityClassName: high-priority
          

Ka taea e koe te hanga i te maha o nga karaehe kaupapa matua e pai ana koe, ahakoa e taunaki ana kia kaua e kaikawe ki tenei (me kii, whakawhāitihia koe ki te iti, te reo me te mea nui).

Na, ki te tika, ka taea e koe te whakanui ake i te kaha o te tuku ratonga whakahirahira penei i te nginx-ingress-controller, coredns, etc.

9. Whakanuia te huinga ETCD

E iwa nga Tohu Mahinga Kubernetes

Ko te ETCD ka kiia ko te roro o te roopu katoa. He mea tino nui ki te pupuri i te mahi o tenei putunga korero i te taumata teitei, na te mea ko te tere o nga mahi i Cube e whakawhirinaki ana ki runga. He tino paerewa, me te wa ano, ko te otinga pai ko te pupuri i te roopu ETCD ki runga i nga pona ariki kia iti ai te whakaroa ki te kube-apiserver. Ki te kore e taea e koe te mahi, katahi ka tuu te ETCD kia tata rawa atu, me te pai o te bandwidth i waenga i nga kaiuru. Kia tupato ano ki te maha o nga pona mai i te ETCD ka taka ki waho kaore he kino ki te tautau

E iwa nga Tohu Mahinga Kubernetes

Kia maumahara ko te whakanui i te maha o nga mema i roto i te roopu ka nui ake te aro o te he i runga i te whakapaunga o te mahi, me noho tika nga mea katoa.

Mena ka korero tatou mo te whakarite i te ratonga, he iti noa nga taunakitanga:

  1. Kia pai nga taputapu, i runga i te rahi o te tautau (ka taea e koe te panui konei).

  2. Takawirihia etahi tawhā mena kua horahia e koe he kapoi i waenga i nga DC e rua, i to whatunga me nga kopae ka waiho nga mea e hiahiatia ana (ka taea e koe te panui konei).

mutunga

Ko tenei tuhinga e whakaatu ana i nga tohu e ngana ana to taatau roopu ki te whakatutuki. Ehara tenei i te whakaahuatanga taahiraa-i-taahiraa o nga mahi, engari ko nga whiringa ka whai hua pea mo te arotautanga o te kahui i runga ake. E marama ana he ahurei ia kahui i a ia ano, a he rereke nga otinga whirihoranga, no reira he mea pai ki te whakahoki mai i o urupare mo te aro turuki i to huinga Kubernetes me te whakapai ake i ana mahi. A faaite i to wheako i roto i nga korero, ka pai ki te mohio.

Source: will.com