Kubernetes 1.17: prehľad hlavných inovácií

Včera, 9. decembra, uskutočnilo sa ďalšie vydanie Kubernetes - 1.17. Podľa tradície, ktorá sa pre náš blog vytvorila, hovoríme o najvýznamnejších zmenách v novej verzii.

Kubernetes 1.17: prehľad hlavných inovácií

Informácie použité na prípravu tohto materiálu sú prevzaté z oficiálneho oznámenia, Tabuľky sledovania vylepšení Kubernetes, ZMENA-1.17 a súvisiace problémy, žiadosti o stiahnutie a návrhy na vylepšenie Kubernetes (KEP). Tak čo je nové?..

Smerovanie s ohľadom na topológiu

Komunita Kubernetes čakala na túto funkciu už dlho - Smerovanie služby s ohľadom na topológiu, ak CAP má pôvod v októbri 2018 a oficial zvýšenie — Pred 2 rokmi bežné problémy (Páči sa mi to to) - a ešte o pár rokov starší...

Všeobecnou myšlienkou je poskytnúť možnosť implementovať „miestne“ smerovanie pre služby nachádzajúce sa v Kubernetes. „Lokalita“ v tomto prípade znamená „rovnaká topologická úroveň“ (úroveň topológie), čo môže byť:

  • uzol identický pre služby,
  • rovnaký serverový stojan,
  • ten istý región
  • ten istý cloudový poskytovateľ,
  • ...

Príklady použitia tejto funkcie:

  • úspora prevádzky v cloudových inštaláciách s viacerými zónami dostupnosti (multi-AZ) - viď. svieža ilustrácia na príklade prevádzky z rovnakého regiónu, ale rôznych AZ v AWS;
  • nižšia latencia výkonu/lepšia priepustnosť;
  • zdieľaná služba, ktorá má miestne informácie o uzle v každom zlomku;
  • umiestnenie plynule (alebo analógov) na rovnaký uzol s aplikáciami, ktorých záznamy sa zhromažďujú;
  • ...

Takéto smerovanie, ktoré „vie“ o topológii, sa nazýva aj sieťová afinita – analogicky s afinita uzlov, struková afinita/antiafinita alebo sa objavil nie tak dávno Plánovanie zväzkov podľa topológie (a Poskytovanie objemu). Súčasná úroveň implementácie ServiceTopology v Kubernetes - alfa verzii.

Podrobnosti o tom, ako funkcia funguje a ako ju už môžete používať, si prečítajte v tomto článku od jedného z autorov.

Podpora duálneho zásobníka IPv4/IPv6

Výrazný pokrok pevné v ďalšej sieťovej funkcii: súčasná podpora pre dva zásobníky IP, ktorá bola prvýkrát predstavená v r K8s 1.16. Nové vydanie prinieslo najmä tieto zmeny:

  • v kube-proxy implementovaná možnosť súčasnej prevádzky v oboch režimoch (IPv4 a IPv6);
  • в Pod.Status.PodIPs objavil podpora downward API (v rovnakom čase ako v /etc/hosts teraz vyžadujú, aby hostiteľ pridal adresu IPv6);
  • podpora dvojitého zásobníka KIND (Kubernetes IN Docker) a kubeadm;
  • aktualizované testy e2e.

Kubernetes 1.17: prehľad hlavných inovácií
ilustrácie pomocou dual stack IPV4/IPv6 v KIND

Pokrok v CSI

Vyhlásený za stabilný podpora topológie pre úložisko založené na CSI, prvýkrát predstavené v r K8s 1.12.

Iniciatíva za migrácia volume pluginov do CSI - CSI Migrácia - dosiahnutá beta verzia. Táto funkcia je dôležitá na preklad existujúcich doplnkov ukladacieho priestoru (v strome) na moderné rozhranie (CSI, mimo stromu) neviditeľné pre koncových používateľov Kubernetes. Správcovia klastra budú musieť povoliť migráciu CSI, po ktorej budú existujúce stavové zdroje a pracovné zaťaženia naďalej „len fungovať“... ale s použitím najnovších ovládačov CSI namiesto zastaraných ovládačov zahrnutých v jadre Kubernetes.

Momentálne je pripravená migrácia pre ovládače AWS EBS v beta verzii (kubernetes.io/aws-ebs) a GCE PD (kubernetes.io/gce-pd). Prognózy pre ostatné skladovacie zariadenia sú nasledovné:

Kubernetes 1.17: prehľad hlavných inovácií

Hovorili sme o tom, ako „tradičná“ podpora úložiska v K8 prišla do CSI v tomto článku. A prechodu migrácie CSI do stavu beta je venovaný samostatná publikácia na blogu projektu.

Okrem toho ďalšia významná funkcionalita v kontexte CSI, ktorá pochádza (implementácia alfa) v K1.17s 8, dosiahla stav beta (t. j. predvolene povolená) vo vydaní Kubernetes 1.12 – vytváranie snímok a zotavenie z nich. Medzi zmenami vykonanými v Kubernetes Volume Snapshot na ceste k vydaniu beta:

  • rozdelenie postranného vozíka CSI s externým snímaním na dva ovládače,
  • pridané tajomstvo na vymazanie (tajné vymazanie) ako anotáciu obsahu snímky zväzku,
  • nový finalizátor (finalizátor) aby sa zabránilo vymazaniu objektu API snímky, ak existujú zostávajúce pripojenia.

V čase vydania 1.17 túto funkciu podporujú tri ovládače CSI: ovládač GCE Persistent Disk CSI Driver, ovládač Portworx CSI a ovládač NetApp Trident CSI. Viac podrobností o jeho implementácii a použití nájdete v túto publikáciu na blogu.

Štítky poskytovateľa cloudu

Štítky, ktoré automaticky priradené k vytvoreným uzlom a zväzkom v závislosti od použitého poskytovateľa cloudu, sú dostupné v Kubernetes ako beta verzia už veľmi dlho - od vydania K8s 1.2 (apríl 2016!). Vzhľadom na ich rozšírené používanie tak dlho, vývojári rozhodol, že je čas prehlásiť funkciu za stabilnú (GA).

Preto boli všetky podľa toho premenované (podľa topológie):

  • 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

... sú však stále dostupné pod starými názvami (kvôli spätnej kompatibilite). Všetkým správcom sa však odporúča prejsť na aktuálne štítky. Súvisiaca dokumentácia K8s bol aktualizovaný.

Štruktúrovaný výstup kubeadm

Prvýkrát prezentované v alfa verzii štruktúrovaný výstup pre obslužný program kubeadm. Podporované formáty: JSON, YAML, šablóna Go.

Motivácia pre implementáciu tejto funkcie (podľa CAP) je:

Kým Kubernetes je možné nasadiť manuálne, de facto (ak nie de jure) štandardom pre túto operáciu je použitie kubeadm. Populárne nástroje na správu systémov, ako je Terraform, sa pri nasadení Kubernetes spoliehajú na kubeadm. Plánované vylepšenia rozhrania Cluster API zahŕňajú zostaviteľný balík pre bootstrapping Kubernetes s kubeadm a cloud-init.

Bez štruktúrovaného výstupu môžu aj tie najneškodnejšie zmeny na prvý pohľad zlomiť Terraform, Cluster API a ďalší softvér, ktorý využíva výsledky kubeadm.

Naše bezprostredné plány zahŕňajú podporu (vo forme štruktúrovaného výstupu) pre nasledujúce príkazy kubeadm:

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

Ilustrácia odpovede JSON na príkaz 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="
}

Stabilizácia ďalších inovácií

Vo všeobecnosti sa vydanie Kubernetes 1.17 uskutočnilo pod mottom „stabilita" To bolo uľahčené skutočnosťou, že v ňom je veľa funkcií (ich celkový počet je 14) získal status GA. Medzi nimi:

Ďalšie zmeny

Úplný zoznam inovácií v Kubernetes 1.17 sa samozrejme neobmedzuje na tie, ktoré sú uvedené vyššie. Tu sú niektoré ďalšie (a úplnejší zoznam nájdete v časti ZMENY):

  • Funkcia uvedená v poslednom vydaní sa dostala do beta verzie RunAsUserName pre okná;
  • podobná zmena postihlo EndpointSlice API (tiež od K8s 1.16), avšak zatiaľ toto riešenie na zlepšenie výkonu/škálovateľnosti Endpoint API nie je predvolene povolené;
  • pody sú teraz kritické pre prevádzku klastra môžu byť vytvorené nielen v menných priestoroch kube-system (podrobnosti nájdete v dokumentácii k Obmedzte spotrebu prioritnej triedy);
  • nová možnosť pre kubelet - --reserved-cpus — umožňuje vám explicitne definovať zoznam CPU rezervovaných pre systém;
  • pre kubectl logs predložené nová vlajka --prefix, pridanie názvu pod a zdrojového kontajnera do každého riadku denníka;
  • в label.Selector dodal RequiresExactMatch;
  • všetky kontajnery v kube-dns teraz bežia s menšími privilégiami;
  • hyperkube oddelené do samostatného úložiska GitHub a už nebudú zahrnuté vo vydaniach Kubernetes;
  • veľa vylepšený výkon kube-proxy pre non-UDP porty.

Zmeny závislosti:

  • Verzia CoreDNS zahrnutá v kubeadm je 1.6.5;
  • critl verzia aktualizovaná na v1.16.1;
  • CSI 1.2.0;
  • etcd 3.4.3;
  • Najnovšia testovaná verzia Dockeru bola inovovaná na 19.03;
  • Minimálna verzia Go potrebná na zostavenie Kubernetes 1.17 je 1.13.4.

PS

Prečítajte si aj na našom blogu:

Zdroj: hab.com

Pridať komentár