
Këtë natë një tjetër lëshim i Kubernetes — . Duke ndjekur traditën e këtij blogu, ne do të flasim për ndryshimet kyçe në versionin e ri të këtij produkte të shkëlqyer open source.
Informacioni i përdorur për përgatitjen e këtij materiali është marrë nga , dhe çështjet, kërkesat për tërheqje, Propozimet e Përmirësimit të Kubernetes (KEP) përkatëse.
Le të fillojmë me një hyrje të rëndësishme nga SIG cluster-lifecycle: klasterat dinamik të qëndrueshmërisë Kubernetes (ndërsa nëse do të shprehemi më saktë, rikthimet e HA të vetëpritur) tani nëpërmjet komandave të njohura (në kontekstin e klasterave me një nod) kubeadm (init dhe bashkohu). Në përmbledhje, për këtë:
- certifikatat e përdorura nga klasteri janë transferuar në sekrete;
- për të lejuar përdorimin e klasterit etcd brenda klasterit K8s (në kuptimin e heqjes së varësisë ekzistuese të jashtme) është angazhuar ;
- janë dokumentuar konfigurimet e rekomanduara për një balancues të ngarkesës të jashtëm, që ofron një konfigurim të qëndrueshmërisë (në të ardhmen planifikohet mundësia për t'u hequr nga kjo varësi, por jo në këtë fazë).

Arkitektura e klasterit të HA të Kubernetes, e krijuar me kubeadm
Detajet e zbatimit mund të shihen në . Kjo veçori ishte vërtet e pritur: versioni alfa pritej që në K8s 1.9, por doli vetëm tani.
API
Ekipa aplikoni dhe në përgjithësi menaxhimi deklarativ i objekteve nga kubectl në apiserver. Vetë zhvilluesit e shpjegojnë shkurtimisht vendimin e tyre duke thënë se kubectl apply është një pjesë themelore e punës me konfigurimet në Kubernetes, megjithatë "është plot me gabime dhe e vështirë për t'u riparuar", prandaj kjo funksionalitet duhet të përmirësohet dhe të transferohet në plani i kontrollit. Shembujt e thjeshtë dhe të qartë të problemeve që ekzistojnë sot janë:

Detajet e zbatimit janë në . Gatiësia aktuale është version alfa (e avancuar për beta planifikohet për lëshimin e ardhshëm të Kubernetes).
Në versionin alfa bëhet e disponueshme përdorimi i skemës OpenAPI v3 për krijimin dhe publikimin e dokumentacionit OpenAPI për Resurset e Personalizuara (CR), të përdorura për validimin (në anën e serverit) e resurseve K8s, të përcaktuar nga përdoruesi (Definimi i Resurseve të Personalizuara, CRD). Publikimi i OpenAPI për CRD u lejon klientëve (p.sh., kubectl) të kryejnë validimin në anën e tyre (brenda kubectl krijo dhe kubectl apply) dhe të ofrojnë dokumentacionin për skemën (kubectl shpjego). Detajet janë në .
Logët e mëparshme me flamurin O_APPEND (dhe jo O_TRUNC) për të shmangur humbjen e logëve në disa situata dhe për lehtësinë e trunkejve të logëve me utilitarët e jashtëm për rotacionin.
Gjithashtu në kontekstin e API-ve të Kubernetes mund të theksojmë se në PodSandbox dhe PodSandboxStatus fushën runtime_handler për të evidentuar informacionin mbi RuntimeClass në pod (më shumë për të lexoni në tekstin rreth , ku kjo klasë u shfaq si një version alfa), dhe në Admission Webhooks mundësia për të përcaktuar se cilat versione AdmissionReview ato mbështesin. Përfundimisht, në rregullat e Admission Webhooks tani përdorimi i tyre në namespace dhe kufij të klasterit.
Të dhënat
, të cilat kishin status beta-që nga lëshimi , të stabilizuara (GA): ky feature gate nuk do të çaktivizohet më dhe do të hiqet në Kubernetes 1.17.
përdorimi i variablave të mjedisit të ashtuquajtur (për shembull, emri i pod-it) për emrat e direktorive, të montuara si , mori zhvillim — në formën e një fushe të re subPathExpr, me ndihmën e së cilës tani përcaktohet emri i nevojshëm i direktorive. Fillimisht, kjo veçori u shfaq në Kubernetes 1.11, por për 1.14 mbeti ende në statusin e versionit alfa.
Si dhe në lëshimin e kaluar të Kubernetes, shumë ndryshime të rëndësishme janë paraqitur për CSI (Container Storage Interface) në zhvillim aktiv:
CSI
Èshtë bërë e disponueshme (në kuadër të versionit alfa) ndryshimi i madhësisë për volume të CSI.Për ta përdorur këtë, do të nevojitet aktivizimi i feature gate me emrin ExpandCSIVolumes, si dhe mbështetje për këtë operacion në drejtuesin përkatës të CSI.
Një tjetër veçori për CSI në versionin alfa — të referoheni drejtpërdrejt (dmth, pa përdorur PV/PVC) në volume të CSI brenda specifikimit të pod-eve. Kjo heq kufizimin për përdorimin e CSI si një depo të shpërndara, duke i hapur dyert për ato në botën Për përdorimin () duhet të aktivizohet CSIInlineVolume feature gate.
Ka pasur përparim dhe në 'brendësitë' e Kubernetes, të lidhura me CSI, të cilat nuk janë aq të dukshme për përdoruesit përfundimtarë (administratorët e sistemeve)... Në këtë moment zhvilluesit janë të detyruar të mbështesin dy versione të çdo plugin-i të depozitës: një — 'me stilin e vjetër', brenda kodit të bazës K8s (in-tree), dhe tjetra — në kuadër të ri CSI (më shumë për të lexoni, për shembull, në ). Kjo shkakton shqetësime të kuptueshme që duhet të zgjidhen me kalimin në CSI si të tillë. Nuk është e mundur thjesht të shpallen si të vjetra (deprecated) API të plugins përbrenda (in-tree) për shkak të .
. E gjithë kjo ka çuar në faktin që versionet alfa arritën të kodit të brendshëm të plugins, të implementuara si in-tree, në plugins CSI, duke e bërë që shqetësimet e zhvilluesve të reduktohen në mbështetje të një versioni të vetëm të plugins të tyre, ndërsa ruhet përputhshmëria me API-të e vjetra dhe ato mund të shpallen si të vjetra sipas skenarit të zakonshëm. Pritet që me lëshimin e ardhshëm të Kubernetes (1.15) të përfundojë migrimi i të gjithë plugins të ofruesve të cloud, implementimi do të marrë statusin beta dhe do të aktivizohet në instalimet e K8s me parazgjedhje. Detaje në . Pasojat e kësaj migrimi gjithashtu ishin e kufizimeve për volumet që përcaktohen nga ofruesit specifikë të cloud (AWS, Azure, GCE, Cinder).
Për më tepër, mbështetje për pajisje bllokuese me CSI (CSIBlockVolume) në version beta.
Nodet / Kubelet
U prezantua versioni alfa në Kubelet, i cili është i destinuar për drejtimin e metrikave për burimet kryesore. Në përgjithësi, nëse më parë Kubelet merrte statistikë mbi përdorimin e konteinerëve nga cAdvisor, tani këto të dhëna vijnë nga mjedisi i ekzekutimit të konteinerit përmes CRI (Container Runtime Interface), megjithatë mbetet edhe përputhshmëria për të punuar me versionet e vjetra të Docker. Statistikat që u grumbulluan më parë në Kubelet u drejtuan përmes REST API, tani për këtë përdoret një endpoint, i vendosur në adresën /metrics/resource/v1alpha1. Strategjia afatgjatë e zhvilluesve për të minimizuar setin e metrikave që ofrohen nga Kubelet. Për më tepër, këto metrika jo "metrika thelbësore", por "metrika burimore", dhe përshkruhen si "burime të klasës së parë, si CPU dhe memorie".
Një detaj interesant: pavarësisht përparësisë evidente në performancë të endpoint-it gRPC krahasuar me raste të ndryshme përdorimi të formatit Prometheus (rezultati i një nga benchmark-ët e shihni më poshtë), autorët preferuan formatin tekstual të Prometheus për shkak të dominimit të qartë të këtij sistemi monitorimi në komunitet.
«gRPC nuk është i përputhshëm me kanalet kryesore të monitorimit. Endpoint do të jetë i dobishëm vetëm për dorëzimin e metrikave në Metrics Server ose komponentët e monitorimit që integrohen drejtpërdrejt me të. Kur përdorim caching në Metrics Server, performanca e formatit tekstual Prometheus është mjaft e mirë për ne, për të preferuar Prometheus në vend të gRPC, duke marrë parasysh përhapjen e gjerë të Prometheus në komunitet. Kur formati OpenMetrics të bëhet më stabil, ne mund të arrijmë afërsisht performancën e gRPC me një format të bazuar në proto».

Një nga testet krahasuese të performancës së përdorimit të formateve gRPC dhe Prometheus në endpoint-in e ri të Kubelet për metrika. Më shumë grafikë dhe detaje të tjera mund të gjenden në .
Midis ndryshimeve të tjera:
- Kubelet tani (një herë) kontratë në gjendje të panjohur (unknown) para operacioneve të rinisjes dhe fshirjes.
- Kur përdoret tani i shtohet init-kontenerit Kubelet
- ka filluar të përdorë
nga furnizuesi i statistikave CRI, dhe për nodet dhe kontratat në Windowsstatistat e rrjetit. Informacioni mbi sistemin operativ dhe arkitekturën tani regjistrohet në etiketa - kubernetes.io/os
kubernetes.io/archdheobjekteve Node (përkthyer nga beta në GA).Mundësia për të specifikuar një grup të caktuar përdoruesish të sistemit për kontratat në pod ( - RunAsGroup
, u shfaq nëK8s 1.11 ) du dhe find, të përdorura në cAdvisor, - u zëvendësuan Në cli-runtime dhe kubectl
CLI
flagu -k për integrim me kustomize Shembulli i një përdorimi të thjeshtë të skedarit ):

