Juče, 9. decembra, održan sljedeće izdanje Kubernetesa - 1.17. Prema tradiciji koja se razvila za naš blog, govorimo o najznačajnijim promjenama u novoj verziji.
Informacije korišćene za pripremu ovog materijala preuzete su iz zvaničnog saopštenja, Tabele praćenja poboljšanja Kubernetesa, PROMJENA-1.17 i povezana pitanja, zahtjevi za povlačenje i predlozi za poboljšanje Kubernetesa (KEP). Pa sta je novo?..
Rutiranje sa svjesnim topologije
Kubernetes zajednica je dugo čekala na ovu funkciju - Usmjeravanje usluga svjesno topologije. Ako KEP nastaje u oktobru 2018. godine, a službeno poboljšanje — Prije 2 godine, uobičajeni problemi (kao to) - i još par godina stariji...
Opšta ideja je da se obezbedi mogućnost implementacije „lokalnog” rutiranja za usluge koje se nalaze u Kubernetesu. “Lokalitet” u ovom slučaju znači “isti topološki nivo” (nivo topologije), što može biti:
čvor identičan za usluge,
isti serverski stalak,
istoj regiji
isti provajder oblaka,
...
Primjeri korištenja ove funkcije:
uštede na prometu u instalacijama u oblaku s više zona dostupnosti (multi-AZ) - vidi. svježa ilustracija koristeći primjer saobraćaja iz istog regiona, ali različitih AZ u AWS;
manja latencija performansi/bolja propusnost;
razdijeljeni servis koji ima lokalne informacije o čvoru u svakom segmentu;
postavljanje fluentd-a (ili analoga) na isti čvor sa aplikacijama čiji se logovi prikupljaju;
Za detalje o tome kako funkcija funkcionira i kako je već možete koristiti, pročitajte ovaj članak od jednog od autora.
IPv4/IPv6 podrška za dvostruki stek
Značajan napredak fiksno u drugoj mrežnoj funkciji: istovremena podrška za dva IP steka, koja je prvi put predstavljena u K8s 1.16. Konkretno, novo izdanje je donijelo sljedeće promjene:
u kube-proxy implementirano mogućnost istovremenog rada u oba režima (IPv4 i IPv6);
в Pod.Status.PodIPspojavila podrška za API prema dolje (istovremeno kao u /etc/hosts sada zahtevaju od hosta da doda IPv6 adresu);
podrška za dual stack KIND (Kubernetes IN Docker) i kubeadm;
Inicijativa za migracija volumenskih dodataka na CSI - CSI Migracija - dostignuta beta verzija. Ova funkcija je kritična za prevođenje postojećih dodataka za pohranu (u stablu) na moderan interfejs (CSI, van stabla) nevidljiv za krajnje korisnike Kubernetesa. Administratori klastera će samo trebati da omoguće CSI migraciju, nakon čega će postojeći resursi i radna opterećenja nastaviti da "samo rade"... ali koristeći najnovije CSI drajvere umjesto zastarjelih uključenih u Kubernetes jezgro.
U ovom trenutku, migracija za AWS EBS drajvere je spremna u beta verziji (kubernetes.io/aws-ebs) i GCE PD (kubernetes.io/gce-pd). Prognoze za ostale skladišne kapacitete su sljedeće:
Razgovarali smo o tome kako je “tradicionalna” podrška za skladištenje u K8s došla do CSI u ovaj članak. I tranziciji CSI migracije u beta status posvećen je zasebna publikacija na blogu projekta.
Osim toga, još jedna značajna funkcionalnost u kontekstu CSI, koja potiče (alfa implementacija) u K1.17s 8, dostigla je beta status (tj. omogućena po defaultu) u izdanju Kubernetes 1.12 - kreiranje snimaka i oporavak od njih. Među promjenama napravljenim na Kubernetes Volume Snapshot na putu do beta izdanja:
dijeljenje CSI eksternog snapshottera bočne prikolice na dva kontrolera,
dodana tajna za brisanje (tajna brisanja) kao bilješku za sadržaj snimka volumena,
novi finalizator (finalizator) da spriječite brisanje API objekta snapshot ako postoje preostale veze.
U vrijeme izdanja 1.17, ovu funkciju podržavaju tri CSI drajvera: GCE Persistent Disk CSI drajver, Portworx CSI drajver i NetApp Trident CSI drajver. Više detalja o njegovoj implementaciji i upotrebi možete pronaći u ovu publikaciju na blogu.
Oznake dobavljača u oblaku
Označava to automatski dodijeljen kreiranim čvorovima i volumenima ovisno o korištenom provajderu oblaka, dostupni su u Kubernetesu kao beta verzija već dugo vremena - od izdavanja K8s 1.2 (April 2016!). S obzirom na njihovu široku upotrebu tako dugo, programeri odlučio, da je vrijeme da se karakteristika proglasi stabilnom (GA).
Stoga su svi prema tome preimenovani (po topologiji):
... ali su još uvijek dostupni pod svojim starim nazivima (za kompatibilnost unatrag). Međutim, svim administratorima se preporučuje da pređu na trenutne oznake. Povezana dokumentacija K8s je ažuriran.
Motivacija za implementaciju ove funkcije (prema KEP) je:
Dok se Kubernetes može implementirati ručno, de facto (ako ne i de jure) standard za ovu operaciju je korištenje kubeadm-a. Popularni alati za upravljanje sistemima kao što je Terraform oslanjaju se na kubeadm za implementaciju Kubernetesa. Planirana poboljšanja Cluster API-ja uključuju sastavljajući paket za Kubernetes bootstrapping pomoću kubeadm-a i cloud-init-a.
Bez strukturiranog izlaza, čak i najbezazlenije promjene na prvi pogled mogu pokvariti Terraform, Cluster API i drugi softver koji koristi rezultate kubeadm-a.
Naši neposredni planovi uključuju podršku (u obliku strukturiranog izlaza) za sljedeće kubeadm komande:
alpha certs
config images list
init
token create
token list
upgrade plan
version
Ilustracija JSON odgovora na naredbu kubeadm init -o json:
Općenito, izdavanje Kubernetesa 1.17 odvijalo se pod motom "Stabilnost" To je olakšano činjenicom da su mnoge karakteristike u njemu (njihov ukupan broj je 14) dobio GA status. Među njima:
"zaštita finalizatora" (Zaštita finalizatora) za balansiranje opterećenja (provjera odgovarajućih resursa usluge prije brisanja resursa LoadBalancera);
kube-apiserver optimizacija u performansama pri radu s višestrukim satovima koji prate identične skupove objekata - postignuto izbjegavanjem ponovljene serijalizacije istih objekata za svakog promatrača.
Ostale promjene
Potpuna lista inovacija u Kubernetes 1.17, naravno, nije ograničena na gore navedene. Evo nekih drugih (a za potpuniju listu pogledajte CHANGELOG):
slična promjena zadesio EndpointSlice API (također od K8s 1.16), međutim za sada ovo rješenje za poboljšanje performansi/skalabilnosti Endpoint API-ja nije omogućeno po defaultu;