Kubernetes 1.14: oersjoch fan 'e wichtichste ynnovaasjes

Kubernetes 1.14: oersjoch fan 'e wichtichste ynnovaasjes

Dizze nacht sil plakfine folgjende release fan Kubernetes - 1.14. Neffens de tradysje dy't har ûntwikkele hat foar ús blog, prate wy oer de wichtichste feroarings yn 'e nije ferzje fan dit prachtige Open Source-produkt.

Ynformaasje dy't brûkt wurdt om dit materiaal te meitsjen is nommen út Kubernetes ferbetterings tracking tabellen, CHANGELOG-1.14 en relatearre problemen, pull fersiken, Kubernetes Enhancement Proposals (KEP).

Litte wy begjinne mei in wichtige yntroduksje fan SIG-kluster-libbenssyklus: dynamyske failover klusters Kubernetes (of om krekter te wêzen, sels-hoste HA-ynset) is no kinne makke wurde mei help fan bekende (yn 'e kontekst fan single-node klusters) kommando's kubeadm (init и join). Koartsein, foar dit:

  • sertifikaten brûkt troch it kluster wurde oerdroegen oan geheimen;
  • foar de mooglikheid om it etcd-kluster yn it K8s-kluster te brûken (dat wol sizze, de earder besteande eksterne ôfhinklikens kwytreitsje) etcd-operator;
  • Dokumintearret de oanrikkemandearre ynstellings foar in eksterne load balancer dy't in fouttolerante konfiguraasje leveret (yn 'e takomst is it pland om dizze ôfhinklikens te eliminearjen, mar net op dit poadium).

Kubernetes 1.14: oersjoch fan 'e wichtichste ynnovaasjes
Arsjitektuer fan in Kubernetes HA-kluster makke mei kubeadm

Details fan 'e ymplemintaasje kinne fûn wurde yn ûntwerp foarstel. Dizze funksje wie wirklik lang ferwachte: de alfaferzje waard werom ferwachte yn K8s 1.9, mar ferskynde no pas.

API

team apply en oer it algemien sprutsen declarative foarwerp behear trochjûn fan kubectl yn apiserver. De ûntwikkelders sels ferklearje har beslút koart troch dat te sizzen kubectl apply - in fûnemintele diel fan it wurkjen mei konfiguraasjes yn Kubernetes, lykwols, "it is fol mei bugs en lestich te reparearjen," en dêrom moat dizze funksjonaliteit werom nei normaal brocht wurde en oerbrocht nei it kontrôlefleanmasine. Ienfâldige en dúdlike foarbylden fan problemen dy't hjoed bestean:

Kubernetes 1.14: oersjoch fan 'e wichtichste ynnovaasjes

Details oer de útfiering binne yn HOED. Aktuele reewilligens is alfa (promoasje nei beta is pland foar de folgjende Kubernetes-release).

Makke beskikber yn alpha ferzje kâns mei it OpenAPI v3-skema foar it meitsjen en publisearjen fan OpenAPI-dokumintaasje foar CustomResources (CR) brûkt om te falidearjen (server-side) K8s brûker-definiearre middels (CustomResourceDefinition, CRD). Publisearjen fan OpenAPI foar CRD lit kliïnten (bgl. kubectl) fiere falidaasje oan jo kant (binnen kubectl create и kubectl apply) en dokumintaasje útjaan neffens it skema (kubectl explain). Details - yn HOED.

Pre-besteande logs binne no iepen mei flagge O_APPEND (mar net O_TRUNC) om ferlies fan logs yn guon situaasjes te foarkommen en foar it gemak fan trunkearjen fan logs mei eksterne nutsbedriuwen foar rotaasje.

Ek yn 'e kontekst fan' e Kubernetes API, kin opmurken wurde dat yn PodSandbox и PodSandboxStatus tafoege fjild runtime_handler om ynformaasje oer op te nimmen RuntimeClass yn de pod (lês der mear oer yn de tekst oer Kubernetes 1.12 release, dêr't dizze klasse ferskynde as in alfa ferzje), en yn Admission Webhooks útfierd mooglikheid om te bepalen hokker ferzjes AdmissionReview sy stypje. Uteinlik binne de regels fan Admission Webhooks no kin wurde beheind de omfang fan har gebrûk troch nammeromten en klusterkaders.

Opslach

PersistentLocalVolumes, dy't sûnt frijlitting beta-status hie K8s 1.10, oankundige stabyl (GA): dizze funksje-poarte is net langer útskeakele en sil fuortsmiten wurde yn Kubernetes 1.17.

kâns mei help fan omjouwingsfariabelen neamd Downward API (bygelyks de podnamme) foar de nammen fan mappen monteare as subPath, waard ûntwikkele - yn 'e foarm fan in nij fjild subPathExpr, dy't no brûkt wurdt om de winske mapnamme te bepalen. De funksje ferskynde earst yn Kubernetes 1.11, mar foar 1.14 bleau it yn alfa-ferzjestatus.

Lykas by de foarige Kubernetes-útjefte, wurde in protte wichtige feroaringen yntrodusearre foar de aktyf ûntwikkeljende CSI (Container Storage Interface):

CSI

Beskikber wurden (as ûnderdiel fan 'e alfaferzje) stypje grutte feroarje foar CSI-voluminten. Om it te brûken moatte jo de neamde funksje-poarte ynskeakelje ExpandCSIVolumes, en ek de beskikberens fan stipe foar dizze operaasje yn in spesifike CSI-bestjoerder.

In oare funksje foar CSI yn 'e alfa-ferzje - kâns ferwize direkt (d.w.s. sûnder PV / PVC te brûken) nei CSI-voluminten binnen de pod-spesifikaasje. Dit ferwideret de beheining op it brûken fan CSI as eksklusyf dataopslach op ôfstân, iepening doarren nei de wrâld foar harren lokale efemere voluminten. Foar gebrûk (foarbyld út dokumintaasje) moat ynskeakele wurde CSIInlineVolume feature poarte.

D'r is ek foarútgong west yn 'e "ynternen" fan Kubernetes relatearre oan CSI, dy't net sa sichtber binne foar ein brûkers (systeembehearders) ... Op it stuit binne ûntwikkelders twongen om twa ferzjes fan elke opslachplugin te stypjen: ien - "yn de âlde manier”, binnen de K8s codebase (yn -beam), en de twadde - as ûnderdiel fan 'e nije CSI (lês mear deroer, bygelyks yn hjir). Dit soarget foar begryplike ûngemak dy't moatte wurde oanpakt as CSI sels stabilisearret. It is net mooglik om de API fan ynterne (yn-beam) plugins gewoan ôf te skriuwen fanwegen relevante Kubernetes belied.

Dit alles late ta it feit dat de alfa ferzje berikt migraasje proses ynterne plugin koade, ymplemintearre as yn-beam, yn CSI-plugins, wêrtroch't de soargen fan ûntwikkelders wurde fermindere om ien ferzje fan har plugins te stypjen, en kompatibiliteit mei âlde API's sil bliuwe en se kinne ferâldere wurde ferklearre yn it gewoane senario. It wurdt ferwachte dat troch de folgjende release fan Kubernetes (1.15) alle plugins fan 'e wolkprovider wurde migrearre, de ymplemintaasje sil beta-status krije en wurde standert aktivearre yn K8s-ynstallaasjes. Foar details, sjoch ûntwerp foarstel. Dizze migraasje hat ek resultearre yn wegering út folume grinzen definiearre troch spesifike wolk providers (AWS, Azure, GCE, Cinder).

Derneist, stipe foar blokkearjende apparaten mei CSI (CSIBlockVolume) oerdroegen nei beta ferzje.

Knooppunten / Kubelet

Alpha ferzje presintearre nij einpunt yn Kubelet, ûntwurpen foar werom metriken op wichtige boarnen. Yn 't algemien, as Kubelet earder statistiken krige oer kontenergebrûk fan cAdvisor, no komme dizze gegevens fan' e container-runtime-omjouwing fia CRI (Container Runtime Interface), mar kompatibiliteit foar wurkjen mei âldere ferzjes fan Docker wurdt ek bewarre. Earder waarden statistiken sammele yn Kubelet stjoerd fia de REST API, mar no in einpunt leit by /metrics/resource/v1alpha1. Lange-termyn strategy fan ûntwikkelders bestiet is it minimalisearjen fan de set metriken levere troch Kubelet. Trouwens, dizze metriken sels no roppe se net "kearnmetriken", mar "boarnemetriken", en wurde beskreaun as "earste klasse boarnen, lykas cpu, en ûnthâld".

In heul nijsgjirrige nuânse: nettsjinsteande it dúdlike prestaasjesfoardiel fan it gRPC-einpunt yn ferliking mei ferskate gefallen fan it brûken fan it Prometheus-formaat (sjoch it resultaat fan ien fan 'e benchmarks hjirûnder), De auteurs leaver it tekstformaat fan Prometheus troch de dúdlike lieding fan dit kontrôlesysteem yn 'e mienskip.

"gRPC is net kompatibel mei grutte tafersjochpipelines. Einpunt sil allinich nuttich wêze foar it leverjen fan metriken oan Metrics Server of tafersjoch op komponinten dy't der direkt mei yntegrearje. Prometheus-tekstformaatprestaasjes by it brûken fan caching yn Metrics Server goed genôch foar ús om Prometheus te foarkommen boppe gRPC, sjoen de wiidfersprate oanname fan Prometheus yn 'e mienskip. Sadree't it OpenMetrics-formaat stabiler wurdt, sille wy gRPC-prestaasjes kinne benaderje mei in proto-basearre opmaak."

Kubernetes 1.14: oersjoch fan 'e wichtichste ynnovaasjes
Ien fan 'e ferlykjende prestaasjestests fan it brûken fan gRPC- en Prometheus-formaten yn it nije Kubelet-einpunt foar metriken. Mear grafiken en oare details kinne fûn wurde yn HOED.

Under oare feroarings:

  • Kubelet no (ien kear) besykje te stopjen konteners yn in ûnbekende steat foardat operaasjes opnij starte en wiskje.
  • By it brûken PodPresets no nei de ynit container tafoege deselde ynformaasje as foar in gewoane kontener.
  • kubelet begûn te brûken usageNanoCores fan de CRI statistyk provider, en foar knopen en konteners op Windows tafoege netwurk statistyk.
  • Bestjoeringssysteem en arsjitektuerynformaasje is no opnommen yn labels kubernetes.io/os и kubernetes.io/arch Node-objekten (oerdroegen fan beta nei GA).
  • Mooglikheid om in spesifike systeem brûkersgroep op te jaan foar konteners yn in pod (RunAsGroup, ferskynde yn K8s 1.11) advanced foardat beta (standert ynskeakele).
  • du en fine brûkt yn cAdvisor, ferfongen op Go ymplemintaasje.

CLI

Yn cli-runtime en kubectl tafoege -k flagge foar yntegraasje mei oanpasse (troch de manier, syn ûntwikkeling wurdt no útfierd yn in aparte repository), d.w.s. om ekstra YAML-bestannen te ferwurkjen fan spesjale kustomisaasje-mappen (sjoch foar details oer it brûken fan dizze HOED):

Kubernetes 1.14: oersjoch fan 'e wichtichste ynnovaasjes
Foarbyld fan simpel triemgebrûk maatwurk (in kompleksere tapassing fan kustomize is binnen mooglik overlays)

Oanfoljend:

  • Added nij team kubectl create cronjob, waans namme sprekt foar himsels.
  • В kubectl logs no kinsto te kombinearjen flaggen -f (--follow foar streaming logs) en -l (--selector foar labelfraach).
  • kubectl ûnderwiisd kopiearje triemmen selektearre troch wylde kaart.
  • Oan it team kubectl wait tafoege flagge --all om alle boarnen yn 'e nammeromte fan it oantsjutte boarnetype te selektearjen.

Oare

De folgjende mooglikheden hawwe stabile (GA) status krigen:

Oare wizigingen yntrodusearre yn Kubernetes 1.14:

  • Standert RBAC-belied lit gjin API-tagong mear ta discovery и access-review brûkers sûnder autentikaasje (net authentisearre).
  • Offisjele CoreDNS-stipe fersoarge Allinnich Linux, dus by it brûken fan kubeadm om it (CoreDNS) yn in kluster yn te setten, moatte knopen allinich op Linux rinne (nodeSelectors wurde brûkt foar dizze beheining).
  • Standert CoreDNS-konfiguraasje is no brûkt foarút plugin ynstee fan proxy. Ek yn CoreDNS tafoege readinessProbe, dy't foarkomt load balancing op passende (net klear foar tsjinst) pods.
  • Yn kubeadm, op fazen init of upload-certs, mooglik wurden lade de sertifikaten nedich om it nije kontrôlefleanmasine te ferbinen mei it kubeadm-certs geheim (brûk de flagge --experimental-upload-certs).
  • In alfa-ferzje is ferskynd foar Windows-ynstallaasjes stypje gMSA (Group Managed Service Account) - spesjale akkounts yn Active Directory dy't ek kinne wurde brûkt troch konteners.
  • Foar G.C.E. aktivearre mTLS-fersifering tusken etcd en kube-apiserver.
  • Updates yn brûkte / ôfhinklike software: Go 1.12.1, CSI 1.1, CoreDNS 1.3.1, Docker 18.09-stipe yn kubeadm, en de minimale stipe Docker API-ferzje is no 1.26.

PS

Lês ek op ús blog:

Boarne: www.habr.com

Add a comment