Jučer, 9. prosinca god. odvijao sljedeće izdanje Kubernetesa - 1.17. Prema tradiciji koja se razvila za naš blog, govorimo o najznačajnijim promjenama u novoj verziji.
Podaci korišteni za pripremu ovog materijala preuzeti su iz službene objave, Kubernetes tablice praćenja poboljšanja, DNEVNIK PROMJENA-1.17 i povezani problemi, zahtjevi za povlačenjem i prijedlozi poboljšanja Kubernetesa (KEP). Dakle, što ima novo?..
Usmjeravanje s obzirom na topologiju
Kubernetes zajednica dugo je čekala ovu značajku - Usmjeravanje usluge s obzirom na topologiju, ako KEP nastaje u listopadu 2018., a službeni poboljšanje — Prije 2 godine, uobičajeni problemi (Kao to) - i još koju godinu stariji...
Opća ideja je pružiti mogućnost implementacije "lokalnog" usmjeravanja za usluge koje se nalaze u Kubernetesu. "Lokalitet" u ovom slučaju znači "ista topološka razina" (topološka razina), što može biti:
čvor identičan za usluge,
isti stalak za poslužitelje,
istoj regiji
isti pružatelj usluga oblaka,
...
Primjeri korištenja ove značajke:
uštede na prometu u instalacijama u oblaku s više zona dostupnosti (multi-AZ) - vidi. svježa ilustracija korištenjem primjera prometa iz iste regije, ali različitih AZ u AWS-u;
manja latencija izvedbe/bolja propusnost;
dijeljeni servis koji ima lokalne informacije o čvoru u svakom shardu;
postavljanje fluentda (ili analoga) na isti čvor s aplikacijama čiji se dnevnici prikupljaju;
Za detalje o tome kako značajka radi i kako je već možete koristiti pročitajte ovaj članak od jednog od autora.
IPv4/IPv6 dual stack podrška
Značajan napredak fiksni u drugoj mrežnoj značajci: istovremena podrška za dva IP skupa, koja je prvi put predstavljena u K8s 1.16. Konkretno, novo izdanje donijelo je sljedeće promjene:
u kube-proxy implementiran mogućnost istovremenog rada u oba načina (IPv4 i IPv6);
в Pod.Status.PodIPspojavio podrška za API prema dolje (u isto vrijeme kao u /etc/hosts sada zahtijevaju da domaćin doda IPv6 adresu);
dual stack podrška LJUBAZAN (Kubernetes IN Docker) i kubeadm;
ažurirani e2e testovi.
ilustracija koristeći dual stack IPV4/IPv6 u KIND-u
Napredak na CSI
Proglašeno stabilnim topološka podrška za pohranu temeljenu na CSI-ju, prvi put predstavljena u K8s 1.12.
Inicijativa za migracija dodataka za volumen na CSI - CSI migracija - dosegnuta beta verzija. Ova je značajka ključna za prevođenje postojećih dodataka za pohranu (u stablu) na moderno sučelje (CSI, izvan stabla) nevidljiv krajnjim korisnicima Kubernetesa. Administratori klastera trebat će samo omogućiti CSI migraciju, nakon čega će postojeći resursi i radna opterećenja nastaviti "samo raditi"... ali koristeći najnovije CSI upravljačke programe umjesto zastarjelih uključenih u Kubernetes jezgru.
Trenutačno je migracija za AWS EBS upravljačke programe spremna u beta verziji (kubernetes.io/aws-ebs) i GCE PD (kubernetes.io/gce-pd). Predviđanja za ostala skladišta su sljedeća:
Razgovarali smo o tome kako je "tradicionalna" podrška za pohranu u K8s došla u CSI ovaj članak. A prijelaz migracije CSI na beta status posvećen je zasebna publikacija na blogu projekta.
Osim toga, još jedna značajna funkcionalnost u kontekstu CSI-ja, koja potječe (alfa implementacija) u K1.17s 8, dosegla je beta status (tj. omogućena prema zadanim postavkama) u izdanju Kubernetes 1.12 - stvaranje snimki i oporavak od njih. Među promjenama napravljenim na Kubernetes Volume Snapshotu na putu do beta izdanja:
dijeljenje CSI vanjske prikolice s brzim snimanjem na dva kontrolera,
dodana tajna za brisanje (tajna brisanja) kao komentar na sadržaj snimke volumena,
novi finalizator (finalizator) kako biste spriječili brisanje API objekta snimke ako postoje preostale veze.
U vrijeme izdanja 1.17, značajku podržavaju tri CSI drajvera: GCE Persistent Disk CSI drajver, Portworx CSI drajver i NetApp Trident CSI drajver. Više detalja o njegovoj primjeni i korištenju možete pronaći u ova publikacija na blogu.
Oznake Cloud Providera
Označava to automatski dodijeljen stvorenim čvorovima i volumenima ovisno o korištenom pružatelju oblaka, dostupni su u Kubernetesu kao beta verzija već jako dugo - od izdanja K8s 1.2 (travanj 2016.!). S obzirom na njihovu tako dugo raširenu upotrebu, programeri odlučio, da je vrijeme da se značajka proglasi stabilnom (GA).
Stoga su svi preimenovani u skladu s tim (po topologiji):
... ali su još uvijek dostupni pod svojim starim imenima (radi kompatibilnosti sa prethodnim verzijama). Međutim, preporučuje se svim administratorima da prijeđu na trenutne oznake. Povezana dokumentacija K8s je ažuriran.
Motivacija za implementaciju ove značajke (prema KEP) je:
Iako 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 sustavima poput Terraforma oslanjaju se na kubeadm za implementaciju Kubernetesa. Planirana poboljšanja Cluster API-ja uključuju paket koji se može sastaviti za Kubernetes bootstrapping s kubeadm i cloud-init.
Bez strukturiranog izlaza, čak i najbezazlenije promjene na prvi pogled mogu pokvariti Terraform, Cluster API i drugi softver koji koristi rezultate kubeadma.
Naši neposredni planovi uključuju podršku (u obliku strukturiranog izlaza) za sljedeće kubeadm naredbe:
alpha certs
config images list
init
token create
token list
upgrade plan
version
Ilustracija JSON odgovora na naredbu kubeadm init -o json:
Općenito, izdanje Kubernetesa 1.17 odvijalo se pod motom "stabilnost" Tome je pridonijela činjenica da mnoge značajke u njemu (njihov ukupan broj je 14) dobio status GA. Među njima:
"zaštita finalizatora" (Zaštita finalizatora) za balansere opterećenja (provjera odgovarajućih resursa usluge prije brisanja resursa LoadBalancer);
kube-apiserver optimizacija u performansama pri radu s višestrukim satovima koji prate identične skupove objekata - postiže se izbjegavanjem ponovljene serijalizacije istih objekata za svakog promatrača.
Ostale promjene
Potpuni popis inovacija u Kubernetesu 1.17, naravno, nije ograničen na one gore navedene. Evo nekih drugih (a za potpuniji popis pogledajte PROMJENA):
Značajka predstavljena u posljednjem izdanju stigla je do beta verzije RunAsUserName za prozore;
sličnu promjenu zadesilo EndpointSlice API (također iz K8s 1.16), međutim za sada ovo rješenje za poboljšanje performansi/skalabilnosti Endpoint API-ja nije omogućeno prema zadanim postavkama;