kustomization overlays )
Për më tepër:
- kubectl create cronjob
, emri i së cilës flet për vete.kubectl logs - Në
tani mund tëkombinohen -f--follow(për streaming të logeve) dhe-l--selector(për kërkimin e etiketave).mësuan - kubectl Në komandën
- kubectl wait
flagu--allpër të zgjedhur të gjitha burimet në hapësirën e emrave të llojit të burimeve të caktuara.Statusi i qëndrueshëm (GA) e morën këto mundësi:
Të tjera
ReadinessGate
- , используемый в спецификации pod’а для определения дополнительных условий, учитываемых в готовности pod’а;
- Mbështetje për faqe të mëdha (feature gate e quajtur );
- ;
- API i Prioritetit të Klasës, .
Ndryshime të tjera të prezantuara në Kubernetes 1.14:
- Politika RBAC e paracaktuar tani nuk i jep akses API
discoverydheaccess-reviewpërdoruesve pa autentikim (unauthenticated). - Mbështetje zyrtare për CoreDNS vetëm për Linux, prandaj kur përdorni kubeadm për implementimin e tij (CoreDNS) në kluster, nodet duhet të funksionojnë vetëm në Linux (për këtë kufizim përdoren nodeSelectors).
- Konfigurimi i CoreDNS i paracaktuar tani në vend të proxy. për më tepër, në CoreDNS readinessProbe, e cila parandalon balancimin e ngarkesës në podët e caktuar (të pa gatshëm për shërbim).
- Në kubeadm, në fazat
initилиupload-certs, ngarkimin e certifikatave të nevojshme për lidhjen e një control-plane të ri me sekretin kubeadm-certs (përdoret flag--experimental-upload-certs). - Për instalimet Windows ka një version alfa gMSA (Group Managed Service Account) — llogari të veçanta në Active Directory, të cilat mund të përdoren gjithashtu nga kontejnerët.
- Për GCE kriptimi mTLS midis etcd dhe kube-apiserver.
- Përditësimet në softuerin e përdorur/varësisë: Go 1.12.1, CSI 1.1, CoreDNS 1.3.1, mbështetje për Docker 18.09 në kubeadm, dhe versione minimale e mbështetur e API-së Docker tani është 1.26.
P.S.
Lexoni gjithashtu në blogun tonë:
- «»;
- «»;
- «»;
- «».
Burimi: habr.com
