Kubernetes 1.16: nyocha nke isi ihe ọhụrụ

Kubernetes 1.16: nyocha nke isi ihe ọhụrụ

Taa, Wednesday, ga-eme Mwepụta ọzọ nke Kubernetes - 1.16. Dị ka ọdịnala nke mepụtara maka blọọgụ anyị, nke a bụ oge ncheta nke iri anyị na-ekwu maka mgbanwe kachasị dị ịrịba ama na nsụgharị ọhụrụ.

A na-ewepụta ozi eji akwadebe ihe a Tebụl nlekota nkwalite Kubernetes, Mgbanwe-1.16 na okwu ndị metụtara ya, dọpụta arịrịọ, na Kubernetes Enhancement Proposals (KEP). Yabụ, ka anyị gawa!..

Ọnụ

A na-egosi ọnụ ọgụgụ dị ukwuu nke ihe ọhụrụ pụtara ìhè (na ọkwa ụdị alfa) n'akụkụ ọnụ ụyọkọ K8s (Kubelet).

Mbụ, ihe a na-akpọ «ẹphe egude» (Efemrị arịa), emebere iji mee ka usoro nbipu dị mfe na pọd. Usoro ọhụrụ ahụ na-enye gị ohere ịmalite arịa pụrụ iche nke na-amalite n'aha aha nke pọd ndị dị adị ma dịrị ndụ nwa oge. Ebumnuche ha bụ ịmekọrịta na pọd na arịa ndị ọzọ iji dozie nsogbu ọ bụla na debug. Emejuputala iwu ọhụrụ maka njirimara a kubectl debug, dị ka isi kubectl exec: naanị kama ịme usoro n'ime akpa (dịka na exec) ọ na-ebunye akpa n'ime pọd. Dịka ọmụmaatụ, iwu a ga-ejikọta akpa ọhụrụ na pọd:

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

Enwere ike ịhụ nkọwa gbasara arịa ephemeral (na ọmụmaatụ nke ojiji ha). KEP kwekọrọ. Mmejuputa iwu ugbu a (na K8s 1.16) bụ ụdị alfa, na n'ime njirisi maka ịnyefe ya na ụdị beta bụ “nnwale Ephemeral Containers API maka opekata mpe 2 nke [Kubernetes].”

NB: N'isi ya na ọbụna aha ya, njirimara ahụ yiri ngwa mgbakwunye dị adị kubectl-debugbanyere nke anyị edeelarị. A na-atụ anya na na ọbịbịa nke ephemeral containers, mmepe nke ngwa mgbakwunye dị iche iche ga-akwụsị.

Ihe ohuru ohuru - PodOverhead - emebere inye usoro maka ịgbakọ ego n'elu maka pọd, nke nwere ike ịdị iche iche dabere na oge ojiri gaa. Dịka ọmụmaatụ, ndị edemede nke a KEP rụpụta Kata Containers, nke chọrọ ịgba ọsọ kernel ọbịa, onye nnọchi anya kata, sistemụ init, wdg. Mgbe elu na-ebuwanye ibu, a pụghị ileghara ya anya, nke pụtara na ọ dị mkpa ka e nwee ụzọ isi tinye ya na akaụntụ maka oke oke, nhazi, wdg. Iji mejuputa ya na PodSpec ubi agbakwunyere Overhead *ResourceList (tụnyere data in RuntimeClass, ma ọ bụrụ na ejiri otu).

Ihe ọhụrụ a ma ama bụ Node topology njikwa (Onye njikwa Topology Node), nke e mere iji mee ka ụzọ dị n'otu maka ịhazi nhazi nkesa akụrụngwa akụrụngwa maka ihe dị iche iche na Kubernetes. Ebumnuche a bụ mkpa na-eto eto nke sistemu ọgbara ọhụrụ dị iche iche (site na ngalaba nkwukọrịta, mmụta igwe, ọrụ ego, wdg) maka ịgbakọ kọmpụta na-arụ ọrụ dị elu yana ibelata igbu oge na mmezu nke arụmọrụ, nke ha na-eji CPU dị elu na ngwaike osooso ngwaike. Ụdị njikarịcha dị otú ahụ na Kubernetes enwetala ekele maka ihe ndị dị iche iche (onye njikwa CPU, njikwa ngwaọrụ, CNI), ma ugbu a, a ga-agbakwunye ha otu interface dị n'ime nke na-eme ka usoro ahụ dị mfe ma na-eme ka njikọ nke ọhụrụ yiri ya dị mfe - nke a na-akpọ topology- maara - components n'akụkụ Kubelet. Nkọwa - na KEP kwekọrọ.

