Kubernetes 1.17: pregled glavnih novosti

Jučer, 9. prosinca, održan je došlo je do još jednog izdanja Kubernetes-a — 1.17. U skladu s tradicijom našeg bloga, prikazujemo najznačajnije promjene u novoj verziji.

Kubernetes 1.17: pregled glavnih novosti

Informacije korištene za pripremu ovog materijala preuzete su iz službenog najave, tablica praćenja poboljšanja Kubernetes-a, CHANGELOG-1.17 te odgovarajućih issue-a, pull request-a, kao i Kubernetes Enhancement Proposals (KEP). Dakle, što je novo?..

Routiranje uzimajući u obzir topologiju

Već dugo u Kubernetes zajednici očekivali su ovu funkcionalnost — Routanje usluga uzimajući u obzir topologiju. Ako KEP počelo je u listopadu 2018., a službeno poboljšanje — prije 2 godine, a obični issue-i (poput ovoga) — zapravo su stariji još nekoliko godina...

Opća ideja je pružiti mogućnost implementacije "lokalnog" rutiranja za usluge unutar Kubernetes-a. "Lokalnost" u ovom slučaju označava "isti topološki nivo" (topology level), koji može biti:

  • isti čvor za usluge,
  • ista serverska ormarića,
  • isti regija,
  • isti pružatelj oblaka,
  • …

Primjeri korištenja ove funkcionalnosti:

  • ušteda na prometu u oblačnim instalacijama s više dostupnih zona (multi-AZ) — vidi. novu ilustraciju na primjeru prometa jedne regije, ali različitih AZ u AWS-u;
  • niže latencije u performansama/bolja propusnost;
  • shardani servis s lokalnim informacijama o čvoru u svakom shardu;
  • smještanje fluentd (ili sličnih rješenja) na jedan čvor s aplikacijama čiji se logovi prikupljaju;
  • …

Ova "tople" rutacija također se naziva network affinity — analogno node affinity, pod affinity/anti-affinity ili nedavno uvedenom Topology-Aware Volume Scheduling Volume Provisioning (i ). Trenutna razina implementacijeServiceTopology u Kubernetes-u — alfa-verzija. Više informacija o tome kako je funkcionalnost postavljena i kako je već možete koristiti, pročitajte u

od jednog od autora. ovom članku Podrška za dvostruki stog IPv4/IPv6

Značan napredak

zabilježen je u drugoj mrežnoj funkcionalnosti: istovremenoj podršci za dva IP stoga, koja je prvi put predstavljena u K8s 1.16 . Konkretno, novo izdanje donijelo je sljedeće promjene:u kube-proxy

  • mogućnost istovremeno rada u oba moda (IPv4 i IPv6); implementirano je Pod.Status.PodIPs
  • u podrška downward API (istovremeno s tim u dodana je sada zahtijevaju dodavanje i IPv6 adrese); /etc/hosts podrška za dva stoga u
  • KIND (Kubernetes IN Docker) i a ažurirani e2e testovi. kubeadm;
  • ažurirani e2e testovi.

Kubernetes 1.17: pregled glavnih novosti
Ilustracija korištenje duple stack IPv4/IPv6 u KIND

Napredak u CSI-ju

Proglašeno stabilnim podrška topologijama za pohranu na bazi CSI, prvi put predstavljena u K8s 1.12.

Inicijativa za migraciju volumnog plugina na CSI — CSI migracija — postigla beta-izdanje. Ova funkcionalnost je ključna za prijenos postojećih pohrana (in-tree) na suvremeni sučelje (CSI, van-drve) neprimjetno za krajnje korisnike Kubernetesa. Administratorima klastera bit će dovoljno aktivirati CSI migraciju, nakon čega će postojeći stateful-resursi i radna opterećenja i dalje "samo raditi"… ali sada uz korištenje aktualnih CSI drajvera umjesto zastarjelih, koji su uključeni u jezgru Kubernetesa.

Trenutno je u beta-izdanju dostupna migracija za Amazon EBS drajvere (kubernetes.io/aws-ebs) i GCE PD (kubernetes.io/gce-pd). Prognoze za druga pohrane su sljedeće:

Kubernetes 1.17: pregled glavnih novosti

O tome kako je "tradicionalna" podrška pohrana u K8s prešla na CSI, govorili smo u ovom članku. A prelasku CSI migracije u beta-status posvećen je odvojeni članak na blogu projekta.

Osim toga, beta-status (tj. uključivanje prema zadanom) u izdanju Kubernetesa 1.17 postigla je druga značajna funkcionalnost u kontekstu CSI, koja započinje (alpha-izvedba) u K8s 1.12, — izrada snimaka i obnova iz njih. Među promjenama, izvedenim u Kubernetes Volume Snapshot na putu do beta-izdanja:

  • razdvajanje sidecar-a CSI external-snapshotter na dva kontrolera,
  • dodana tajna za brisanje (deletion secret) kao anotacija za sadržaj snimke volumena,
  • novi finalizator (finalizer) za sprečavanje brisanja API-objekta snimke u prisutnosti preostalih veza.

U trenutku izdanja 1.17, funkcionalnost se podržava kod tri CSI drajvera: GCE Persistent Disk CSI Driver, Portworx CSI Driver i NetApp Trident CSI Driver. Više o njenoj provedbi i korištenju možete pročitati u ovoj publikaciji na blogu.

Oznake dobavljača oblaka

Oznake koje se automatski dodjeljuju na stvorene čvorove i volumene ovisno o korištenom cloud dobavljaču, bile su dostupne u Kubernetesa kao beta-verzija već jako dugo — od izdanja K8s 1.2 (travanjs 2016!). Uzimajući u obzir njihovu široku primjenu tijekom tako dugo vremena, programeri odlučili su, da je došlo vrijeme da se funkcionalnost proglasi stabilnom (GA).

Stoga su svi oni preimenovani u skladu s tim (prema topologijama):

  • beta.kubernetes.io/instance-type → node.kubernetes.io/instance-type
  • failure-domain.beta.kubernetes.io/zone → topology.kubernetes.io/zone
  • failure-domain.beta.kubernetes.io/region → topology.kubernetes.io/region

… ali su i dalje dostupna pod svojim starim nazivima (za povratnu kompatibilnost). Međutim, svim administratorima se preporučuje prelazak na ažurirane oznake. Povezana dokumentacija K8s je ažuriran.

Strukturirani izlaz kubeadm

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

Motivacija za implementaciju ove funkcije (prema KEP) je sledeća:

Iako se Kubernetes može ručno postaviti, de facto (ako ne i de jure) standard za ovu operaciju je korišćenje kubeadm-a. Popularni alati za upravljanje sistemima kao što je Terraform oslanjaju se na kubeadm za postavljanje Kubernetesa. Planirana poboljšanja u Cluster API uključuju kompaktni paket za bootstrapping Kubernetesa sa kubeadm-om i cloud-init.

Bez strukturiranog izlaza, čak i naizgled bezopasne promene mogu slomiti Terraform, Cluster API i druge softvere koji koriste rezultate rada kubeadm-a.

U bliskoj budućnosti planira se podrška (u obliku strukturiranog izlaza) za sledeće komande kubeadm:

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

Ilustracija JSON odgovora na komandu 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": "Podrazumevani bootstrap token generisan od 'kubeadm init'.",
    "extraGroups": [
      "system:bootstrappers:kubeadm:default-node-token"
    ]
  },
  "raw": "Rm9yIHRoZSBhY3R1YWwgb3V0cHV0IG9mIHRoZSAia3ViZWFkbSBpbml0IiBjb21tYW5kLCBwbGVhc2Ugc2VlIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2FrdXR6LzdhNjg2ZGU1N2JmNDMzZjkyZjcxYjZmYjc3ZDRkOWJhI2ZpbGUta3ViZWFkbS1pbml0LW91dHB1dC1sb2c="
}

Stabilizacija drugih novina

Uopšte, izdanje Kubernetesa 1.17 održano je pod sloganom „Stabilnost”. To je olakšano tim što je veoma mnogo funkcija u njemu (ukupan broj — 14) dobilo GA status. Među njima:

Ostale izmjene

Cjelovit popis noviteta u Kubernetes 1.17, naravno, ne ograničava se na navedene iznad. Evo nekoliko drugih (a za potpuniji popis — vidi CHANGELOG):

  • do beta verzije "proširila" predstavljena u prošlom izdanju funkcionalnost RunAsUserName za Windows;
  • analogna promjena stigla je EndpointSlice API (također iz K8s 1.16), međutim ovo rješenje za poboljšanje performansi/skalabilnosti Endpoint API-ja zasada nije aktivirano po zadanim postavkama;
  • kritični podovi za rad klastera sada mogu biti kreirani ne samo u prostorima imena kube-system (detalje vidi u dokumentaciji o Limit Priority Class consumption);
  • nova opcija za kubelet — --reserved-cpus — omogućuje izričito definiranje popisa CPU-a rezerviranih za sustav;
  • za kubectl logs predstavljen nova zastavica --prefix, koja dodaje naziv pod-a i izvornog kontejnera svakoj liniji loga;
  • u label.Selector dodali su RequiresExactMatch;
  • svi kontejneri u kube-dns sada se pokreću s manjim privilegijama;
  • hyperkube izdvojen je u zasebni GitHub-ov repozitorij i više neće biti uključen u izdanja Kubernetes-a;
  • značajno poboljšana performansa kube-proxy za ne-UDP portove.

Izmjene u zavisnostima:

  • verzija CoreDNS u sklopu kubeadm — 1.6.5;
  • verzija crictl ažurirana na v1.16.1;
  • CSI 1.2.0;
  • etcd 3.4.3;
  • posljednja provjerena verzija Dockera povećana na 19.03;
  • minimalna verzija Go, potrebna za izgradnju Kubernetes 1.17, je 1.13.4.

P.S.

Pročitajte i na našem blogu:

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster