10 Kurakurai na yau da kullun Lokacin Amfani da Kubernetes

Lura. fassara: Marubutan wannan labarin injiniyoyi ne daga wani karamin kamfanin Czech, pipetail. Sun yi nasarar haɗa jerin abubuwan ban mamaki na [wani lokacin banal, amma har yanzu] matsaloli masu mahimmanci da kuskuren da suka shafi aikin Kubernetes clusters.

10 Kurakurai na yau da kullun Lokacin Amfani da Kubernetes

A cikin shekarun da ake amfani da Kubernetes, mun yi aiki tare da adadi mai yawa na gungu (duka masu sarrafawa da marasa sarrafawa - akan GCP, AWS da Azure). Bayan lokaci, mun fara lura cewa ana maimaita wasu kurakurai akai-akai. Duk da haka, babu kunya a cikin wannan: mun yi yawancin su da kanmu!

Labarin ya ƙunshi mafi yawan kurakurai kuma ya ambaci yadda ake gyara su.

1. Albarkatu: buƙatun da iyaka

Wannan abu tabbas ya cancanci kulawa mafi kusa da wuri na farko a jerin.

Buƙatar CPU yawanci ko dai ba a fayyace komai ba ko kuma yana da ƙarancin ƙima (don sanya kwasfa masu yawa akan kowane kumburi kamar yadda zai yiwu). Don haka, nodes ya zama mai nauyi. A lokacin babban nauyi, ana amfani da ikon sarrafa kumburin kuma wani nau'in aikin yana karɓar abin da ya "buƙata" kawai. CPU throttling. Wannan yana haifar da ƙara jinkirin aikace-aikacen, ƙarewar lokaci, da sauran sakamako marasa daɗi. (Karanta ƙarin game da wannan a cikin sauran fassarar mu na baya-bayan nan: “Iyakar CPU da tashin hankali a cikin Kubernetes"- kusan. fassara)

Mafi Kokari (matukar ba shawarar):

resources: {}

Buƙatun CPU mara ƙarancin ƙarfi (mafi girma ba shawarar):

   resources:
      Requests:
        cpu: "1m"

A gefe guda kuma, kasancewar iyakar CPU na iya haifar da tsalle-tsalle na agogo ba tare da ma'ana ba ta kwasfa, ko da na'urar sarrafa kumburin ba ta cika cika ba. Hakanan, wannan na iya haifar da ƙarin jinkiri. Ana ci gaba da jayayya a kusa da siga CPU CFS adadin a cikin Linux kernel da CPU throttling dangane da iyakokin da aka saita, da kuma kashe adadin CFS ... Kash, iyakokin CPU na iya haifar da matsaloli fiye da yadda za su iya magancewa. Ana iya samun ƙarin bayani game da wannan a hanyar haɗin da ke ƙasa.

Zaɓin da ya wuce kima (cirewa) matsalolin ƙwaƙwalwar ajiya na iya haifar da manyan matsaloli. Samun iyakar CPU ya haɗa da tsalle-tsalle na agogo, yayin da isa iyakar ƙwaƙwalwar ajiya ya haɗa da kashe kwasfa. Shin kun taɓa lura OOMkill? Haka ne, ainihin abin da muke magana akai.

Kuna so ku rage yiwuwar faruwar hakan? Kada a wuce gona da iri na ƙwaƙwalwar ajiya kuma yi amfani da Garanti QoS (Ingantacciyar Sabis) ta saita buƙatar ƙwaƙwalwar ajiya zuwa iyaka (kamar a misalin da ke ƙasa). Kara karantawa game da wannan a cikin Henning Jacobs gabatarwa (Jagoran Injiniya a Zalando).

Fashewa (mafi girman damar samun OOMkilled):

   resources:
      requests:
        memory: "128Mi"
        cpu: "500m"
      limits:
        memory: "256Mi"
        cpu: 2

Tabbas:

   resources:
      requests:
        memory: "128Mi"
        cpu: 2
      limits:
        memory: "128Mi"
        cpu: 2

Menene zai iya taimakawa yayin kafa albarkatu?

Tare da taimakon awo-uwar garken Kuna iya ganin amfani da albarkatun CPU na yanzu da amfani da ƙwaƙwalwar ajiya ta kwasfa (da kwantena a cikin su). Mafi mahimmanci, kun riga kun yi amfani da shi. Kawai gudanar da umarni masu zuwa:

kubectl top pods
kubectl top pods --containers
kubectl top nodes

Koyaya, kawai suna nuna amfani na yanzu. Zai iya ba ku cikakken ra'ayi na tsari na girma, amma a ƙarshe za ku buƙaci tarihin canje-canje a cikin ma'auni akan lokaci (don amsa tambayoyi kamar: "Mene ne babban nauyin CPU?", "Mene ne nauyin jiya da safe?", da sauransu). Don wannan zaka iya amfani Prometheus, DataDog da sauran kayan aikin. Suna kawai samun ma'auni daga metrics-server kuma suna adana su, kuma mai amfani zai iya tambayar su kuma ya tsara su daidai.

VerticalPodAutoscaler Yana da damar aiki da kai wannan tsari. Yana bin tarihin CPU da amfani da ƙwaƙwalwar ajiya kuma yana saita sabbin buƙatu da iyakoki dangane da wannan bayanin.

Yin amfani da ikon kwamfuta da inganci ba abu ne mai sauƙi ba. Yana kama da kunna Tetris koyaushe. Idan kuna biyan kuɗi da yawa don ƙididdige wutar lantarki tare da ƙarancin matsakaicin amfani (ce ~10%), muna ba da shawarar duba samfuran bisa AWS Fargate ko Virtual Kubelet. An gina su akan samfurin lissafin kuɗi mara sabar/baya-kowane-amfani, wanda zai iya zama mai rahusa a irin waɗannan yanayi.

2. Rayuwa da shirye-shiryen bincike

Ta hanyar tsoho, ba a kunna raye-raye da duban shirye-shirye a Kubernetes. Wani lokaci kuma sukan manta da kunna su...

Amma ta yaya kuma za ku iya fara aikin sake kunnawa a yayin da kuskure ya faru? Kuma ta yaya ma'aunin nauyi ya san cewa kwafsa yana shirye don karɓar zirga-zirga? Ko kuma yana iya ɗaukar ƙarin zirga-zirga?

Waɗannan gwaje-gwajen suna yawan rikicewa da juna:

  • Rayuwa - duba "tsira", wanda zai sake kunna kwaf ɗin idan ya kasa;
  • Shiryawa - duba shirye-shiryen, idan ya gaza, yana cire haɗin faifan daga sabis ɗin Kubernetes (ana iya bincika wannan ta amfani da kubectl get endpoints) kuma zirga-zirga ba ta isa gare ta har sai an kammala rajistan na gaba cikin nasara.

Duk waɗannan cak ANA YI A LOKACIN DUKKAN ZAGIN RAI NA FADA. Yana da matukar muhimmanci.

Kuskure na yau da kullun shine cewa ana gudanar da binciken shirye-shiryen ne kawai a farawa don ma'auni na iya sanin cewa kwaf ɗin ya shirya (Ready) kuma zai iya fara sarrafa zirga-zirga. Koyaya, wannan shine ɗayan zaɓuɓɓukan amfani da su.

Wani kuma shine yuwuwar gano cewa zirga-zirgar ababen hawa a kan kwafsa ya wuce gona da iri kuma yayi yawa (ko kwafsa yana yin ƙididdige yawan albarkatu). A wannan yanayin, duban shirye-shiryen yana taimakawa rage kaya a kan kwasfa kuma "sanyi" shi. Nasarar kammala rajistan shirye-shiryen a nan gaba yana ba da damar ƙara kaya a kan kwafsa kuma. A wannan yanayin (idan gwajin shirye-shiryen ya kasa), gazawar gwajin rayuwa zai zama mai fa'ida sosai. Me yasa za a sake kunna kwasfa mai lafiya kuma yana aiki tuƙuru?

Saboda haka, a wasu lokuta, babu cak kwata-kwata da ya fi ba su damar daidaita sigogin da ba daidai ba. Kamar yadda aka fada a sama, idan liveness duba kwafin shirye-shiryen rajistan shiga, to kuna cikin babbar matsala. Zaɓuɓɓuka mai yuwuwa shine a saita gwajin shiri kawaida kuma m rayuwa bar gefe.

Duk nau'ikan cak guda biyu bai kamata su gaza ba lokacin da abin dogaro na gama gari ya gaza, in ba haka ba wannan zai haifar da gazawar (kamar dusar ƙanƙara). Watau, kada ka cutar da kanka.

3. LoadBalancer ga kowane sabis na HTTP

Mafi mahimmanci, kuna da sabis na HTTP a cikin rukunin ku waɗanda kuke son turawa zuwa duniyar waje.

Idan ka buɗe sabis ɗin azaman type: LoadBalancer, Mai kula da shi (dangane da mai bada sabis) zai samar da yin shawarwari na LoadBalancer na waje (ba lallai ba ne yana gudana akan L7, amma har ma akan L4), kuma wannan na iya rinjayar farashin (adireshin IPv4 na waje, ikon sarrafa kwamfuta, lissafin kuɗi na biyu. ) saboda buƙatar ƙirƙirar adadi mai yawa na irin waɗannan albarkatu.

A wannan yanayin, yana da ma'ana sosai don amfani da ma'aunin nauyi na waje ɗaya, buɗe sabis kamar type: NodePort. Ko mafi kyau duk da haka, fadada wani abu kamar nginx-ingress-mai sarrafa (ko trafik), wanda zai zama shi kaɗai NodePort ƙarshen ƙarshen hade da ma'aunin nauyi na waje kuma zai bi da zirga-zirga a cikin tari ta amfani da ingress- Kubernetes albarkatun.

Sauran intra-cluster (micro) ayyuka da ke hulɗa da juna na iya "sadar da" ta amfani da ayyuka kamar ClusterIP da ginanniyar hanyar gano sabis ta hanyar DNS. Kada ku yi amfani da jama'a DNS/IP, saboda wannan na iya yin tasiri latency da ƙara farashin sabis na girgije.

4. Yin sikeli ta atomatik ba tare da la'akari da fasalinsa ba

Lokacin ƙara nodes zuwa da cire su daga gungu, bai kamata ku dogara da wasu ma'auni na asali kamar amfani da CPU akan waɗannan nodes ba. Shirye-shiryen Pod dole ne yayi la'akari da yawa ƙuntatawa, kamar kusancin kwas/node, taints da haƙuri, buƙatun albarkatun, QoS, da sauransu. Yin amfani da autoscaler na waje wanda baya la'akari da waɗannan nuances na iya haifar da matsaloli.

Ka yi tunanin cewa ya kamata a tsara wani fasfo, amma ana buƙatar duk ikon CPU / rarrabawa da kwaf ɗin. ya makale cikin wani hali Pending. Matsakaicin autoscaler na waje yana ganin matsakaicin nauyin CPU na yanzu (ba wanda ake buƙata ba) kuma baya fara faɗaɗawa (sikelin) - baya ƙara wani kumburi. A sakamakon haka, ba za a tsara wannan kwasfa ba.

A wannan yanayin, jujjuya sikelin (ma'auni) - cire kumburi daga gungu yana da wahalar aiwatarwa koyaushe. Ka yi tunanin cewa kana da kwasfa mai ƙima (tare da haɗe-haɗe mai tsayi). Juzu'i masu tsayi yawanci na takamaiman yankin samuwa kuma ba a yi su a yankin. Don haka, idan autoscaler na waje ya share kumburi tare da wannan kwasfa, mai tsara jadawalin ba zai iya tsara wannan kwafsa a wani kulli ba, tunda ana iya yin hakan ne kawai a yankin samuwa inda ma'ajiyar dagewa take. Pod za a makale a cikin hali Pending.

Sananniya sosai a cikin al'ummar Kubernetes cluster-autoscaler. Yana gudana akan gungu, yana goyan bayan APIs daga manyan masu samar da girgije, yana la'akari da duk ƙuntatawa kuma yana iya ƙima a cikin abubuwan da ke sama. Hakanan yana iya yin sikeli yayin kiyaye duk iyakokin da aka saita, don haka adana kuɗi (wanda in ba haka ba za'a kashe shi akan ƙarfin da ba a amfani da shi).

5. Yin watsi da damar IAM/RBAC

Yi hankali da amfani da masu amfani da IAM tare da sirrin dagewa don inji da aikace-aikace. Tsara damar shiga ta ɗan lokaci ta amfani da ayyuka da asusun sabis (Asusun sabis).

Sau da yawa muna haɗuwa da gaskiyar cewa maɓallan shiga (da sirri) suna hardcoded a cikin tsarin aikace-aikacen, da kuma yin watsi da juyawa na sirri duk da samun damar zuwa Cloud IAM. Yi amfani da matsayin IAM da asusun sabis maimakon masu amfani a inda ya dace.

10 Kurakurai na yau da kullun Lokacin Amfani da Kubernetes

Manta game da kube2iam kuma tafi kai tsaye zuwa ayyukan IAM don asusun sabis (kamar yadda aka bayyana a cikin bayanin kula iri ɗaya Štěpán Vraný):

apiVersion: v1
kind: ServiceAccount
metadata:
  annotations:
    eks.amazonaws.com/role-arn: arn:aws:iam::123456789012:role/my-app-role
  name: my-serviceaccount
  namespace: default

Bayani ɗaya. Ba haka ba da wuya, dama?

Hakanan, kar a ba da asusun sabis da gata na bayanan martaba admin и cluster-adminidan ba sa bukata. Wannan ya ɗan fi wahalar aiwatarwa, musamman a cikin RBAC K8s, amma tabbas ya cancanci ƙoƙarin.

6.Kada a dogara da kariya ta atomatik don kwasfa

Ka yi tunanin kana da kwafi uku na wasu turawa akan kumburi. Kullin ya faɗi, kuma tare da shi duk kwafi. Halin da ba shi da dadi, daidai? Amma me yasa duk kwafin ya kasance akan kulli ɗaya? Shin Kubernetes bai kamata ya samar da wadataccen abu (HA) ba?!

Abin takaici, mai tsara tsarin Kubernetes, a kan kansa, bai bi ka'idodin rayuwa daban ba (anti-dangantaka) don kwasfa. Dole ne a bayyana su a sarari:

// опущено для краткости
      labels:
        app: zk
// опущено для краткости
      affinity:
        podAntiAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            - labelSelector:
                matchExpressions:
                  - key: "app"
                    operator: In
                    values:
                    - zk
              topologyKey: "kubernetes.io/hostname"

Shi ke nan. Yanzu za a shirya kwasfa a kan nodes daban-daban (ana duba wannan yanayin ne kawai a lokacin tsarawa, amma ba yayin aikin su ba - don haka requiredDuringSchedulingIgnoredDuringExecution).

Anan muke magana akai podAntiAffinity a kan nodes daban-daban: topologyKey: "kubernetes.io/hostname", - kuma ba game da wurare daban-daban na samuwa ba. Don aiwatar da cikakken HA, dole ne ku zurfafa zurfafa cikin wannan batu.

7. Yin watsi da Budgets Rushewa

Ka yi tunanin cewa kana da kayan samarwa akan gungu na Kubernetes. Lokaci-lokaci, nodes da tarin kanta dole ne a sabunta su (ko soke su). PodDisruptionBudget (PDB) wani abu ne kamar yarjejeniyar garantin sabis tsakanin masu gudanar da tari da masu amfani.

PDB yana ba ku damar guje wa katsewar sabis sakamakon rashin nodes:

apiVersion: policy/v1beta1
kind: PodDisruptionBudget
metadata:
  name: zk-pdb
spec:
  minAvailable: 2
  selector:
    matchLabels:
      app: zookeeper

A cikin wannan misalin, kai, a matsayinka na mai amfani da gungu, sai ka bayyana wa admins: "Hey, ina da sabis na mai kula da zoo, kuma ko menene kuke yi, ina so a sami aƙalla kwafi 2 na wannan sabis ɗin koyaushe."

Kuna iya karanta ƙarin game da wannan a nan.

8. Masu amfani da yawa ko mahalli a cikin tari gama gari

Samun cikakken bincike na surname Kubernetes (fassarar suna) kar a samar da rufi mai ƙarfi.

Kuskure na gama gari shine idan kun tura kayan da ba na samfur ba zuwa cikin sararin suna ɗaya da kayan samfuri zuwa wani, sannan su ba za su rinjayi juna ta kowace hanya ba... Koyaya, ana iya samun takamaiman matakin keɓewa ta amfani da buƙatun albarkatu/iyakance, saita ƙididdiga, da saita azuzuwan fifiko. Wasu keɓancewa na “jiki” a cikin jirgin bayanan ana ba da su ta hanyar alaƙa, juriya, taints (ko nodeselectors), amma irin wannan rabuwa yana da kyau. wuya aiwatar.

Wadanda suke buƙatar haɗa nau'ikan nau'ikan nau'ikan ayyuka guda biyu a cikin gungu ɗaya dole ne su magance rikitarwa. Idan babu irin wannan buƙatar, kuma za ku iya samun damar samun ɗaya wani gungu daya (ka ce, a cikin gajimare na jama'a), to, yana da kyau a yi haka. Wannan zai cimma matsayi mafi girma na rufi.

9. Manufar Traffic na waje: Tari

Sau da yawa muna ganin cewa duk zirga-zirga a cikin gungu yana zuwa ta hanyar sabis kamar NodePort, wanda aka saita tsohuwar manufar externalTrafficPolicy: Cluster... Yana nufin cewa NodePort yana buɗewa akan kowane kumburi a cikin gungu, kuma zaka iya amfani da kowane ɗayansu don yin hulɗa tare da sabis ɗin da ake so (saitin pods).

10 Kurakurai na yau da kullun Lokacin Amfani da Kubernetes

A lokaci guda, ainihin kwas ɗin da ke da alaƙa da sabis na NodePort da aka ambata a sama yawanci ana samun su ne kawai akan takamaiman. juzu'in wadannan nodes. A wasu kalmomi, idan na haɗa zuwa kumburin da ba shi da faifan da ake buƙata, zai tura zirga-zirga zuwa wani kumburi, ƙara hop da karuwar latency (idan nodes suna cikin wurare daban-daban na samuwa / cibiyoyin bayanai, latency na iya zama mai girma sosai; Bugu da ƙari, ƙimar zirga-zirgar zirga-zirgar za ta ƙaru).

A gefe guda, idan wani sabis na Kubernetes yana da tsarin tsari externalTrafficPolicy: Local, to NodePort yana buɗewa kawai akan waɗancan nodes inda ainihin kwas ɗin da ake buƙata ke gudana. Lokacin amfani da ma'aunin nauyi na waje wanda ke duba jihar (kiwon lafiya) endpoints (yadda ake yi Farashin ELB), Ya zai aika zirga-zirga zuwa nodes masu mahimmanci kawai, wanda zai yi tasiri mai amfani akan jinkiri, buƙatun ƙididdigewa, lissafin kuɗi (kuma hankali yana nufin haka).

Akwai babban damar cewa kun riga kun yi amfani da wani abu kamar trafik ko nginx-ingress-mai sarrafa a matsayin ƙarshen NodePort (ko LoadBalancer, wanda kuma ke amfani da NodePort) don tafiyar da zirga-zirgar shiga HTTP, kuma saita wannan zaɓi na iya rage jinkirin irin waɗannan buƙatun.

В wannan littafin Za ka iya ƙarin koyo game da externalTrafficPolicy, fa'idodi da rashin amfanin sa.

10. Kada a daure a gungu kuma kada ku zagi jirgin sarrafawa

A baya can, al'ada ce a kira sabobin da sunayen da suka dace: Anton, HAL9000 da Colossus... A yau an maye gurbinsu da abubuwan ganowa da aka samo asali. Koyaya, al'adar ta kasance, kuma yanzu sunaye masu dacewa suna zuwa gungu.

Labari na yau da kullun (dangane da abubuwan da suka faru na ainihi): duk ya fara ne da tabbacin ra'ayi, don haka tarin yana da suna mai girman kai. gwaji… Shekaru sun shuɗe kuma HAR YANZU ana amfani da shi wajen samarwa, kuma kowa yana jin tsoron taɓa shi.

Babu wani abu mai daɗi game da gungu na juyawa zuwa dabbobi, don haka muna ba da shawarar cire su lokaci-lokaci yayin yin aiki murmurewa bala'i (wannan zai taimaka injiniyoyin hargitsi - kimanin. fassara). Bugu da ƙari, ba zai cutar da yin aiki a kan Layer na sarrafawa ba (jirgin sarrafawa). Tsoron taba shi ba alama ce mai kyau ba. Da dai sauransu mutu? Jama'a, da gaske kuna cikin wahala!

A gefe guda kuma, bai kamata ku tafi tare da yin amfani da shi ba. Tare da lokaci Layer na sarrafawa na iya zama a hankali. Mafi mahimmanci, wannan ya faru ne saboda yawancin abubuwa da aka ƙirƙira ba tare da jujjuya su ba (yanayin gama gari lokacin amfani da Helm tare da saitunan tsoho, wanda shine dalilin da ya sa ba a sabunta yanayin sa a cikin configmaps / asirin ba - sakamakon haka, dubban abubuwa sun taru a ciki. Layer na sarrafawa) ko tare da gyare-gyare akai-akai na abubuwan kube-api (don sikelin atomatik, don CI/CD, don saka idanu, rajistan ayyukan taron, masu sarrafawa, da sauransu).

Bugu da ƙari, muna ba da shawarar duba yarjejeniyar SLA/SLO tare da mai ba da Kubernetes mai sarrafawa da kuma kula da garanti. Mai siyarwa na iya garanti sarrafawa Layer samuwa (ko sassanta), amma ba jinkirin p99 na buƙatun da kuka aika masa ba. Ma'ana, kuna iya shiga kubectl get nodes, kuma karbi amsa kawai bayan minti 10, kuma wannan ba zai zama cin zarafi ga sharuɗɗan yarjejeniyar sabis ba.

11. Bonus: ta amfani da sabuwar tag

Amma wannan ya riga ya zama classic. Kwanan nan mun ci karo da wannan dabara ba sau da yawa, tunda da yawa, tun da suka koya daga kwarewa mai ɗaci, sun daina amfani da alamar :latest kuma ya fara pinning versions. Hooray!

ECR yana kula da rashin canzawar alamun hoto; Muna ba da shawarar ku san kanku da wannan abin ban mamaki.

Takaitaccen

Kada ku yi tsammanin komai zai yi aiki dare ɗaya: Kubernetes ba panacea ba ne. Mummunan app zai kasance ta wannan hanya har ma a Kubernetes (kuma tabbas zai yi muni). Rashin kulawa zai haifar da rikitarwa mai yawa, jinkirin aiki da damuwa na Layer mai sarrafawa. Bugu da ƙari, kuna haɗarin barin ku ba tare da dabarun dawo da bala'i ba. Kada ku yi tsammanin Kubernetes zai samar da keɓancewa da babban samuwa daga cikin akwatin. Ɗauki ɗan lokaci don yin aikace-aikacenku na asali na gajimare da gaske.

Kuna iya sanin abubuwan da ba su yi nasara ba na ƙungiyoyi daban-daban a ciki wannan tarin labaran da Henning Jacobs.

Masu son ƙara zuwa jerin kurakuran da aka bayar a cikin wannan labarin za su iya tuntuɓar mu akan Twitter (@MarekBartik, @MstrsObserver).

PS daga mai fassara

Karanta kuma a kan shafinmu:

source: www.habr.com

Add a comment