Kubernetes 1.17: ülevaade peamistest uuendustest

Eile, 9. detsember, toimus ilmus uus kubernetese versioon — 1.17. Meie blogi traditsiooni kohaselt räägime me olulisimatest muudatustest uues versioonis.

Kubernetes 1.17: ülevaade peamistest uuendustest

Selle materjali koostamiseks kasutatud teave on saadud ametlikust teadaandest, Kubernetes'i täiustuste jälgimise tabelist, CHANGELOG-1.17 ja vastavatest probleemidest, tõmbepäringutest ning Kubernetes Enhancement Proposals (KEP). Nii et, mis on uut?..

Teadlikkusega topoloogiline marsruutimine

On kaua oodatud, et see funktsioon ilmuks Kubernetes'i kogukonnas — Topology-aware service routing. Kui KEP tuleb alguses 2018. aasta oktoobrist, ja ametlik enhancement — 2 aastat tagasi, seega tavalised probleemid (näiteks sellest) — on veel vanemad…

Üldine idee on võimaldada «kohalikku» marsruutimist teenuste jaoks, mis asuvad Kubernetes'is. «Kohalik» tähistab siinkohal «sama topoloogilist taset» (topology level), milleks võivad olla:

  • sama sõlm teenustele,
  • sama serveririiul,
  • sama piirkond,
  • sama pilveteenuse pakkuja,

Selle funktsiooni kasutamise näited:

  • kulusäästlikkus pilvepaigaldustes, kus on mitu kättesaadavustsooni (multi-AZ) — vt. uus illustreerimine näiteks ühe piirkonna liikluse põhjal, kuid erinevates AZ-s AWS-is;
  • madalamad latentsused / parem läbilaskevõime;
  • shardimise teenus, mis omab lokaalset teavet sõlme iga shard-i kohta;
  • fluentd (või analoogide) paigutamine ühte sõlme koos rakendustega, mille logisid kogutakse;

Sellist marsruutimist, mis "teab" topoloogiast, kutsutakse mõnikord ka network affinity sarnaseks — analoogia järgi node affinity, pod affinity/anti-affinity või viimase ajal toimunud äraldi Topology-Aware Volume Scheduling (ja Volume Provisioning). Praegune teostuse tase ServiceTopology Kubernetes-is — alfa-versioon.

Detailsed teavet funktsiooni toimimise ja selle kasutamise kohta leiate selles artiklis ühe autori poolt.

Kaksiksteeki IPv4/IPv6 tugi

Oluline edasiminek on fikseeritud teises võrgu funktsioonis: kahe IP-steki samaaegne tugi, mis esmakordselt esitati K8s 1.16. Eelkõige tõi uus väljaanne kaasa järgmised muudatused:

  • kube-proxy-s on rakendatud võimalus töötada mõlemas režiimis (IPv4 ja IPv6);
  • ühes Pod.Status.PodIPs ilmus downward API tugi (sama ajal kui nüüd nõutakse, et host lisaks ka IPv6-aadressi); /etc/hosts kahe steki tugi
  • (Kubernetes IN Docker) ja KIND uuendatud e2e-testid. kubeadm'ile.;
  • обновлённые e2e-тесты.

Kubernetes 1.17: ülevaade peamistest uuendustest
Illustratsioon duble staki IPV4/IPv6 kasutamine KINDis

CSI edusammud

Tõendatud stabiilsena topoloogiate tugi CSI-põhiste salvestuste jaoks, mida esmakordselt tutvustati K8s 1.12.

Algatus mahuplokkide migreerimiseks CSI-leCSI migratsioon on saavutanud beetaversiooni. See funktsioon on kriitilise tähtsusega olemasolevate salvestuste pluginite viimiseks (in-tree) kaasaegsele liidesele (CSI, out-of-tree) Kubernetesi lõppkasutajatele märkamatult. Klusteri administraatoritel on piisav CSI migratsiooni aktiveerimine, pärast mida olemasolevad stateful-ressursid ja töökoormused jätkavad „lihtsalt töötamist“… kuid nüüd on kasutusel ajakohased CSI-juhtmet, mitte vananenud, tuumaosas sisalduvad Kubernetes.

Praeguseks on beetaversioonis valmis migratsioon AWS EBS juhtmetele (kubernetes.io/aws-ebs) ja GCE PD-le (kubernetes.io/gce-pd). Teiste salvestuste prognoosid on järgmised:

Kubernetes 1.17: ülevaade peamistest uuendustest

Kuidas „traditsiooniline“ salvestuste tugi K8s jõudis CSI-ni, rääkisime me selles artiklis. CSI migratsiooni beetaversiooniks muutmisele pühendatud eraldi väljaanne projekti blogis.

