Kubernetes 1.14: peamiste uuenduste ülevaade

Kubernetes 1.14: peamiste uuenduste ülevaade

Sel ööl toimub on järgmine Kubernetes'i versioon — 1.14. Meie blogi traditsiooni kohaselt anname ülevaate peamistest muudatustest selle suurepärase avatud lähtekoodiga toote uues versioonis.

Selle refleksiooni ettevalmistamiseks kasutatud teave on võetud Kubernetes'i täiustuste jälgimise tabelist, CHANGELOG-1.14 ja vastavatest probleemidest, tõmbenimistest, Kubernetes'i täiustuste ettepanekutest (KEP).

Alustame olulise sissejuhatusega SIG cluster-lifecycle poolt: dünaamilised tõrkevarustatud klastrid Kubernetes (täpsemalt öeldes isehallatavad HA-deployments) on nüüd võimalik luua tavaliste (ühe sõlmega klastrite kontekstis) käskudega kubeadm'ile. (init ja liitu). Lühidalt öeldes, selleks:

  • klastriga kasutatavad sertifikaadid kantakse üle saladustesse;
  • klastri etcd kasutamise võimaldamiseks K8s-klastris (st eemaldades senise välist sõltuvuse) on kaasatud etcd-operator;
  • dokumenteeritakse soovitatavad seaded välist koormuse tasakaalustajat, mis tagab tõrkevarustatud konfiguratsiooni (hiljem plaanitakse sõltuvuse väljajätmist, kuid mitte antud etapis).

Kubernetes 1.14: peamiste uuenduste ülevaade
HA-klastri Kubernetes'i arhitektuur, mis on loodud kubeadm-iga

Rakenduse üksikasju saab tutvuda disainiettepanekus. See funktsioon oli tõeliselt kauaoodatud: alfa versioon oodati juba K8s 1.9-s, kuid see ilmus alles nüüd.

API

Meeskond rakenda ja üldse deklaratiivne haldus objektidega väljatoodud kohast kubectl apiserverisse. Arendajad selgitavad oma otsust lühidalt, et kubectl apply on Kubernetes'i konfiguratsioonidega töötamise põhiosa, kuid „on täis vigu ja on keeruline parandada“, mistõttu tuleb see funktsionaalsus viia korralikku seisu ja üle tuua juhtimisplaadini. Lihtsad ja selged näited tänapäevastest probleemidest:

Kubernetes 1.14: peamiste uuenduste ülevaade

Teave rakenduse kohta - KEP. Praegune valmisolek - alfa versioon (üleminek beetaversioonile on planeeritud järgmises Kubernetes'e väljaandes).

Alfa versioonis sai kättesaadavaks võimalus OpenAPI v3 skeemi kasutamine CustomResources'i OpenAPI-dokumentatsiooni koostamiseks ja avaldamiseks (CR), mida kasutatakse K8s-i kasutaja määratletud ressursside (CustomResourceDefinition, CRD) valideerimiseks serveri poolel. OpenAPI avaldamine CRD jaoks võimaldab klientidel (nt kubectl) valida valideerimise enda poolel (raames kubectl create ja kubectl apply) ja esitada skeemidokumentatsiooni (kubectl explain). Lisainformatsioon - KEP.

Varem olemas olnud logid avatakse nüüd lipu O_APPEND (mitte O_TRUNC) logide kaotuse vältimiseks teatud olukordades ning logide truncation'i mugavuse nimel externete tööriistade abil, mis on mõeldud rotatsiooniks.

Samuti tuleb märkida Kubernetes API kontekstis, et PodSandbox ja PodSandboxStatus lisatud väli runtime_handler informatsiooni jaoks RuntimeClass pod’is (rohkem informatsiooni leiate tekstist, mis käsitleb Kubernetes 1.12 väljaannet, kus see klass ilmus alfa-versioonina), ja Admission Webhook’ides on rakendatud võimalust määrata, milliseid versioone AdmissionReview nad toetavad. Lõpuks, Admission Webhook’ide reeglites on nüüd võimalik piirata kliendi rakenduse ulatusi namespace'ide ja klastri piirangutega.

Salvestusruumid

Püsivad kohalikud mahud, mis olid beeta-versioonis alates K8s 1.10, on kuulutatud stabiilseteks (GA): see feature gate ei ole enam väljalülitatud ja see eemaldatakse Kubernetes 1.17 versioonis.

Võimalus keskkonnamuutujate kasutamine nn Downward API (nt pod’i nimi) kaustade nimede jaoks, mida monteeritakse kui subPath, on saanud edasiarenduse – uue välja subPathExpr, mille abil määratakse nüüd vajalik kaustanimi. Algne funktsioon ilmus Kubernetes 1.11, kuid jäi ka 1.14 versiooniks alfa-kategooria.

Nagu ka eelmises Kubernetes väljaandes, on palju olulisi muudatusi aktiivselt areneva CSI (Container Storage Interface) jaoks:

CSI

Saab kättesaadav (alfaversioonis) toetamine mõõtmete muutmine CSI-mahute jaoks. Selle kasutamiseks on vajalik aktiveerida funktsioonigrupp nimega ExpandCSIVolumes, samuti peab konkreetne CSI-draiver toetama seda toimingut.

Veel üks CSI funktsioon alfaversioonis — võimalus otsese viitamine (st ilma PV/PVC kasutamiseta) CSI-mahtudele pod'i spetsifikatsioonis. See eemaldab piirangu kasutada CSI-d ainult kaugehitusena, avades uksed kohalikule ajutisele mahule. Kasutamiseks (dokumendi näide) tuleb aktiveerida CSIInlineVolume funktsioonigrupp.

On toimunud edusamme ka Kubernetes'i "sisemuses", mis on seotud CSI-ga, ja mis ei ole lõppkasutajatele (süsteemiadministraatoritele) nii nähtavad... Praegu peavad arendajad toetama iga salvestuspakkuja kahte versiooni: üks — "vana meetodi" järgi, K8s koodibaasis (in-tree), ja teine — uue CSI raames (rohkem lugege näiteks) siit). See tekitab arusaadavaid ebamugavusi, mida tuleb kõrvaldada, kui CSI stabiilsemaks muutub. Lihtsalt võtta ja kuulutada vananenud (deprecated) sisemine (in-tree) pistikprogrammid on praktiliselt võimatu, sest vastava Kubernetes'i poliitika.

Kõik see on viinud selleni, et alfa-versioonid on saavutatud migratsiooniprotsess pluginite sisekood, ellu viidud nii in-tree kui ka CSI pluginid, mistõttu arendajate mured piirdub ühe versiooni toetamisega, samas kui ühilduvus vanade API-dega säilitatakse ja need saab tühistada tavapärase stsenaariumi järgi. Oodatakse, et järgmise Kubernetes'i versiooni (1.15) jooksul migratsioon kõikide pilveteenuse pakkujate pluginatesse, rakendamine saab beetaversiooni staatuse ja aktiveeritakse K8s installatsioonides vaikimisi. Täiendavad üksikasjad on disainiettepanekus. Selle migratsiooni tagajärjeks oli ka SelfLink piirangute tühistamine, mida seadsid konkreetsed pilveteenuse pakkujad (AWS, Azure, GCE, Cinder).

Lisaks sellele toetatakse plokiseadmeid, kasutades CSI (CSIBlockVolume) muudetud beetaversiooniks.

Sõlmed / Kubelet

Esitatud alfa-versioon uuest endpoint'ist Kubelet'is, mis on ette nähtud peamiste ressursside kohta mõõtmiste edastamiseks. Üldiselt, kui varem sai Kubelet konteinerite kasutusstatistikat cAdvisorilt, siis nüüd tulevad need andmed konteineri täitmisest läbi CRI (Container Runtime Interface), samas on säilinud ka ühilduvus vanade Docker versioonidega. Varem edastati Kubeletis kogutud statistika REST API kaudu, nüüd kasutatakse selleks lõpp-punkti, mis asub aadressil /metrics/resource/v1alpha1. Pikemaajaline strateegia arendajate koosneb selleks, et vähendada Kubelet'i pakutavate mõõdikute arvu. Muide, neid mõõdikud nimetatakse nüüd mitte «core metrics», vaid «resource metrics» ja neid kirjeldatakse kui «first-class resources, such as cpu and memory».

Küll aga on huvitav nüanss: hoolimata gRPC lõpp-punkti selgest eelisest jõudluses võrreldes erinevate Prometheuse formaadiga kasutusjuhtudega (ühe tõhususe benchmark'i tulemust vt allpool), eelistasid autorid tekstivormingut Prometheus, kuna selle jälgimissüsteemi selge ülemuslikkus kogukonnas.

«gRPC ei ühildu peamiste jälgimispipeline’dega. Endpoint on kasulik ainult statistika edastamiseks Metrics Server’isse või jälgimiskomponentidesse, mis integreeruvad otse temaga. Kui Metrics Serveris on kasutusel va caching, siis Prometheuse tekstiformaadi toimivus on piisavalt hea meie jaoks, et eelistada Prometheust gRPC’le, arvestades Prometheuse laialdast levikut kogukonnas. Kui OpenMetrics formaadi stabiilsus paraneb, saame läheneda gRPC toimivusele proto-põhiste formaatide kaudu.»

Kubernetes 1.14: peamiste uuenduste ülevaade
Üks korraldatud jõudluse katsetus gRPC ja Prometheuse formaatide kasutamisel uue Kubeleti endpoint’i jaoks mõõtmete jaoks. Rohkem diagramme ja teavet leiate KEP.

Muudest muudatustest:

  • Kubelet nüüd (korraga) üritab peatada tundmatud (unknown) konteinerid enne taaskäivitamise ja eemaldamise operatsioone.
  • VPN-teenuse kasutamisel PodPreset’id nüüd init-konteineril on lisatakse sama teave, mis tavalisel konteineril.
  • Kubelet alustanud kasutama usageNanoCores CRI statistikateenuse pakkujast, samuti sõlmedele ja konteineritele Windows’is on lisatud võrgu statistikat.
  • Operatsioonisüsteemi ja arhitektuuri teave kirjutatakse nüüd labelitesse. kubernetes.io/os ja kubernetes.io/arch Node'ide (töötav versioon muutus beetast GA-ks).
  • Võime määrata konkreetse kasutajagruppi konteinerite jaoks pod'is (RunAsGroup, lisandus versioonis K8s 1.11) edasi liikunud beetaversiooni (vaikimisi sisse lülitatud).
  • du ja find, mida kasutatakse cAdvisoris, asendatud Go-realiseerimisega.

CLI

cli-runtime'is ja kubectl's lisatud lipp -k integreerimiseks kustomize (muide, selle arendamine toimub nüüd eraldi hoidlas), st spetsiaalsetest kaustadest kustomization'i täiendavate YAML-failide töötlemiseks (kuidas neid kasutada vt KEP):

Kubernetes 1.14: peamiste uuenduste ülevaade
Lihtsa kustomization faili kasutamise näide kustomization (võimalik on ka keerulisem kustomize rakendus overlays)

Lisaks:

  • Lisatud uus käsk kubectl create cronjob, mille nimi räägib enda eest.
  • V kubectl logs on nüüd võimalik ühendada lipud -f (--follow logide voogesitamiseks) ja -l (--selector label query jaoks).
  • kubectl õppisid failide kopeerimist, kasutades wild card'i.
  • Meeskonda kubectl wait lisasid lipuke --all kõigi määratud ressursitüüpide valimiseks nimedega ruumis.

Muud

Stabiilse (GA) oleku said järgmised võimalused:

Teised muudatused, mis on esitatud Kubernetes 1.14:

  • RBAC poliitika ei paku enam vaikimisi ligipääsu API-le discovery ja access-review kasutajatele, kellel puudub autentimine (unauthenticated).
  • CoreDNS ametlik tugi on tagatud ainult Linuxile, seega kui kasutate kubeadm'i selle (CoreDNS) juurutamiseks klastris, peavad sõlmed töötama ainult Linuxis (selle piirangu jaoks kasutatakse nodeSelectors).
  • CoreDNS vaikimisi konfiguratsioon on nüüd kasutab plugin forward asemel proxy. Lisaks on CoreDNS on lisatud readinessProbe, mis takistab koormuse tasakaalustamist vastavate (teenindamiseks mittevalmis) pod'ide peale.
  • Kubeadm'is, etappides init või upload-certs, on nüüd võimalik laadida üles sertifikaadid, mis on vajalikud uue control-plane'i ühendamiseks kubeadm-certs salvestusega (kasutatakse lippu --experimental-upload-certs).
  • Windowsi installatsioonide jaoks on saadaval alfa versioon toetust gMSA (Group Managed Service Account) — spetsiaalsed kontod Active Directory's, mida saavad kasutada konteinerid.
  • GCE jaoks on aktiveeritud mTLS krüpteerimine jne ja kube-apiserveri vahel.
  • Kasutatavates/sõltuvates tarkvarauuendustes: Go 1.12.1, CSI 1.1, CoreDNS 1.3.1, Docker 18.09 toetus kubeadm-is, ja minimaalne toetatud Docker API versioon on 1.26.

P.S.

Lugege ka meie blogist:

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster