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

Selle materjali koostamiseks kasutatud teave on saadud ametlikust teadaandest, , 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 tuleb alguses 2018. aasta oktoobrist, ja ametlik — 2 aastat tagasi, seega tavalised probleemid (näiteks ) — 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. 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 , või viimase ajal toimunud (ja ). Praegune teostuse tase ServiceTopology Kubernetes-is — alfa-versioon.
Detailsed teavet funktsiooni toimimise ja selle kasutamise kohta leiate ühe autori poolt.
Kaksiksteeki IPv4/IPv6 tugi
Oluline edasiminek teises võrgu funktsioonis: kahe IP-steki samaaegne tugi, mis esmakordselt esitati . Eelkõige tõi uus väljaanne kaasa järgmised muudatused:
- kube-proxy-s võimalus töötada mõlemas režiimis (IPv4 ja IPv6);
- ühes
Pod.Status.PodIPsdownward API tugi (sama ajal kui nüüd nõutakse, et host lisaks ka IPv6-aadressi);/etc/hostskahe steki tugi - (Kubernetes IN Docker) ja uuendatud e2e-testid. ;
- обновлённые e2e-тесты.

duble staki IPV4/IPv6 kasutamine KINDis
CSI edusammud
Tõendatud stabiilsena CSI-põhiste salvestuste jaoks, mida esmakordselt tutvustati .
Algatus mahuplokkide migreerimiseks CSI-le — 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:

Kuidas „traditsiooniline“ salvestuste tugi K8s jõudis CSI-ni, rääkisime me . CSI migratsiooni beetaversiooniks muutmisele pühendatud 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 — 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 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 , что настало время объявить фичу стабильной (GA).
Seega on nad kõik vastavalt ümbernimetatud (topoloogiate järgi):
-
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
… kuid on endiselt saadaval ka oma vanade nimede kaudu (tagurpidi ühilduvuse jaoks). Siiski soovitatakse kõigil administraatoritel üle minna uutele siltidele. K8s on uuendatud.
Kubeadm struktureeritud väljund
Esmakordselt esitatud alfa-versioonis . Toetatud formaadid: JSON, YAML, Go-template.
Selle funktsiooni rakendamise motiveeritus (vastavalt ) 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:
- «töötluse» sõlmed teatud tingimuste järgi (), mis ilmus versioonis ;
- — uus sündmusetüüp, mis omab silti, et kõik objektid on teatud versiooni (
resourceVersion) juba watch’iga töödeldud; - (defaulting) kohandatud ressurssidele;
- process namespaces pod’is;
-
ScheduleDaemonSetPods— kube-scheduler'i abil (DaemonSet kontrolörü yerine); - düğüm türüne bağlı olarak hacim sayısı için;
- şu yollar için, olarak montelenen
subPath; - özel Lease API'sine;
- «finallayıcı koruması» () yük dengeleyiciler için (LoadBalancer kaynaklarını silmeden önce ilgili Service kaynaklarını kontrol etme);
- birçok izleyici tarafından izlenen aynı nesne setleri ile çalışırken, performans bakımından - her izleyici için aynı nesnelerin tekrar seri hale getirilmesini önleyerek elde edilir.
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. ):
- önceki sürümde sunulan özellik beta sürümüne ulaştı ;
- benzer bir değişiklik 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 yalnızca ad alanlarında değil
kube-system(detailid vaata dokumentatsioonis ); - uus valik kubeleti jaoks — — võimaldab selgelt määrata CPU-de nimekirja, mis on reserveeritud süsteemile;
- kuna
kubectl logsuus lipp--prefix, mis lisab pod'i ja konteineri nime igasse logirida; - ühes
label.SelectorRequiresExactMatch; - kõik konteinerid kube-dns-is madalama privileegiga;
- eraldi GitHubi reposse ja ei kuulu enam Kubernetes'i väljaannetesse;
- oluliselt 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