Kubernetes 1.16: nyocha nke isi ihe ọhụrụ
Eserese akụkụ njikwa Topology

Akụkụ ọzọ - ịlele igbe mgbe ha na-agba ọsọ (mmalite nyocha). Dị ka ị maara, maka arịa ndị na-ewe ogologo oge ịmalite, ọ na-esiri ike ịnweta ọkwa ọhụụ: a na-egbu ha "n'ihu" tupu ha amalite ịrụ ọrụ, ma ọ bụ na-ejedebe na njedebe ogologo oge. Nyocha ọhụrụ (gbanyere site na ọnụ ụzọ atụmatụ akpọrọ StartupProbeEnabled) kagbuo - ma ọ bụ kama, defers - mmetụta nke nlele ọ bụla ọzọ ruo mgbe pọd gwụchara. N'ihi nke a, a na-akpọ njirimara ahụ na mbụ pod-mbido liveness-nyocha holdoff. Maka pọd ndị na-ewe ogologo oge ịmalite, ị nwere ike ịme ntuli aka steeti n'ime obere oge.

Na mgbakwunye, nkwalite maka RuntimeClass dị ozugbo na ọkwa beta, na-agbakwunye nkwado maka "ụyọkọ dị iche iche". C Ịhazi oge klaasị Ugbu a ọ dịghị mkpa ọ bụla maka ọnụ ọ bụla inwe nkwado maka RuntimeClass ọ bụla: maka pods ị nwere ike họrọ RuntimeClass n'echeghị echiche banyere ụyọkọ topology. Na mbụ, iji nweta nke a - nke mere na pods ejedebe na ọnụ ọnụ na nkwado maka ihe ọ bụla ha chọrọ - ọ dị mkpa ịnye iwu kwesịrị ekwesị na NodeSelector na ndidi. N'ime Igodo Ọ na-ekwu maka ihe atụ nke ojiji na, n'ezie, nkọwa nkọwa.

Network

Atụmatụ ịkparịta ụka n'Ịntanet abụọ pụtara na nke mbụ (na ụdị alfa) na Kubernetes 1.16 bụ:

  • support nchịkọta netwọk abụọ - IPv4/IPv6 - na "nghọta" kwekọrọ na ọkwa nke pods, ọnụ, ọrụ. Ọ na-agụnye IPv4-to-IPv4 na IPv6-to-IPv6 interoperability n'etiti pods, site na pods gaa na ọrụ mpụga, ntinye aka (n'ime Bridge CNI, PTP CNI na Host-Local IPAM plugins), yana ntụgharị dakọtara na ụyọkọ Kubernetes na-agba ọsọ. IPv4 ma ọ bụ IPv6 naanị. Nkọwa mmejuputa abanyela Igodo.

    Ihe atụ nke igosipụta adreesị IP nke ụdị abụọ (IPv4 na IPv6) na ndepụta nke pọd:

    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 ọhụrụ maka njedebe njedebe - API EndpointSlice. Ọ na-edozi okwu arụmọrụ / scalability nke Endpoint API dị na-emetụta akụkụ dị iche iche na ụgbọ elu njikwa (apiserver, etcd, endpoints-controller, kube-proxy). A ga-agbakwunye API ọhụrụ ahụ na otu Discovery API ma nwee ike ijere ọtụtụ iri puku ihe njedebe azụ azụ na ọrụ ọ bụla na ụyọkọ nke nwere ọtụtụ puku ọnụ. Iji mee nke a, a na-edepụta Ọrụ ọ bụla na ihe N EndpointSlice, nke ọ bụla na ndabara enweghị ihe karịrị 100 endpoints (uru bụ configurable). API EndpointSlice ga-enyekwa ohere maka mmepe ya n'ọdịnihu: nkwado maka ọtụtụ adreesị IP maka pọd ọ bụla, steeti ọhụrụ maka njedebe (ọ bụghị naanị Ready и NotReady), ntọala dị ike maka njedebe njedebe.

Nke ewepụtara na mwepụta ikpeazụ eruola ụdị beta finalizer, aha ya service.kubernetes.io/load-balancer-cleanup ma tinye ya na ọrụ ọ bụla nwere ụdị LoadBalancer. N'oge ihichapụ ọrụ dị otú ahụ, ọ na-egbochi ihichapụ ihe onwunwe ahụ n'ezie ruo mgbe "nchịkọta" nke ihe niile dị mkpa na-emezi ihe.

Igwe igwe API

Ezigbo "ihe dị ịrịba ama nkwụsi ike" dị na mpaghara nke sava Kubernetes API yana mmekọrịta ya na ya. Nke a mere n'ụzọ dị ukwuu ekele na-ebufe ka kwụsie ike ndị na-adịghị mkpa pụrụ iche iwebata Nkọwapụta akụrụngwa akụrụngwa (CRD), nke nwere ọkwa beta kemgbe ụbọchị dị anya nke Kubernetes 1.7 (nke a bụ June 2017!). Otu nkwụsi ike ahụ bịara na njirimara ndị emetụtara:

  • "Subresources" na /status и /scale maka CustomResources;
  • mgbanwe nsụgharị maka CRD, dabere na mpụta webhook;
  • ewepụtara nso nso a (na K8s 1.15) ụkpụrụ ndabara (ndabere) na mwepụ ubi akpaka (ịkwachaa) maka CustomResources;
  • ohere iji OpenAPI v3 schema mepụta na bipụta akwụkwọ OpenAPI ejiri iji kwado akụrụngwa CRD n'akụkụ nkesa.

Usoro ọzọ nke ndị nchịkwa Kubernetes maara nke ọma kemgbe: nnabata webhook - nọgidekwara na ọkwa beta ogologo oge (ebe ọ bụ na K8s 1.9) ma kwupụtala ugbu a kwụsiri ike.

Atụmatụ abụọ ọzọ eruola beta: akụkụ nkesa tinye и lelee ibe edokọbara.

Na nanị ịrịba ọhụrụ ọhụrụ na alfa version bụ okpu si SelfLink - URI pụrụ iche na-anọchi anya ihe akọwapụtara na ịbụ akụkụ nke ObjectMeta и ListMeta (ya bụ akụkụ nke ihe ọ bụla dị na Kubernetes). Gịnị mere ha ji agbahapụ ya? Mkpali n'ụzọ dị mfe na-ada ụda dị ka enweghị ezigbo (oke) ihe kpatara ubi a ka dị. Ihe ndị ọzọ kpatara ya bụ ịkwalite arụmọrụ (site na iwepu ubi na-adịghị mkpa) na ime ka ọrụ nke generic-apiserver dị mfe, nke a na-amanye ijikwa ụdị ubi ahụ n'ụzọ pụrụ iche (nke a bụ naanị ubi a na-edozi n'ihu ihe ahụ. bụ serialized). Ezi ihe ochie (n'ime beta) SelfLink ga-eme site na ụdị Kubernetes 1.20, na nke ikpeazụ - 1.21.

Nchekwa data

A na-ahụ ọrụ isi na mpaghara nchekwa, dị ka ọ dị na mwepụta ndị gara aga na mpaghara ahụ Nkwado CSI. Isi mgbanwe ebe a bụ:

  • nke mbụ (na ụdị alfa) pụtara Nkwado ngwa mgbakwunye CSI maka ọnụ ndị ọrụ Windows: ụzọ ugbu a na-arụ ọrụ na nchekwa ga-anọchikwa in-osisi plugins na Kubernetes isi na FlexVolume plugins si Microsoft dabeere Powershell;

    Kubernetes 1.16: nyocha nke isi ihe ọhụrụ
    Atụmatụ maka mmejuputa CSI plugins na Kubernetes maka Windows

  • ohere na-agbanwe mpịakọta CSI, ewebatala azụ na K8s 1.12, etoola na ụdị beta;
  • Enwetara “nkwalite” yiri nke ahụ (site na alfa ruo beta) site n'ikike iji CSI mepụta mpịakọta ephemeral mpaghara (Nkwado olu ntanetịime CSI).

Ewebata ya na ụdị Kubernetes gara aga olu cloning ọrụ (iji PVC dị ugbu a dị ka DataSource iji mepụta PVC ọhụrụ) enwetala ọkwa beta ugbu a.

Onye nhazi oge

Mgbanwe abụọ pụtara ìhè na nhazi oge (ha abụọ na alfa):

  • EvenPodsSpreading - ohere jiri pọd kama nkeji ngwa ngwa maka “nkesa ziri ezi” nke ibu (dị ka Deployment na ReplicaSet) na ịhazi nkesa a (dị ka ihe siri ike chọrọ ma ọ bụ dị ka ọnọdụ dị nro, ya bụ mkpa). Njirimara a ga-agbasawanye ike nkesa nke pods akwadoro, nke nwere nhọrọ ugbu a PodAffinity и PodAntiAffinity, na-enye ndị nchịkwa nchịkwa kacha mma n'okwu a, nke pụtara ịdị elu dị elu ka mma yana oriri akụrụngwa kachasị mma. Nkọwa - na Igodo.
  • Jiri Amụma kacha mma в ArịrịọToCapacityRatio Ọrụ ebute ụzọ n'oge pod atụmatụ, nke ga-ekwe tinye ihe nkwakọba ihe ("ịkwakọba ihe na arịa") maka ma ihe ndị bụ isi (processor, ebe nchekwa) na ndị gbatịrị (dị ka GPU). Maka nkọwa ndị ọzọ, lee Igodo.

    Kubernetes 1.16: nyocha nke isi ihe ọhụrụ
    Usoro nhazi oge: tupu i jiri amụma dabara adaba (kpọmkwem site na nhazi ndabara) yana iji ya (site na onye nhazi nhazi)

Ọzọkwa, nọchiri anya ya ike ịmepụta plugins nhazi nke gị n'èzí osisi mmepe Kubernetes (nke na-apụ apụ).

Mgbanwe ndị ọzọ

Ọzọkwa na Kubernetes 1.16 ntọhapụ enwere ike ịdeba ya atumatu maka na-eweta metrik dị n'usoro zuru oke, ma ọ bụ karịa kpọmkwem, dabere na iwu iwu ka K8s ngwá ọrụ. Ha na-adaberekarị na nke kwekọrọ Akwụkwọ Prometheus. Esemokwu dị iche iche bilitere n'ihi ihe dị iche iche (dịka ọmụmaatụ, a na-emepụta ụfọdụ metrics tupu ntụziaka dị ugbu a pụta), na ndị mmepe kpebiri na oge eruola iweta ihe niile n'otu ụkpụrụ, "n'usoro na ihe ndị ọzọ nke Prometheus ecosystem." Mmejuputa atumatu nke ugbu a dị na ọkwa alfa, nke a ga-eji nwayọọ nwayọọ kwalite na ụdị Kubernetes na-esote na beta (1.17) na kwụsie ike (1.18).

Na mgbakwunye, enwere ike ịhụ mgbanwe ndị a:

  • Mmepe nkwado Windows с ọdịdị Ngwa Kubeadm maka OS a (ụdị alfa), ohere RunAsUserName maka arịa Windows (ụdị alfa), nkwalite Akaụntụ Ọrụ jisiri ike (gMSA) na-akwado ụdị beta, nkwado bulite/tinye maka mpịakọta vSphere.
  • Emegharịrị Usoro mkpakọ data na nzaghachi API. Na mbụ, a na-eji ihe nzacha HTTP mee ihe maka ebumnuche ndị a, nke nyere iwu ọtụtụ mmachi nke gbochiri ya site na ndabara. "Mkpakọ arịrịọ n'ụzọ doro anya" na-arụ ọrụ ugbu a: ndị ahịa na-eziga Accept-Encoding: gzip na nkụnye eji isi mee, ha na-anata nzaghachi mkpakọ GZIP ma ọ bụrụ na nha ya karịrị 128 KB. Gaa ahịa na-akwado mkpakọ na-akpaghị aka (na-eziga nkụnye eji isi mee achọrọ), yabụ na ha ga-achọpụta ozugbo mbelata okporo ụzọ. (Enwere ike ịdị mkpa mgbanwe ntakịrị maka asụsụ ndị ọzọ.)
  • Gburugburu ekwe omume na-eme ka HPA si na/gaa na pọd efu dabere na metrik mpụga. Ọ bụrụ n'ịkọba dabere na ihe/mpụta metrics, mgbe ahụ mgbe ibu ọrụ na-adịghị arụ ọrụ, ị nwere ike gbakọọ na 0 oyiri ozugbo iji chekwaa akụrụngwa. Njirimara a kwesịrị ịba uru karịsịa maka ikpe ebe ndị ọrụ na-arịọ akụrụngwa GPU, yana ọnụ ọgụgụ nke ụdị dị iche iche nke ndị ọrụ na-abaghị uru karịrị ọnụ ọgụgụ GPU dịnụ.
  • Onye ahịa ọhụrụ - k8s.io/client-go/metadata.Client - maka ịnweta ihe "n'ozuzu". Emebere ya ka iweghachite metadata ngwa ngwa (ntụgharị nkeji metadata) site na akụrụngwa ụyọkọ ma soro ha rụọ ọrụ nchịkọta mkpofu na oke oke.
  • Mee Kubernetes ugbu a ị nwere ike na-enweghị ihe nketa ("wuru n'ime" n'ime osisi) ndị na-eweta igwe ojii (ụdị alfa).
  • Maka akụrụngwa kubeadm agbakwunyere nnwale (ụdị alfa) ike itinye ahaziri patches n'oge arụ ọrụ init, join и upgrade. Mụtakwuo maka otu esi eji ọkọlọtọ --experimental-kustomize, lee n'ime Igodo.
  • Ebe njedebe ọhụrụ maka apiserver - readyz, - na-enye gị ohere mbupụ ozi gbasara njikere ya. Ihe nkesa API nwekwara ugbu a ọkọlọtọ --maximum-startup-sequence-duration, na-enye gị ohere ịhazigharị mmalite ya.
  • Abụọ atụmatụ maka Azure ekwuputara kwụsiri ike: nkwado mpaghara nnweta ( Mpaghara nnweta) na cross resource otu (RG). Na mgbakwunye, Azure agbakwunyela:
    • nkwado nkwenye AAD na ADFS;
    • nkọwa service.beta.kubernetes.io/azure-pip-name iji kọwaa IP ọha nke onye na-ebu ibu;
    • ohere ntọala LoadBalancerName и LoadBalancerResourceGroup.
  • AWS nwere ugbu a nkwado maka EBS na Windows na kachasị Oku EC2 API DescribeInstances.
  • Kubeadm nwere onwe ya ugbu a na-akwaga mba ọzọ Nhazi CoreDNS mgbe ị na-emelite ụdị CoreDNS.
  • ọnụọgụ abụọ wdg na onyonyo Docker kwekọrọ mere ụwa-executable, nke na-enye gị ohere ịme ihe oyiyi a na-enweghị mkpa maka ikike mgbọrọgwụ. Ọzọkwa, wdgd oyiyi mbugharị kwụsịrị wdgd2 nkwado ụdị.
  • В ụyọkọ Autoscaler 1.16.0 gbanwee gaa na iji distroless dị ka onyonyo ntọala, arụmọrụ emelitere, ndị na-eweta igwe ojii agbakwunyere (DigitalOcean, Magnum, Packet).
  • Mmelite na ngwa eji eme ihe/dabere: Gaa 1.12.9, wdgd 3.3.15, CoreDNS 1.6.2.

PS

Gụọkwa na blọọgụ anyị:

isi: www.habr.com

Tinye a comment