Kubernetes 1.16: giştpirsiya nûbûnên sereke

Kubernetes 1.16: giştpirsiya nûbûnên sereke

Îro Çarşemê, dê pêk were serbestberdana paşîn a Kubernetes - 1.16. Li gorî kevneşopiya ku ji bo bloga me pêş ketiye, ev deh saliya ku em li ser guherînên herî girîng ên guhertoya nû diaxivin.

Agahiyên ku ji bo amadekirina vê materyalê têne bikar anîn ji têne girtin Tabloyên şopandina pêşkeftinên Kubernetes, GUHERIN-1.16 û pirsgirêkên têkildar, daxwazên kişandinê, û Pêşniyarên Pêşveçûna Kubernetes (KEP). Îcar em herin!..

Nodes

Bi rastî hejmareke mezin ji nûvekirinên berbiçav (di statûya guhertoya alpha de) li kêleka girêkên koma K8s (Kubelet) têne pêşkêş kirin.

Ya yekem, bi navê «konteynirên efemeral» (Konteynerên Efemeral), ji bo hêsankirina pêvajoyên debuggkirinê yên di pods de hatî çêkirin. Mekanîzmaya nû destûrê dide te ku hûn konteynerên taybetî yên ku di nav cîhê navên podeyên heyî de dest pê dikin û ji bo demek kurt dijîn bidin destpêkirin. Armanca wan ew e ku bi pod û konteynerên din re têkilî daynin da ku her pirsgirêk çareser bikin û debug bikin. Fermanek nû ji bo vê taybetmendiyê hate bicîh kirin kubectl debug, di eslê xwe de dişibin kubectl exec: Tenê li şûna ku pêvajoyek di konteynerê de bimeşîne (wek di exec) ew konteynirek di qulikê de vedike. Mînakî, ev ferman dê konteynirek nû bi podek ve girêbide:

kubectl debug -c debug-shell --image=debian target-pod -- bash

Agahdariyên li ser konteynerên efhemeral (û mînakên karanîna wan) dikarin tê de werin dîtin KEP-ê têkildar. Pêkanîna heyî (di K8s 1.16 de) guhertoyek alpha ye, û di nav pîvanên veguheztina wê bo guhertoyek beta de "ceribandina API-ya Ephemeral Containers ji bo herî kêm 2 berdanên [Kubernetes] heye."

NB: Di eslê xwe û tewra navê xwe de, taybetmendî dişibihe pêvekek jixwe heyî kubectl-debugli ser ku em berê nivîsandiye. Tê payîn ku bi hatina konteynerên efhemeral re, pêşkeftina pêvekek derveyî ya cihêreng dê raweste.

Nûbûnek din - PodOverhead - ji bo pêşkêşkirinê hatî çêkirin mekanîzmaya ji bo hesabkirina lêçûnên zêde yên ji bo pods, ku dikare li gorî dema xebitandinê ya ku hatî bikar anîn pir cûda bibe. Wek nimûne, nivîskaran ev KEP Encam di konteynirên Kata de, ku hewce dike ku kernelê mêvan, karmendê kata, pergala destpêkê, hwd bimeşîne. Dema ku serma ewqas mezin dibe, ew nayê paşguh kirin, ku tê vê wateyê ku pêdivî ye ku rêyek hebe ku ew ji bo kotayên din, plansazkirin, hwd. Ji bo pêkanîna wê di PodSpec zeviyê zêde kirin Overhead *ResourceList (bi daneyan re berhev dike RuntimeClass, heke yek were bikar anîn).

Nûbûnek din a balkêş ev e gerînendeyê topolojiya node (Rêveberê Topolojiya Node), ji bo yekkirina nêzîkatiya ji bo birêkûpêkkirina dabeşkirina çavkaniyên hardware ji bo pêkhateyên cihêreng ên li Kubernetes hatî çêkirin. Ev destpêşxerî ji hêla mezinbûna hewcedariya pergalên cûrbecûr yên nûjen (ji qada têlefonê, fêrbûna makîneyê, karûbarên darayî, hwd.) ji bo hesabkirina paralel a bi performansa bilind û kêmkirina derengiyên di pêkanîna operasyonan de, ji bo ku ew CPU-ya pêşkeftî bikar tînin û şiyanên lezkirina hardware. Optimîzasyonên weha li Kubernetes-ê heya nuha bi saya hêmanên cihêreng (rêveberê CPU, rêveberê cîhazê, CNI) hatine bidestxistin, û naha ew ê navbeynek navxweyî ya yekbûyî ku nêzîkatiyê yek dike û girêdana mînaheviyên nû - bi navê topolojiya- hêsan dike were zêdekirin. aware - pêkhateyên li aliyê Kubelet. Details - in KEP-ê têkildar.

Kubernetes 1.16: giştpirsiya nûbûnên sereke
Diagrama Pêkhateya Rêvebirê Topolojiyê

Taybetmendiya paşîn - kontrolkirina konteyneran dema ku ew dixebitin (lêpirsîna destpêkê). Wekî ku hûn dizanin, ji bo konteynerên ku ji bo destpêkirina wan demek dirêj digire, dijwar e ku meriv statûyek nûjen bistîne: ew an têne "kuştin" berî ku ew bi rastî dest bi kar bikin, an jî ew ji bo demek dirêj di xitimandinê de dimînin. Kontrola nû (bi navgîniya deriyê taybetmendiyê ve hatî çalak kirin StartupProbeEnabled) betal dike - an bêtir, taloq dike - bandora her kontrolên din heya dema ku pod biqede. Ji ber vê yekê, taybetmendiyê di destpêkê de hate gotin pod-startup liveness-probe holdoff. Ji bo pêlên ku destpêkirina wan demek dirêj digire, hûn dikarin di navberên demkî yên kurt de dewletê rapirsin.

Wekî din, başbûnek ji bo RuntimeClass tavilê di statûya betayê de peyda dibe, piştgirî ji bo "komên heterojen" zêde dike. C RuntimeClass Scheduling Naha qet ne hewce ye ku her girêk ji bo her RuntimeClass piştgirî hebe: ji bo podan hûn dikarin RuntimeClass hilbijêrin bêyî ku hûn li ser topolojiya komê bifikirin. Berê, ji bo bidestxistina vê yekê - da ku pod li ser girêkan bi piştgirîya her tiştê ku ew hewce ne biqedin - pêdivî bû ku rêzikên guncan ji NodeSelector û tolerasyonan re werin destnîşankirin. LI DEVIK Ew li ser mînakên karanînê û, bê guman, hûrguliyên pêkanînê diaxive.

Network

Du taybetmendiyên torê yên girîng ên ku ji bo yekem car (di guhertoya alpha de) di Kubernetes 1.16 de xuya bûn ev in:

  • alîkarî stûna torê ya dualî - IPv4 / IPv6 - û "têgihiştina" wê ya têkildar di asta pod, nod, karûbaran de. Ew têkeliya IPv4-to-IPv4 û IPv6-to-IPv6 di navbera pods de, ji pods bigire heya karûbarên derveyî, pêkanînên referansê (di nav pêvekên Bridge CNI, PTP CNI û IPAM-ya Host-Local), û her weha berevajî Lihevhatî bi komên Kubernetes re vedigire. Tenê IPv4 an IPv6. Agahiyên pêkanînê di nav de ne DEVIK.

    Mînakek nîşankirina navnîşanên IP-ê yên du celeb (IPv4 û IPv6) di navnîşa pods de:

    kube-master# kubectl get pods -o wide
    NAME               READY     STATUS    RESTARTS   AGE       IP                          NODE
    nginx-controller   1/1       Running   0          20m       fd00:db8:1::2,192.168.1.3   kube-minion-1
    kube-master#

  • API-ya nû ji bo Endpoint - EndpointSlice API. Ew pirsgirêkên performansê/scalability API-ya Endpoint-a heyî ya ku bandorê li pêkhateyên cihêreng ên di balafir-kontrolê de dike (apiserver, etcd, xalên dawî-kontrolker, kube-proxy) çareser dike. API-ya nû dê li koma Discovery API-ê were zêdekirin û dê bikaribe bi deh hezaran xalên paşîn ên paşîn li ser her karûbarek di komek ku ji hezaran girêk pêk tê de xizmetê bike. Ji bo kirina vê yekê, her Xizmetek bi N tiştan re tê nexşandin EndpointSlice, her yek ji wan ji hêla xwerû ve ji 100 xalên dawîn zêdetir nîne (nirx tê mîheng kirin). EndpointSlice API di heman demê de dê ji bo pêşkeftina xweya pêşerojê jî derfetan peyda bike: piştgirî ji bo navnîşanên IP yên pirjimar ji bo her pod, dewletên nû ji bo xalên dawîn (ne tenê Ready и NotReady), binesazkirina dînamîk ji bo xalên dawî.

Ya ku di berdana paşîn de hatî pêşkêş kirin gihîştiye guhertoya betayê finalizer, bi nav kirin service.kubernetes.io/load-balancer-cleanup û bi her karûbarê bi celeb ve girêdayî ye LoadBalancer. Di dema jêbirina karûbarek wusa de, ew pêşî li jêbirina rastîn a çavkaniyê digire heya ku "paqijkirina" hemî çavkaniyên hevseng ên têkildar biqede.

API Machinery

"Peyala aramkirinê" ya rastîn li qada servera Kubernetes API û pêwendiya pê re ye. Ev bi piranî bi saya pêk hat veguheztina bo statûya stabîl yên ku hewcedariya wan bi danasîna taybetî tune CustomResourceDefinitions (CRD), ku ji rojên dûr ên Kubernetes 1.7 (û ev Hezîran 2017 e!) statûya betayê heye. Heman îstîqrar hat ser taybetmendiyên têkildar:

  • "çavkaniyên jêr" re /status и /scale ji bo Çavkaniyên Xweser;
  • gûhertinî guhertoyên ji bo CRD, li ser bingeha webhook-a derveyî;
  • vê dawiyê pêşkêş kirin (li K8s 1.15) nirxên xwerû (default) û rakirina zeviyê otomatîk (perçiqandin) ji bo Çavkaniyên Xweser;
  • fersend bi karanîna şemaya OpenAPI v3 ji bo afirandina û weşandina belgeyên OpenAPI-ê ku ji bo rastkirina çavkaniyên CRD-ê li ser milê serverê tê bikar anîn.

Mekanîzmayek din a ku ji mêj ve ji rêveberên Kubernetes re nas bûye: webhook pejirandinê - di heman demê de demek dirêj di statûya betayê de ma (ji K8s 1.9) û naha aram tê ragihandin.

Du taybetmendiyên din gihîştine betayê: server-side sepandin и nîşankeran temaşe bikin.

Û tenê nûbûnek girîng di guhertoya alpha de bû red kirin ji SelfLink - URI-ya taybetî ya ku tiştê diyarkirî temsîl dike û beşek jê ye ObjectMeta и ListMeta (ango beşek ji her tiştê di Kubernetes de). Çima dev jê berdidin? Motivasyon bi awayek hêsan dengên ji ber ku nebûna sedemên rastîn (berbiçav) ji bo hînbûna vê qadê. Sedemên fermîtir ew e ku meriv performansê xweş bike (bi rakirina qadek nehewce) û hêsankirina xebata apiservera giştî, ya ku neçar e ku qadek wusa bi rengek taybetî bi rê ve bibe (ev qada yekane ye ku rast li ber tiştê hatî danîn rêzkirî ye). Kevirbûna rastîn (di nav betayê de) SelfLink dê bi guhertoya Kubernetes 1.20, û dawîn - 1.21 pêk were.

Depokirina daneyan

Karê sereke di warê hilanînê de, wekî di weşanên berê de, li herêmê têne dîtin Piştgiriya CSI. Guhertinên sereke li vir bûn:

  • ji bo yekem car (di guhertoya alpha de) xuya kirin Piştgiriya pêveka CSI ji bo girêkên xebatkarên Windows-ê: Awayê niha yê xebata bi hilanînê re dê di heman demê de li şûna pêvekên nav darê di navgîniya Kubernetes û pêvekên FlexVolume yên Microsoft-ê yên li ser Powershell-ê de cih bigire;

    Kubernetes 1.16: giştpirsiya nûbûnên sereke
    Pîlana pêkanîna pêvekên CSI li Kubernetes ji bo Windows

  • fersend mezinkirina cildên CSI, di K8s 1.12-ê de paşde hatî destnîşan kirin, berbi guhertoyek betayê ve çûye;
  • "Pêşveçûn"ek wusa (ji alpha berbi betayê) bi şiyana karanîna CSI-yê ji bo afirandina cildên efemeral ên herêmî (Piştgiriya Volume Inline CSI).

Di guhertoya berê ya Kubernetes de hate destnîşan kirin fonksiyona klonkirina volume (bikaranîna PVC ya heyî wekî DataSource ji bo afirandina PVC-ya nû) niha jî statûya beta wergirtiye.

Scheduler

Du guhertinên berbiçav ên plansazkirinê (hem jî di alpha de):

  • EvenPodsSpreading - derfet ji bo "dabeşkirina adil" ya barkêşan li şûna yekîneyên serîlêdana mentiqî pod bikar bînin (mîna Deployment û ReplicaSet) û eyarkirina vê dabeşkirinê (wek hewcedariyek dijwar an wekî şertek nerm, ango pêşîn). Taybetmendî dê kapasîteyên belavkirina heyî yên podên plansazkirî, yên ku niha ji hêla vebijarkan ve têne sînordar kirin, berfireh bike PodAffinity и PodAntiAffinity, di vê mijarê de ji rêvebiran re kontrolek xweştir dide, ku tê vê wateyê ku hebûna çêtir û xerckirina çavkaniyê xweşbîn e. Details - in DEVIK.
  • Bikar bînin Siyaseta BestFit в Fonksiyona Pêşîn a RequestedToCapacityRatio di dema plansazkirina pod de, ku dê destûrê bide bikaranîn pakkirina bin ("pakkirina di konteyneran") hem ji bo çavkaniyên bingehîn (pêvajokar, bîranîn) û hem jî yên dirêjkirî (mîna GPU). Ji bo bêtir agahdarî, binêre DEVIK.

    Kubernetes 1.16: giştpirsiya nûbûnên sereke
    Pîvana plansazkirinê: berî ku hûn polîtîkaya herî baş bikar bînin (rasterast bi navgîniya nexşerêya xwerû) û bi karanîna wê re (bi navgîniya dirêjkerê planker)

Herweha, nûnertî ji hêla şiyana afirandina pêvekên plansazkerê xwe yên li derveyî dara pêşkeftina sereke ya Kubernetes (derveyî darê).

Guherandinên din

Di heman demê de di berdana Kubernetes 1.16 de hûn dikarin bala xwe bidin destpêşxeriya ji bo anîn metrîkên berdest bi rêza tevahî, an jî rasttir, li gorî rêzikên fermî ji bo amûrên K8s. Ew bi piranî li ser pêwendiyê ve girêdayî ne Belgekirina Prometheus. Nakokî ji ber sedemên cihêreng derketin (mînak, hin metrîk bi tenê berî ku rêwerzên heyî xuya bibin hatin afirandin), û pêşdebiran biryar da ku ew dem e ku her tiştî bînin standardek yekane, "li gorî mayî ya ekosîstema Prometheus." Pêkanîna heyî ya vê însiyatîfê di statûya alpha de ye, ku dê di guhertoyên paşîn ên Kubernetes de berbi beta (1.17) û stabîl (1.18) de pêşveçûyî were pêşve xistin.

Wekî din, guhertinên jêrîn dikarin bêne destnîşan kirin:

  • Pêşveçûna Windows-ê piştgirî dike с xuyabûnî Karûbarên Kubeadm ji bo vê OS-ê (guhertoya alpha), fersend RunAsUserName ji bo konteynerên Windows (guhertoya alpha), serrastkirinî Hesabê Karûbarê Birêvebir a Komê (gMSA) heya guhertoya beta piştgirî dike, alîkarî ji bo cildên vSphere siyar/girêdin.
  • Recycled Mekanîzmaya berhevkirina daneyê di bersivên API de. Berê, parzûnek HTTP ji bo van armancan hate bikar anîn, ku çend sînorkirinên ku nehiştin ku ew ji hêla xwerû ve were çalak kirin ferz kirin. "Zêdekirina daxwaza zelal" naha dixebite: xerîdar dişînin Accept-Encoding: gzip di serî de, heke mezinahiya wê ji 128 KB-ê derbas bibe, ew bersivek GZIP-komperkirî distînin. Xerîdarên Go bixweber destekê didin berhevkirinê (sernivîsa pêwîst dişînin), ji ber vê yekê ew ê tavilê kêmbûna seyrûseferê bibînin. (Dibe ku ji bo zimanên din guhertinên sivik hewce bin.)
  • Bû mimkun pîvandina HPA-ê ji / berbi sifirê li ser bingeha metrîkên derveyî. Ger hûn li ser bingeha tiştan / pîvanên derveyî pîvandin, wê hingê gava ku barkêşan bêkar in hûn dikarin bixweber bi 0 replikayan mezin bikin da ku çavkaniyan hilînin. Pêdivî ye ku ev taybetmendî bi taybetî ji bo dozên ku xebatkar çavkaniyên GPU-yê daxwaz dikin, bikêr be, û hejmara celebên cûda yên karkerên bêkar ji hejmara GPU-yên berdest derbas dibe.
  • Muwekîlê nû - k8s.io/client-go/metadata.Client - ji bo gihîştina "giştî" ya tiştan. Ew hatiye sêwirandin ku bi hêsanî metadata (ango jêrbeş metadata) ji çavkaniyên komê û bi wan re operasyonên komkirina çopê û kotayê pêk bînin.
  • Kubernetes ava bikin niha hûn dikarin bêyî mîras ("avakirî" di nav-darê de) pêşkêşkerên ewr (guhertoya alpha).
  • Ji bo kargêriya kubeadm zêde kirin kapasîteya ceribandinê (guhertoya alpha) ku di dema operasyonan de pêçikên xwerû bicîh bike init, join и upgrade. Zêdetir fêr bibin ka meriv çawa ala bikar tîne --experimental-kustomize, bibînin DEVIK.
  • Xala dawîn a nû ji bo apiserver - readyz, - dihêle hûn agahdariya li ser amadebûna wê derxînin. Pêşkêşkara API-ê jî nuha alayek heye --maximum-startup-sequence-duration, dihêle hûn ji nû ve destpêkirina wê rêz bikin.
  • Du taybetmendiyên ji bo Azure stabîl ragihandin: piştgirî herêmên hebûna (Herêmên Hebûna) û koma çavkaniya xaçê (RG). Wekî din, Azure zêde kir:
  • AWS niha heye alîkarî ji bo EBS li ser Windows û optimîze kirin EC2 API bang dike DescribeInstances.
  • Kubeadm niha serbixwe ye koç dike Veavakirina CoreDNS dema nûvekirina guhertoya CoreDNS.
  • Binaryên etcd di wêneya Dockerê ya têkildar de kir cîhan-executable, ku dihêle hûn vê wêneyê bêyî hewcedariya mafên root bimeşînin. Her weha, wêneya koçberiyê etcd rawestandin Piştgiriya guhertoya etcd2.
  • В Cluster Autoscaler 1.16.0 veguherî bikaranîna bêserûber wekî wêneya bingehîn, performansa çêtir kir, pêşkêşkerên ewr ên nû (DigitalOcean, Magnum, Packet) zêde kirin.
  • Nûvekirinên di nermalava hatî bikar anîn/girêdayî de: Go 1.12.9, etcd 3.3.15, CoreDNS 1.6.2.

PS

Li ser bloga me jî bixwînin:

Source: www.habr.com

Add a comment