Kubernetes 1.17: Istaknuto što je novo

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.

Kubernetes 1.17: Istaknuto što je novo

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

Takvo usmjeravanje, koje "zna" za topologiju, također se naziva mrežni afinitet - analogno s afinitet čvora, mahuna afinitet/anti-afinitet ili se pojavio ne tako davno Zakazivanje volumena s obzirom na topologiju (i Opskrba volumena). Trenutačni stupanj implementacije ServiceTopology u Kubernetesu - alfa verzija.

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

Kubernetes 1.17: Istaknuto što je novo
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:

Kubernetes 1.17: Istaknuto što je novo

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

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

Strukturirani izlaz kubeadm-a

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

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:

{
  "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, 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:

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;
  • mahune su sada kritične za rad klastera može se stvoriti 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ćuje vam eksplicitno definiranje popisa CPU-a rezerviranih za sustav;
  • za kubectl logs predstavio nova zastava --prefix, dodavanje naziva modula i izvornog spremnika u svaki red dnevnika;
  • в label.Selector dodano RequiresExactMatch;
  • svi spremnici u kube-dns sada trče s manje privilegija;
  • hiperkuba odvojeni u zasebno GitHub spremište i više neće biti uključeni u izdanja Kubernetesa;
  • mnogo poboljšana produktivnost kube-proxy za ne-UDP priključke.

Promjene ovisnosti:

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

PS

Pročitajte i na našem blogu:

Izvor: www.habr.com

Dodajte komentar