Kubernetes 1.17: pregled glavnih novosti

Včeraj, 9. decembra, potekal naslednja izdaja Kubernetesa - 1.17. Po tradiciji, ki se je razvila za naš blog, govorimo o najpomembnejših spremembah v novi različici.

Kubernetes 1.17: pregled glavnih novosti

Podatki, uporabljeni za pripravo tega gradiva, so vzeti iz uradne objave, Tabele za sledenje izboljšav Kubernetes, DNEVNIK SPREMEMB-1.17 in sorodna vprašanja, zahteve za vlečenje in predloge za izboljšavo Kubernetes (KEP). Torej kaj je novega?..

Usmerjanje, ki upošteva topologijo

Skupnost Kubernetes je dolgo čakala na to funkcijo - Usmerjanje storitev, ki upošteva topologijo. Če KEP izvira iz oktobra 2018 in uradno Izboljšave — Pred 2 leti, običajne težave (kot je) - in še nekaj let starejši...

Splošna zamisel je zagotoviti možnost izvajanja "lokalnega" usmerjanja za storitve, ki se nahajajo v Kubernetesu. "Lokalnost" v tem primeru pomeni "isto topološko raven" (raven topologije), ki je lahko:

  • vozlišče identično za storitve,
  • isto strežniško omaro,
  • isto regijo
  • isti ponudnik oblaka,
  • ...

Primeri uporabe te funkcije:

  • prihranek prometa v namestitvah v oblaku z več območji razpoložljivosti (multi-AZ) - glej. sveža ilustracija na primeru prometa iz iste regije, vendar različnih AZ v AWS;
  • manjša zakasnitev delovanja/boljša prepustnost;
  • razdeljena storitev, ki ima lokalne informacije o vozlišču v vsakem drobcu;
  • postavitev fluentd (ali analogov) na isto vozlišče z aplikacijami, katerih dnevniki se zbirajo;
  • ...

Takšno usmerjanje, ki "ve" za topologijo, imenujemo tudi omrežna afiniteta - po analogiji z afiniteta vozlišča, strok afiniteta/anti-afiniteta ali pojavil ne tako dolgo nazaj Razporejanje nosilcev, ki upošteva topologijo (in Zagotavljanje nosilca). Trenutna stopnja izvajanja ServiceTopology v različici Kubernetes - alfa.

Za podrobnosti o tem, kako funkcija deluje in kako jo že lahko uporabljate, preberite ta članek od enega od avtorjev.

Podpora za dvojni sklad IPv4/IPv6

Pomemben napredek fiksno v drugi omrežni funkciji: hkratna podpora za dva sklada IP, ki je bila prvič predstavljena l K8s 1.16. Zlasti nova izdaja je prinesla naslednje spremembe:

  • v kube-proxy izvajati možnost hkratnega delovanja v obeh načinih (IPv4 in IPv6);
  • в Pod.Status.PodIPs pojavil podpora za API navzdol (istočasno kot v /etc/hosts zdaj zahtevajo, da gostitelj doda naslov IPv6);
  • podpora za dvojni sklad KIND (Kubernetes IN Docker) in kubeadm;
  • posodobljeni testi e2e.

Kubernetes 1.17: pregled glavnih novosti
Ilustracija z uporabo dvojnega sklada IPV4/IPv6 v KIND

Napredek pri CSI

Razglašeno za stabilno topološka podpora za shranjevanje na osnovi CSI, ki je bilo prvič predstavljeno l K8s 1.12.

Pobuda za selitev vtičnikov glasnosti v CSI - Migracija CSI - dosežena različica beta. Ta funkcija je ključnega pomena za prevajanje obstoječih vtičnikov za shranjevanje (v drevesu) na sodoben vmesnik (CSI, zunaj drevesa) neviden končnim uporabnikom Kubernetes. Skrbniki gruče bodo morali samo omogočiti migracijo CSI, po kateri bodo obstoječi viri in delovne obremenitve s stanjem še naprej »samo delovali« ... vendar z uporabo najnovejših gonilnikov CSI namesto zastarelih, vključenih v jedro Kubernetes.

Trenutno je migracija za gonilnike AWS EBS pripravljena v različici beta (kubernetes.io/aws-ebs) in GCE PD (kubernetes.io/gce-pd). Napovedi za ostala skladišča so naslednje:

Kubernetes 1.17: pregled glavnih novosti

Govorili smo o tem, kako je "tradicionalna" podpora za shranjevanje v K8 prišla v CSI ta članek. In temu je posvečen prehod migracije CSI na stanje beta ločena objava na blogu projekta.

Poleg tega je druga pomembna funkcionalnost v kontekstu CSI, ki izvira (izvedba alfa) v K1.17s 8, dosegla stanje beta (tj. privzeto omogočeno) v izdaji Kubernetes 1.12 – ustvarjanje posnetkov in okrevanje po njih. Med spremembami Kubernetes Volume Snapshot na poti do izdaje beta:

  • razdelitev stranske prikolice CSI z zunanjim posnetkom na dva krmilnika,
  • dodana skrivnost za brisanje (skrivnost izbrisa) kot opombo k vsebini posnetka nosilca,
  • nov finalizator (finalizator) da preprečite brisanje objekta API posnetka, če obstajajo preostale povezave.

V času izdaje 1.17 funkcijo podpirajo trije gonilniki CSI: gonilnik GCE Persistent Disk CSI, gonilnik Portworx CSI in gonilnik NetApp Trident CSI. Več podrobnosti o njegovi izvedbi in uporabi najdete v ta publikacija na blogu.

Oznake ponudnika oblaka

To samodejno označi dodeljena ustvarjenim vozliščem in nosilcem glede na uporabljenega ponudnika oblaka, so v Kubernetesu na voljo kot različica beta že zelo dolgo – od izdaje K8s 1.2 (april 2016!). Glede na njihovo tako dolgo razširjeno uporabo razvijalci odločil, da je čas, da funkcijo razglasite za stabilno (GA).

Zato so bili vsi ustrezno 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

... vendar so še vedno na voljo pod starimi imeni (zaradi združljivosti za nazaj). Vsem skrbnikom pa priporočamo, da preidejo na trenutne oznake. Povezana dokumentacija K8s je posodobljen.

Strukturiran izhod kubeadm

Prvič predstavljen v alfa različici strukturiran izhod za pripomoček kubeadm. Podprti formati: JSON, YAML, Go template.

Motivacija za izvajanje te funkcije (glede na KEP) je:

Medtem ko je mogoče Kubernetes razmestiti ročno, je de facto (če ne de jure) standard za to operacijo uporaba kubeadm. Priljubljena orodja za upravljanje sistemov, kot je Terraform, se za uvajanje Kubernetes zanašajo na kubeadm. Načrtovane izboljšave API-ja Cluster vključujejo sestavljiv paket za zagon Kubernetes s kubeadm in cloud-init.

Brez strukturiranega izhoda lahko tudi na prvi pogled najbolj neškodljive spremembe pokvarijo Terraform, Cluster API in drugo programsko opremo, ki uporablja rezultate kubeadm.

Naši takojšnji načrti vključujejo podporo (v obliki strukturiranega izhoda) za naslednje ukaze kubeadm:

  • alpha certs
  • config images list
  • init
  • token create
  • token list
  • upgrade plan
  • version

Ilustracija odgovora JSON na ukaz 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 drugih inovacij

Na splošno je izdaja Kubernetes 1.17 potekala pod geslom "Stabilnost" To je olajšalo dejstvo, da je v njem veliko funkcij (njihovo skupno število je 14) prejel status GA. Med njimi:

Druge spremembe

Celoten seznam novosti v Kubernetesu 1.17 seveda ni omejen na zgoraj navedene. Tukaj je nekaj drugih (in za popolnejši seznam glejte KANGELOG):

  • Funkcija, predstavljena v zadnji izdaji, je dosegla različico beta RunAsUserName za okna;
  • podobna sprememba doletel API EndpointSlice (tudi od K8s 1.16), vendar za zdaj ta rešitev za izboljšanje zmogljivosti/razširljivosti API-ja Endpoint ni privzeto omogočena;
  • pods so zdaj kritični za delovanje gruče se lahko ustvari ne le v imenskih prostorih kube-system (za podrobnosti glejte dokumentacijo za Omejite porabo prednostnega razreda);
  • nova možnost za kubelet - --reserved-cpus — omogoča eksplicitno določitev seznama procesorjev, rezerviranih za sistem;
  • za kubectl logs predstavljeno nova zastava --prefix, dodajanje imena stroka in izvornega vsebnika v vsako vrstico dnevnika;
  • в label.Selector dodano RequiresExactMatch;
  • vsi vsebniki v kube-dns zdaj tečejo z manj privilegiji;
  • hiperkube ločeno v ločenem repozitoriju GitHub in ne bo več vključeno v izdaje Kubernetes;
  • veliko izboljšano delovanje kube-proxy za vrata, ki niso UDP.

Spremembe odvisnosti:

  • Različica CoreDNS, vključena v kubeadm, je 1.6.5;
  • različica crictl posodobljena na v1.16.1;
  • CSI 1.2.0;
  • etcd 3.4.3;
  • Najnovejša testirana različica Dockerja je nadgrajena na 19.03;
  • Najmanjša različica Go, potrebna za izdelavo Kubernetes 1.17, je 1.13.4.

PS

Preberite tudi na našem blogu:

Vir: www.habr.com

Dodaj komentar