Jučer, 9. prosinca, došlo je do još jednog izdanja Kubernetes-a — 1.17. U skladu s tradicijom našeg bloga, prikazujemo najznačajnije promjene u novoj verziji.

Informacije korištene za pripremu ovog materijala preuzete su iz službenog najave, , te odgovarajućih issue-a, pull request-a, kao i Kubernetes Enhancement Proposals (KEP). Dakle, što je novo?..
Routiranje uzimajući u obzir topologiju
Već dugo u Kubernetes zajednici očekivali su ovu funkcionalnost — Routanje usluga uzimajući u obzir topologiju. Ako počelo je u listopadu 2018., a službeno — prije 2 godine, a obični issue-i (poput ) — zapravo su stariji još nekoliko godina...
Opća ideja je pružiti mogućnost implementacije "lokalnog" rutiranja za usluge unutar Kubernetes-a. "Lokalnost" u ovom slučaju označava "isti topološki nivo" (topology level), koji može biti:
- isti čvor za usluge,
- ista serverska ormarića,
- isti regija,
- isti pružatelj oblaka,
- …
Primjeri korištenja ove funkcionalnosti:
- ušteda na prometu u oblačnim instalacijama s više dostupnih zona (multi-AZ) — vidi. na primjeru prometa jedne regije, ali različitih AZ u AWS-u;
- niže latencije u performansama/bolja propusnost;
- shardani servis s lokalnim informacijama o čvoru u svakom shardu;
- smještanje fluentd (ili sličnih rješenja) na jedan čvor s aplikacijama čiji se logovi prikupljaju;
- …
Ova "tople" rutacija također se naziva network affinity — analogno , ili nedavno uvedenom (i ServiceTopology u Kubernetes-u — alfa-verzija. Više informacija o tome kako je funkcionalnost postavljena i kako je već možete koristiti, pročitajte u
od jednog od autora. Podrška za dvostruki stog IPv4/IPv6
Značan napredak
zabilježen je K8s 1.16 u kube-proxy
- mogućnost istovremeno rada u oba moda (IPv4 i IPv6); Pod.Status.PodIPs
- u
podrška downward API (istovremeno s tim usada zahtijevaju dodavanje i IPv6 adrese);/etc/hostspodrška za dva stoga u - KIND a ažurirani e2e testovi. ;
- ažurirani e2e testovi.

korištenje duple stack IPv4/IPv6 u KIND
Napredak u CSI-ju
Proglašeno stabilnim za pohranu na bazi CSI, prvi put predstavljena u .
Inicijativa za migraciju volumnog plugina na CSI — — postigla beta-izdanje. Ova funkcionalnost je ključna za prijenos postojećih pohrana (in-tree) na suvremeni sučelje (CSI, van-drve) neprimjetno za krajnje korisnike Kubernetesa. Administratorima klastera bit će dovoljno aktivirati CSI migraciju, nakon čega će postojeći stateful-resursi i radna opterećenja i dalje "samo raditi"… ali sada uz korištenje aktualnih CSI drajvera umjesto zastarjelih, koji su uključeni u jezgru Kubernetesa.
Trenutno je u beta-izdanju dostupna migracija za Amazon EBS drajvere (kubernetes.io/aws-ebs) i GCE PD (kubernetes.io/gce-pd). Prognoze za druga pohrane su sljedeće:

O tome kako je "tradicionalna" podrška pohrana u K8s prešla na CSI, govorili smo u . A prelasku CSI migracije u beta-status posvećen je na blogu projekta.
Osim toga, beta-status (tj. uključivanje prema zadanom) u izdanju Kubernetesa 1.17 postigla je druga značajna funkcionalnost u kontekstu CSI, koja započinje (alpha-izvedba) u K8s 1.12, — i obnova iz njih. Među promjenama, izvedenim u Kubernetes Volume Snapshot na putu do beta-izdanja:
- razdvajanje sidecar-a CSI external-snapshotter na dva kontrolera,
- dodana tajna za brisanje (deletion secret) kao anotacija za sadržaj snimke volumena,
- novi finalizator (finalizer) za sprečavanje brisanja API-objekta snimke u prisutnosti preostalih veza.
U trenutku izdanja 1.17, funkcionalnost se podržava kod tri CSI drajvera: GCE Persistent Disk CSI Driver, Portworx CSI Driver i NetApp Trident CSI Driver. Više o njenoj provedbi i korištenju možete pročitati u na blogu.
Oznake dobavljača oblaka
Oznake koje se automatski dodjeljuju na stvorene čvorove i volumene ovisno o korištenom cloud dobavljaču, bile su dostupne u Kubernetesa kao beta-verzija već jako dugo — od izdanja K8s 1.2 (travanjs 2016!). Uzimajući u obzir njihovu široku primjenu tijekom tako dugo vremena, programeri , da je došlo vrijeme da se funkcionalnost proglasi stabilnom (GA).
Stoga su svi oni preimenovani u skladu s tim (prema topologijama):
-
beta.kubernetes.io/instance-type→node.kubernetes.io/instance-type -
failure-domain.beta.kubernetes.io/zone→topology.kubernetes.io/zone -
failure-domain.beta.kubernetes.io/region→topology.kubernetes.io/region
… ali su i dalje dostupna pod svojim starim nazivima (za povratnu kompatibilnost). Međutim, svim administratorima se preporučuje prelazak na ažurirane oznake. K8s je ažuriran.
Strukturirani izlaz kubeadm
Prvi put predstavljen u alfa verziji . Podržani formati: JSON, YAML, Go-šablon.
Motivacija za implementaciju ove funkcije (prema ) je sledeća:
Iako se Kubernetes može ručno postaviti, de facto (ako ne i de jure) standard za ovu operaciju je korišćenje kubeadm-a. Popularni alati za upravljanje sistemima kao što je Terraform oslanjaju se na kubeadm za postavljanje Kubernetesa. Planirana poboljšanja u Cluster API uključuju kompaktni paket za bootstrapping Kubernetesa sa kubeadm-om i cloud-init.
Bez strukturiranog izlaza, čak i naizgled bezopasne promene mogu slomiti Terraform, Cluster API i druge softvere koji koriste rezultate rada kubeadm-a.
U bliskoj budućnosti planira se podrška (u obliku strukturiranog izlaza) za sledeće komande kubeadm:
-
alpha certs -
config images list -
init -
token create -
token list -
upgrade plan -
version
Ilustracija JSON odgovora na komandu kubeadm init -o json:
{
"node0": "192.168.20.51:443",
"caCrt": "sha256:1f40ff4bd1b854fb4a5cf5d2f38267a5ce5f89e34d34b0f62bf335d74eef91a3",
"token": {
"id": "5ndzuu.ngie1sxkgielfpb1",
"ttl": "23h",
"expires": "2019-05-08T18:58:07Z",
"usages": [
"authentication",
"signing"
],
"description": "Podrazumevani bootstrap token generisan od 'kubeadm init'.",
"extraGroups": [
"system:bootstrappers:kubeadm:default-node-token"
]
},
"raw": "Rm9yIHRoZSBhY3R1YWwgb3V0cHV0IG9mIHRoZSAia3ViZWFkbSBpbml0IiBjb21tYW5kLCBwbGVhc2Ugc2VlIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2FrdXR6LzdhNjg2ZGU1N2JmNDMzZjkyZjcxYjZmYjc3ZDRkOWJhI2ZpbGUta3ViZWFkbS1pbml0LW91dHB1dC1sb2c="
}Stabilizacija drugih novina
Uopšte, izdanje Kubernetesa 1.17 održano je pod sloganom „Stabilnost”. To je olakšano tim što je veoma mnogo funkcija u njemu (ukupan broj — 14) dobilo GA status. Među njima:
- „označavanje“ čvorova prema određenim uslovima (), koja se pojavila u ;
- — nova vrsta događaja koja ima oznaku da su svi objekti do određene verzije (
resourceVersion) već obrađeni putem watch-a; - (defaulting) za Custom Resources;
- u podu procesnih prostora;
-
ScheduleDaemonSetPods— pomoću kube-scheduler-a (umesto DaemonSet kontrolera); - na broj volumena u zavisnosti od tipa čvora;
- za nazive direktorija koji se montiraju kao
subPath; - u specijalizirani Lease API;
- „zaštita finalizatora“ () za uravnoteživače opterećenja (provjera relevantnih resursa Service-a prije uklanjanja resursa LoadBalancer-a);
- u performansama kada se radi s brojnim watch-evima koji prate identične skupine objekata — postiže se izbjegavanjem ponovne serijalizacije istih objekata za svakog watchera.
Ostale izmjene
Cjelovit popis noviteta u Kubernetes 1.17, naravno, ne ograničava se na navedene iznad. Evo nekoliko drugih (a za potpuniji popis — vidi ):
- do beta verzije "proširila" predstavljena u prošlom izdanju funkcionalnost ;
- analogna promjena EndpointSlice API (također iz K8s 1.16), međutim ovo rješenje za poboljšanje performansi/skalabilnosti Endpoint API-ja zasada nije aktivirano po zadanim postavkama;
- kritični podovi za rad klastera sada ne samo u prostorima imena
kube-system(detalje vidi u dokumentaciji o ); - nova opcija za kubelet — — omogućuje izričito definiranje popisa CPU-a rezerviranih za sustav;
- za
kubectl logsnova zastavica--prefix, koja dodaje naziv pod-a i izvornog kontejnera svakoj liniji loga; - u
label.SelectorRequiresExactMatch; - svi kontejneri u kube-dns s manjim privilegijama;
- izdvojen je u zasebni GitHub-ov repozitorij i više neće biti uključen u izdanja Kubernetes-a;
- značajno kube-proxy za ne-UDP portove.
Izmjene u zavisnostima:
- verzija CoreDNS u sklopu kubeadm — 1.6.5;
- verzija crictl ažurirana na v1.16.1;
- CSI 1.2.0;
- etcd 3.4.3;
- posljednja provjerena verzija Dockera povećana na 19.03;
- minimalna verzija Go, potrebna za izgradnju Kubernetes 1.17, je 1.13.4.
P.S.
Pročitajte i na našem blogu:
- «»;
- «»;
- «»;
- «».
Izvor: habr.com