Lisaks saidi Kubernetes 1.17 beetaversiooni staatusele (st vaikimisi lubamine) on CSI kontekstis jõudnud beta-ulevaatele teine oluline funktsionaalsus, mis sai alguse (alfa-implementatsioonist) K8s 1.12 — snapshot'ide loomine ja nende taastamine. Kubernetes Volume Snapshot'i teekonna muudatuste seas beta-ulevatele:

  • CSI external-snapshotter sidecar'i jagamine kaheks kontrolleriks,
  • lisatud kustutamise saladus (deletion secret) kui annotatsioon mahuti snapshot'i sisu juurde,
  • uus finilisaator (finalizer) API-objekti snapshot'i kustutamise vältimiseks, kui on alles seosed.

Versioonis 1.17 toetab seda funktsiooni kolm CSI-draiverit: GCE Persistent Disk CSI Driver, Portworx CSI Driver ja NetApp Trident CSI Driver. Rohkem teavet selle rakendamise ja kasutamise kohta leiate selles publikatsioonis blogist.

Pilveteenuse pakkuja sildid

Sildid, mis määratakse automaatselt loodud sõlmedele ja mahutitele vastavalt kasutatavale pilveteenuse pakkujale, on Kubernetes'is olnud beetaversioonina juba väga pikka aega — alates K8s 1.2 väljalaskest (aprill 2016!). Arvestades nende laialdast kasutamist nii kaua, otsustasid arendajad et on aeg tunnistada funktsiooni stabiilseks (GA)., что настало время объявить фичу стабильной (GA).

Seega on nad kõik vastavalt ümbernimetatud (topoloogiate järgi):

  • 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

… kuid on endiselt saadaval ka oma vanade nimede kaudu (tagurpidi ühilduvuse jaoks). Siiski soovitatakse kõigil administraatoritel üle minna uutele siltidele. Asjakohane dokumentatsioon K8s on uuendatud.

Kubeadm struktureeritud väljund

Esmakordselt esitatud alfa-versioonis kubeadm teenuse tööriistale struktureeritud väljund. Toetatud formaadid: JSON, YAML, Go-template.

Selle funktsiooni rakendamise motiveeritus (vastavalt KEP) on järgmine:

Kuigi Kubernetesit võib käsitsi rakendada, on de facto (kui mitte de jure) standardiks selle toimingu jaoks kubeadm kasutamine. Populaarsed süsteemihaldustööriistad nagu Terraform toetuvad Kubernetes'i juurutamisel kubeadm-le. Planeeritud täiustused Cluster API-sse hõlmavad koostööd paketiga Kubernetes'e bootstrappimiseks kubeadm ja cloud-init abil.

Ilma struktureeritud väljundita võivad isegi esmapilgul süütud muudatused murda Terraformi, Cluster API ja muud tarkvara, mis kasutab kubeadm'i väljundi tulemusi.

Peagi plaanis on toetada (struktureeritud väljundi kujul) järgmisi kubeadm käske:

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

JSON-vastuse näide käsule 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="
}

Muudatuste stabiliseerimine

Kubernetes 1.17 väljalaskmine toimus üldiselt devizi all «Stabiilsus». Seda soodustas asjaolu, et paljudel funktsioonidel (kokku on neid 14) oli GA staatus. Nende hulka kuuluvad:

Muud muudatused

Kubernetes 1.17'deki yeniliklerin tam listesi elbette yukarıda belirtilenlerle sınırlı değil. İşte bunlardan bazıları (daha kapsamlı bir liste için - bakınız. MUUDATUSAJAKIRI):

  • önceki sürümde sunulan özellik beta sürümüne ulaştı RunAsUserName Windows için;
  • benzer bir değişiklik yaşandı EndpointSlice API (aynı zamanda K8s 1.16'dan), ancak şu anda Endpoint API'nin performans/ölçeklenebilirlik iyileştirmeleri varsayılan olarak etkinleştirilmedi;
  • kümelenme için kritik olan pod'lar artık oluşturulabilir yalnızca ad alanlarında değil kube-system (detailid vaata dokumentatsioonis Limit Priority Class tarbimise);
  • uus valik kubeleti jaoks — --reserved-cpus — võimaldab selgelt määrata CPU-de nimekirja, mis on reserveeritud süsteemile;
  • kuna kubectl logs esitatud uus lipp --prefix, mis lisab pod'i ja konteineri nime igasse logirida;
  • ühes label.Selector lisasid RequiresExactMatch;
  • kõik konteinerid kube-dns-is käivituvad nüüd madalama privileegiga;
  • hyperkube eraldi GitHubi reposse ja ei kuulu enam Kubernetes'i väljaannetesse;
  • oluliselt parandatud jõudlust kube-proxy mitte-UDP-portide jaoks.

Muutused sõltuvustes:

  • CoreDNS versioon kubeadm-is — 1.6.5;
  • crictl versioon on värskendatud v1.16.1-le;
  • CSI 1.2.0;
  • etcd 3.4.3;
  • viimane kontrollitud Docker'i versioon on tõstetud 19.03-ni;
  • minimaalne Go versioon, mis on vajalik Kubernetes 1.17 koostamiseks, on 1.13.4.

P.S.

Lugege ka meie blogist:

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster