Kubernetes 1.16: Tinjauan ngeunaan inovasi utama

Kubernetes 1.16: Tinjauan ngeunaan inovasi utama

Dinten Rebo, bakal lumangsung release saterusna Kubernetes - 1.16. Numutkeun tradisi anu parantos dikembangkeun pikeun blog urang, ieu mangrupikeun ulang taun kasapuluh waktos urang ngobrolkeun ngeunaan parobihan anu paling signifikan dina versi énggal.

Inpormasi anu dianggo pikeun nyiapkeun bahan ieu dicandak tina Kubernetes ningkatna tabel tracking, CHANGELOG-1.16 jeung masalah patali, requests tarikan, sarta Kubernetes Enhancement Usulan (KEP). Janten, hayu urang angkat! ..

Titik-titik

Sajumlah sabenerna badag inovasi kasohor (dina status versi alfa) dibere di sisi K8s titik klaster (Kubelet).

Firstly, nu disebut «wadahna ephemeral» (Wadah Ephemeral), dirancang pikeun nyederhanakeun prosés debugging dina pods. Mékanisme anyar ngamungkinkeun anjeun pikeun ngaluncurkeun wadah khusus anu dimimitian dina ruang ngaran pod anu aya sareng hirup sakedap. Tujuanana nyaéta pikeun berinteraksi sareng pod sareng wadah anu sanés pikeun ngabéréskeun masalah sareng debug. Paréntah anyar parantos dilaksanakeun pikeun fitur ieu kubectl debug, sarua dina hakekat kubectl exec: ngan tinimbang ngajalankeun prosés dina wadahna (sapertos dina exec) eta ngajalankeun wadahna dina pod a. Contona, paréntah ieu bakal nyambungkeun wadah anyar ka pod a:

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

Rincian ngeunaan wadah ephemeral (sareng conto panggunaanana) tiasa dipendakan dina pakait KEP. Palaksanaan ayeuna (dina K8s 1.16) mangrupikeun vérsi alfa, sareng diantara kritéria pikeun mindahkeun kana vérsi béta nyaéta "nguji Ephemeral Containers API pikeun sahenteuna 2 rilis [Kubernetes]."

NB: Dina panggih na malah ngaranna, fitur nyarupaan hiji plugin geus aya kubectl-debugngeunaan nu urang geus nulis. Diperkirakeun yén kalayan munculna wadah ephemeral, pamekaran plugin éksternal anu misah bakal lirén.

Inovasi séjén - PodOverhead - dirancang nyadiakeun mékanisme keur ngitung biaya overhead pikeun pods, nu bisa rupa-rupa pisan gumantung kana runtime dipaké. Salaku conto, pangarang ieu KEP Hasilna dina Wadah Kata, anu peryogi ngajalankeun kernel tamu, agén kata, sistem init, jsb. Nalika overhead janten ageung, éta henteu tiasa dipaliré, anu hartosna kedah aya cara pikeun ngitung kuota salajengna, perencanaan, jsb. Pikeun nerapkeun eta dina PodSpec widang ditambahkeun Overhead *ResourceList (ngabandingkeun sareng data dina RuntimeClass, lamun hiji dipaké).

inovasi kasohor sejen nyaeta manajer topologi titik (Manajer Topologi Node), dirancang pikeun ngahijikeun pendekatan kana fine-tuning alokasi sumberdaya hardware pikeun sagala rupa komponén di Kubernetes. Inisiatif ieu didorong ku kabutuhan ngembang rupa-rupa sistem modéren (tina widang telekomunikasi, pembelajaran mesin, jasa finansial, jeung sajabana) pikeun komputasi paralel-kinerja luhur sareng ngaminimalkeun telat dina palaksanaan operasi, anu aranjeunna nganggo CPU canggih sareng kamampuhan akselerasi hardware. Optimasi sapertos kitu di Kubernetes dugi ka ayeuna dihontal berkat komponén anu béda-béda (manajer CPU, Manajer Alat, CNI), sareng ayeuna aranjeunna bakal nambihan antarmuka internal tunggal anu ngahijikeun pendekatan sareng nyederhanakeun sambungan anu sami - anu disebut topologi- sadar - komponén di sisi Kubelet. Rincian - di pakait KEP.

Kubernetes 1.16: Tinjauan ngeunaan inovasi utama
Diagram komponén Manajer Topologi

Fitur salajengna - mariksa peti bari aranjeunna ngajalankeun (ngamimitian usik). Sakumaha anjeun terang, pikeun wadah anu lami diluncurkeun, sesah kéngingkeun status anu énggal: aranjeunna "dibunuh" sateuacan aranjeunna leres-leres ngamimitian fungsina, atanapi aranjeunna dina jalan buntu pikeun waktos anu lami. Cék anyar (diaktipkeun ngaliwatan gerbang fitur disebut StartupProbeEnabled) cancels - atawa rada, defers - pangaruh sagala cék séjén nepi ka momen pod geus rengse ngajalankeun. Ku sabab kitu, fitur ieu asalna disebut pod-ngamimitian liveness-usik holdoff. Pikeun polong anu butuh waktu lila pikeun ngamimitian, anjeun tiasa polling kaayaan dina interval waktu rélatif pondok.

Salaku tambahan, pamutahiran pikeun RuntimeClass langsung sayogi dina status béta, nambihan dukungan pikeun "kluster heterogen". C RuntimeClass Scheduling Ayeuna teu dipikabutuh pikeun unggal node pikeun ngadukung unggal RuntimeClass: pikeun pod anjeun tiasa milih RuntimeClass tanpa mikiran topologi klaster. Saméméhna, pikeun ngahontal ieu - ambéh pods mungkas nepi ka titik kalayan rojongan pikeun sagalana maranéhna butuh - ieu diperlukeun pikeun nangtukeun aturan luyu pikeun NodeSelector na tolerations. DI TOPI Éta nyarioskeun ngeunaan conto pamakean sareng, tangtosna, rinci palaksanaan.

jaringan

Dua fitur jejaring signifikan anu mimiti muncul (dina versi alfa) dina Kubernetes 1.16 nyaéta:

  • sokongan tumpukan jaringan ganda - IPv4 / IPv6 - sareng "pamahaman" anu saluyu dina tingkat polong, titik, jasa. Éta kalebet interoperabilitas IPv4-to-IPv4 sareng IPv6-to-IPv6 antara pods, ti pods ka jasa éksternal, palaksanaan rujukan (dina Bridge CNI, PTP CNI sareng Host-Local IPAM plugins), kitu ogé sabalikna Cocog sareng klaster Kubernetes ngajalankeun. IPv4 atanapi IPv6 wungkul. Rincian palaksanaan aya dina TOPI.

    Conto nunjukkeun alamat IP tina dua jinis (IPv4 sareng IPv6) dina daptar pods:

    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 anyar pikeun Endpoint - EndpointSlice API. Éta ngarengsekeun masalah kinerja / skalabilitas tina API Endpoint anu aya anu mangaruhan sababaraha komponén dina pesawat kontrol (apiserver, jsb, endpoints-controller, kube-proxy). API anyar bakal ditambahkeun kana grup Discovery API tur bakal tiasa ngawula puluhan rébu titik tungtung backend on unggal layanan dina klaster diwangun ku rébuan titik. Jang ngalampahkeun ieu, unggal Service dipetakeun ka N objék EndpointSlice, anu masing-masing sacara standar henteu gaduh langkung ti 100 titik tungtung (nilaina tiasa dikonfigurasi). EndpointSlice API ogé bakal nyadiakeun kasempetan pikeun ngembangkeun kahareup na: rojongan pikeun sababaraha alamat IP pikeun tiap pod, kaayaan anyar pikeun titik tungtung (henteu ngan Ready и NotReady), subsetting dinamis pikeun titik tungtung.

Anu dibere dina sékrési terakhir parantos ngahontal versi béta finalis, ngaranna service.kubernetes.io/load-balancer-cleanup tur napel unggal jasa jeung tipe LoadBalancer. Dina waktos ngahapus jasa sapertos kitu, éta nyegah ngahapus sumberdaya anu saleresna dugi ka "ngabersihan" sadaya sumber pangimbang anu relevan réngsé.

Mesin API

"Milestone stabilisasi" nyata aya di daérah server API Kubernetes sareng interaksi sareng éta. Ieu lumangsung lolobana berkat mindahkeun ka status stabil jalma anu teu perlu bubuka husus CustomResourceDefinitions (CRD), nu geus miboga status béta saprak poé jauh Kubernetes 1.7 (jeung ieu Juni 2017!). Stabilisasi anu sami dugi ka fitur anu aya hubunganana:

  • "subsumberdaya" jeung /status и /scale pikeun CustomResources;
  • konvérsi versi pikeun CRD, dumasar kana webhook éksternal;
  • nembe dibere (dina K8s 1.15) nilai standar (defaulting) jeung panyabutan widang otomatis (pemangkasan) pikeun CustomResources;
  • kasempetan ngagunakeun skéma OpenAPI v3 pikeun nyieun jeung nyebarkeun dokuméntasi OpenAPI dipaké pikeun méré konfirmasi sumberdaya CRD di sisi server.

Mékanisme séjén anu parantos lami akrab pikeun pangurus Kubernetes: pangakuan webhook - ogé tetep dina status béta pikeun lila (saprak K8s 1.9) tur ayeuna dinyatakeun stabil.

Dua fitur sejenna geus ngahontal béta: server-sisi nerapkeun и lalajo tetengger.

Jeung hijina inovasi signifikan dina versi alfa éta kagagalan от SelfLink - a URI husus ngalambangkeun obyék dieusian tur jadi bagian tina ObjectMeta и ListMeta (nyaéta bagian tina sagala objék dina Kubernetes). Naha aranjeunna abandoning eta? Motivasi dina cara basajan disada sakumaha henteuna alesan nyata (overwhelming) pikeun widang ieu masih aya. Alesan anu langkung formal nyaéta pikeun ngaoptimalkeun kinerja (ku ngahapus médan anu teu dipikabutuh) sareng nyederhanakeun padamelan generik-apiserver, anu kapaksa nanganan widang sapertos ku cara anu khusus (ieu mangrupikeun hiji-hijina lapangan anu disetél sateuacan obyék. geus serialized). Leres obsolescence (dina béta) SelfLink bakal kajadian ku Kubernetes versi 1.20, sarta final - 1.21.

Panyimpenan data

Karya utama di daérah panyimpen, sapertos dina sékrési saméméhna, diperhatoskeun di daérah éta rojongan CSI. Parobihan utama di dieu nyaéta:

  • pikeun kahiji kalina (dina versi alfa) mucunghul Pangrojong plugin CSI pikeun titik worker Windows: cara ayeuna gawé bareng gudang ogé bakal ngaganti plugins in-tree dina inti Kubernetes jeung plugin FlexVolume ti Microsoft dumasar kana Powershell;

    Kubernetes 1.16: Tinjauan ngeunaan inovasi utama
    Skéma pikeun nerapkeun plugins CSI di Kubernetes pikeun Windows

  • kasempetan ngarobah ukuran volume CSI, diwanohkeun deui dina K8s 1.12, geus tumuwuh ka versi béta;
  • "Promosi" anu sami (tina alfa ka béta) dihontal ku kamampuan ngagunakeun CSI pikeun nyiptakeun volume ephemeral lokal (Rojongan Jilid Inline CSI).

Diwanohkeun dina versi saméméhna tina Kubernetes fungsi kloning volume (ngagunakeun PVC anu aya salaku DataSource pikeun nyieun PVC anyar) ogé ayeuna geus narima status béta.

Penjadwal

Dua parobahan penting pikeun jadwal (duanana dina alfa):

  • EvenPodsSpreading - kasempetan make pods tinimbang unit aplikasi logis pikeun "distribusi adil" beban (sapertos Deployment and ReplicaSet) sareng nyaluyukeun distribusi ieu (salaku sarat anu hese atanapi salaku kaayaan lemes, nyaéta prioritas). Fitur éta bakal ngalegaan kamampuan distribusi anu tos aya tina pod anu direncanakeun, ayeuna dibatesan ku pilihan PodAffinity и PodAntiAffinity, méré pangurus kontrol finer dina urusan ieu, nu hartina kasadiaan luhur hadé tur konsumsi sumberdaya dioptimalkeun. Rincian - di TOPI.
  • pamakean Kawijakan BestFit в Fungsi Prioritas RequestedToCapacityRatio salila tata pod, nu bakal ngidinan pamakean bungkusan bin ("bungkusan dina wadah") pikeun sumber daya dasar (processor, mémori) sareng anu diperpanjang (sapertos GPU). Pikeun leuwih rinci, tingali TOPI.

    Kubernetes 1.16: Tinjauan ngeunaan inovasi utama
    Ngajadwalkeun pods: sateuacan nganggo kabijakan anu paling pas (langsung ngalangkungan panjadwal standar) sareng nganggona (ngalangkungan panjadwal)

Sajaba ti éta, diwakilan ku kamampuhan pikeun nyieun plugins scheduler sorangan di luar tangkal ngembangkeun Kubernetes utama (out-of-tangkal).

Parobihan anu sanés

Ogé dina pelepasan Kubernetes 1.16 tiasa dicatet inisiatif pikeun mawa metrics sadia dina urutan pinuh, atawa leuwih tepatna, luyu jeung peraturan resmi mun instrumentation K8s. Aranjeunna sakitu legana ngandelkeun pakait Dokuméntasi Prometheus. Inconsistencies timbul kusabab sababaraha alesan (contona, sababaraha métrik ngan saukur diciptakeun sateuacan paréntah ayeuna muncul), sareng pamekar mutuskeun yén éta waktuna pikeun nyangking sadayana kana standar tunggal, "saluyu sareng ékosistem Prometheus sesa." Palaksanaan ayeuna inisiatif ieu dina status alfa, nu progressively diwanohkeun dina versi saterusna Kubernetes ka béta (1.17) jeung stabil (1.18).

Salaku tambahan, parobahan di handap ieu tiasa diperhatoskeun:

  • Pangwangunan dukungan Windows с penampilan Utiliti Kubeadm pikeun OS ieu (versi alfa), kasempetan RunAsUserName pikeun wadah Windows (versi alfa), perbaikan Akun Layanan Diurus Grup (gMSA) ngadukung dugi ka versi beta, ngadukung gunung / ngagantelkeun pikeun volume vSphere.
  • Didaur ulang mékanisme komprési data dina réspon API. Saméméhna, hiji saringan HTTP dipaké pikeun tujuan ieu, nu maksakeun sababaraha larangan nu nyegah eta diaktipkeun sacara standar. "Komprési pamundut transparan" ayeuna jalan: klien ngirim Accept-Encoding: gzip dina lulugu, aranjeunna nampi respon GZIP-dikomprés lamun ukuranana ngaleuwihan 128 KB. Klién Go otomatis ngadukung komprési (ngintunkeun lulugu anu diperyogikeun), ku kituna aranjeunna bakal langsung perhatikeun pangurangan lalu lintas. (Robah saeutik bisa jadi diperlukeun pikeun basa séjén.)
  • Janten mungkin skala HPA ti / ka enol pods dumasar kana métrik éksternal. Upami anjeun skala dumasar kana objék / métrik éksternal, teras nalika beban kerja dianggurkeun anjeun tiasa otomatis skala ka 0 réplika pikeun ngahémat sumber daya. Fitur ieu kedah hususna kapaké pikeun kasus dimana pagawé nyuhunkeun sumber GPU, sareng jumlah tipena béda pagawé dianggurkeun ngaleuwihan jumlah GPU anu sayogi.
  • Klién anyar - k8s.io/client-go/metadata.Client - pikeun aksés "umum" ka objék. Éta dirancang pikeun gampang nyandak metadata (nyaéta subsection metadata) ti sumber kluster sareng ngalaksanakeun pengumpulan sampah sareng operasi kuota sareng aranjeunna.
  • Ngawangun Kubernetes ayeuna anjeun tiasa tanpa warisan ("diwangun-di" dina-tangkal) panyadia awan (versi alfa).
  • Pikeun utiliti kubeadm ditambahkeun ékspérimén (versi alfa) kamampuhan pikeun nerapkeun patch ngaropéa salila operasi init, join и upgrade. Diajar langkung seueur ngeunaan cara ngagunakeun bandéra --experimental-kustomize, tingali dina TOPI.
  • Titik tungtung anyar pikeun apiserver - readyz, - ngidinan Anjeun pikeun ngekspor informasi ngeunaan kesiapan na. Pangladén API ogé ayeuna gaduh bandéra --maximum-startup-sequence-duration, ngidinan Anjeun pikeun ngatur restart na.
  • dua fitur pikeun Azure nyatakeun stabil: rojongan zona kasadiaan (Zona Kasadiaan) jeung grup sumberdaya cross (RG). Salaku tambahan, Azure parantos nambihan:
    • rojongan auténtikasi AAD jeung ADFS;
    • anotasi service.beta.kubernetes.io/azure-pip-name pikeun nangtukeun IP umum tina load balancer;
    • kasempetan setélan LoadBalancerName и LoadBalancerResourceGroup.
  • AWS ayeuna gaduh sokongan pikeun EBS on Windows jeung dioptimalkeun EC2 API nelepon DescribeInstances.
  • Kubeadm ayeuna merdéka migrasi Konfigurasi CoreDNS nalika ningkatkeun versi CoreDNS.
  • binér jsb dina gambar Docker pakait réngsé dunya-eksekusi, nu ngidinan Anjeun pikeun ngajalankeun gambar ieu tanpa merlukeun hak root. Ogé, gambar migrasi jsb eureun rojongan Vérsi etcd2.
  • В Kluster Autoscaler 1.16.0 switched ka maké distroless salaku gambar dasar, ningkat kinerja, ditambahkeun panyadia awan anyar (DigitalOcean, Magnum, Packet).
  • Apdet dina dipaké / software gumantung: Go 1.12.9, etcd 3.3.15, CoreDNS 1.6.2.

PS

Baca ogé dina blog urang:

sumber: www.habr.com

Tambahkeun komentar