Kubernetes 1.17: Najvažnije o tome šta je novo

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.

Kubernetes 1.17: Najvažnije o tome šta je novo

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;
  • ...

Takvo usmjeravanje, koje "zna" o topologiji, naziva se i mrežnim afinitetom - po analogiji sa afinitet čvora, pod afinitet/anti-afinitet ili se pojavio ne tako davno Raspored volumena svjesnog topologije (i Volume Provisioning). Trenutni nivo implementacije ServiceTopology u Kubernetesu - alfa verzija.

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.PodIPs pojavila 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;
  • ažurirani e2e testovi.

Kubernetes 1.17: Najvažnije o tome šta je novo
Ilustracija koristeći dual stack IPV4/IPv6 u KIND

Napredak na CSI

Proglašeno stabilnim podrška za topologiju za CSI baziranu pohranu, prvi put predstavljen u K8s 1.12.

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:

Kubernetes 1.17: Najvažnije o tome šta je novo

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):

  • beta.kubernetes.io/instance-typenode.kubernetes.io/instance-type
  • failure-domain.beta.kubernetes.io/zonetopology.kubernetes.io/zone
  • failure-domain.beta.kubernetes.io/regiontopology.kubernetes.io/region

... 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.

Strukturirani izlaz kubeadm-a

Prvi put predstavljen u alfa verziji strukturirani izlaz za kubeadm uslužni program. Podržani formati: JSON, YAML, Go šablon.

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:

{
  "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": "The default bootstrap token generated by 'kubeadm init'.",
    "extraGroups": [
      "system:bootstrappers:kubeadm:default-node-token"
    ]
  },
  "raw": "Rm9yIHRoZSBhY3R1YWwgb3V0cHV0IG9mIHRoZSAia3ViZWFkbSBpbml0IiBjb21tYW5kLCBwbGVhc2Ugc2VlIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2FrdXR6LzdhNjg2ZGU1N2JmNDMzZjkyZjcxYjZmYjc3ZDRkOWJhI2ZpbGUta3ViZWFkbS1pbml0LW91dHB1dC1sb2c="
}

Stabilizacija ostalih inovacija

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:

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):

  • Funkcija predstavljena u posljednjem izdanju dostigla je beta verziju RunAsUserName za prozore;
  • 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;
  • podovi su sada kritični za rad klastera može se kreirati ne samo u imenskim prostorima kube-system (za detalje pogledajte dokumentaciju za Ograničite potrošnju klase prioriteta);
  • nova opcija za kubelet - --reserved-cpus — omogućava vam da eksplicitno definišete listu CPU-a rezervisanih za sistem;
  • do kubectl logs predstavljen nova zastava --prefix, dodavanje imena pod i izvornog kontejnera u svaki red dnevnika;
  • в label.Selector dodano RequiresExactMatch;
  • svi kontejneri u kube-dns sada rade sa manje privilegija;
  • hyperkube odvojeno u zasebno GitHub spremište i više neće biti uključeno u Kubernetes izdanja;
  • mnogo poboljšane performanse kube-proxy za ne-UDP portove.

Promjene ovisnosti:

  • CoreDNS verzija uključena u kubeadm je 1.6.5;
  • crictl verzija ažurirana na v1.16.1;
  • CSI 1.2.0;
  • etcd 3.4.3;
  • Najnovija testirana verzija Dockera nadograđena na 19.03;
  • Minimalna Go verzija potrebna za pravljenje Kubernetesa 1.17 je 1.13.4.

PS

Pročitajte i na našem blogu:

izvor: www.habr.com

Dodajte komentar