Kubernetes 1.14: pregled glavnih noviteta

Kubernetes 1.14: pregled glavnih noviteta

Ove noći održat će se novi izdanja Kubernetes — 1.14. Prema tradiciji našeg bloga, predstavit ćemo ključne promjene u novoj verziji ovog izvrsnog Open Source proizvoda.

Informacije korištene za pripremu ovog materijala uzete su iz tablica praćenja poboljšanja Kubernetes-a, CHANGELOG-1.14 i odgovarajućih issues, pull requests, Kubernetes Enhancement Proposals (KEP).

Započet ćemo s važnim uvodom od SIG cluster-lifecycle: dinamički visok dostupni klasteri Kubernetes (a ako budemo precizniji, onda self-hosted HA deployments) sada mogu se kreirati pomoću poznatih (u kontekstu klastera s jednim čvorom) komandi kubeadm (init i join). Ukratko, za to:

  • korisnički certifikati klastera se premještaju u tajne;
  • za omogućavanje upotrebe klastera etcd unutar K8s klastera (tj. oslobađanje od vanjske ovisnosti) uključen je etcd-operator;
  • dokumentiraju se preporučene postavke za vanjski opterećivač, koji osigurava visoku dostupnost (u budućnosti se planira mogućnost oslobađanja i od ove ovisnosti, ali ne u ovoj fazi).

Kubernetes 1.14: pregled glavnih noviteta
Arhitektura HA klastera Kubernetes, stvorena s kubeadm

Detalje o implementaciji možete pronaći u design proposal. Ova funkcionalnost je zaista dugo čekana: alpha verzija se očekivala još u K8s 1.9, ali je stigla tek sada.

API

Komanda apply i uopće dekorativno upravljanje objektima premješteni iz kubectl u apiserver. Samo programeri kratko objašnjavaju svoje rješenje time da kubectl apply — temeljni dio rada s konfiguracijama u Kubernetesu, međutim, 'je puna grešaka i teško se popravlja', zbog čega se ova funkcionalnost mora dovesti u normalno stanje i premjestiti u control plane. Jednostavni i očiti primjeri postojećih problema danas:

Kubernetes 1.14: pregled glavnih noviteta

Detalii o implementaciji — u KEP. Trenutna spremnost — alpha verzija (napredak do beta verzije planiran je za sljedeće izdanje Kubernetes).

U alpha verziji postalo je dostupno mogućnost korištenje sheme OpenAPI v3 za kreiranje i objavljivanje OpenAPI dokumentacije za CustomResources (CR), korištenih za validaciju (na strani poslužitelja) korisnički definiranih resursa K8s (CustomResourceDefinition, CRD). Objavljivanje OpenAPI za CRD omogućava klijentima (na primjer, kubectl) da izvrše validaciju na svojoj strani (u okviru kubectl create i kubectl apply) i pružaju dokumentaciju o shemi (kubectl explain). Detalji — u KEP.

Dosadašnji logovi sada se otvaraju s oznakom O_APPEND (a ne O_TRUNC) kako bi se izbjegao gubitak logova u određenim situacijama i radi lakšeg truncate-a logova vanjskim alatima za rotaciju.

Također, u kontekstu Kubernetes API-a valja napomenuti da u PodSandbox i PodSandboxStatus dodano je polje runtime_handler za praćenje informacija o RuntimeClass u pod-u (više o njemu možete pročitati u tekstu o izdanju Kubernetes 1.12, gdje je ova klasa prvi put predstavljena kao alfa-verzija), a u Admission Webhooks implementirano je mogućnost određivanja koje verzije AdmissionReview podržavaju. Konačno, u pravilima Admission Webhooks sada možete ograničiti raspon njihove primjene namespace-ima i granicama klastera.

Skladišta

PersistentLocalVolumes, koja su imala status beta-verzije od izdanja K8s 1.10, proklamirana su stabilnima (GA): ova funkcionalnost više se ne isključuje i bit će uklonjena u Kubernetes 1.17.

Mogućnost korištenja varijabli okruženja poznatog kao Downward API (npr. ime pod-a) za nazive direktorija, montiranih kao subPath, doživjela je razvoj — u obliku novog polja subPathExpr, uz pomoć kojeg se sada određuje potrebno ime direktorija. Ova funkcionalnost prvi put je predstavljena u Kubernetes 1.11, no i za 1.14 ostala je u statusu alfa-verzije.

Kao i u prethodnom izdanju Kubernetes, predstavljene su značajne promjene za aktivno razvijajući CSI (Container Storage Interface):

CSI

postala je dostupna (u okviru alfa-verzije) podrška promjene veličine za CSI-volume. Za njezino korištenje potrebno je uključiti feature gate pod nazivom ExpandCSIVolumes, kao i podršku za ovu operaciju u određenom CSI-drivers.

Još jedna funkcionalnost za CSI u alfa-verziji — mogućnost mogućnost izravnog referenciranja (tj. bez korištenja PV/PVC) na CSI-volume unutar specifikacije pod-a. To ukida ograničenje korištenja CSI-a samo za daljinska skladišta podataka, otvarajući im vrata u svijet local ephemeral volumes. Za korištenje (primjer iz dokumentacije) potrebno je uključiti CSIInlineVolume feature gate.

Napredak je primijećen i u 'unutrašnjosti' Kubernetes-a vezane uz CSI, koje nisu toliko vidljive krajnjim korisnicima (sistemskim administratorima)… U ovom trenutku, programeri su prisiljeni održavati dvije verzije svakog skladišnog plugina: jednu — 'na stari način', unutar kôdne baze K8s (in-tree), a drugu — u okviru novog CSI (više o njemu možete pročitati, na primjer, u ovdje). Ovo uzrokuje razumne neugodnosti koje je potrebno riješiti dok se CSI stabilizira kao takav. Nije moguće jednostavno uzeti i proglasiti zastarjelim (deprecated) API interne (in-tree) plugine zbog odgovarajuće politike Kubernetes-a.

Sve je to dovelo do toga da su alfa-verzije dostigle proces migracije interne kodove plugina, koji se provode kao in-tree u CSI pluginima, čime će briga programera biti svedena na održavanje jedne verzije njihovih plugina, a kompatibilnost sa starim API-ima će biti očuvana i moći će se proglasiti zastarjelim prema standardnom scenariju. Očekuje se da će do sljedećeg izdanja Kubernetes-a (1.15) biti izvršena migracija svih plugina dobavljača oblaka, implementacija će dobiti beta-status i bit će aktivirana u K8s instalacijama prema zadanim postavkama. Detalje potražite u design proposal. Posljedica ove migracije također je bila odustajanje od ograničenja za volumene definirane specifičnim dobavljačima oblaka (AWS, Azure, GCE, Cinder).

Osim toga, podrška za blok uređaje s CSI (CSIBlockVolume) je prebačena u beta-verziju.

Čvorovi / Kubelet

Predstavljena je alfa-verzija novog endpoint-a u Kubelet-u, namijenjenog za davanje metrika o osnovnim resursima. Uopće, ako je ranije Kubelet dobivao statistiku korištenja kontejnera iz cAdvisor-a, sada ti podaci dolaze iz izvršne okoline kontejnera putem CRI (Container Runtime Interface), no očuvana je kompatibilnost za rad sa starim verzijama Dockera. Ranije prikupljena statistika u Kubelet-u davana je putem REST API-a, a sada se koristi endpoint koji se nalazi na adresi /metrics/resource/v1alpha1. Dugoročna strategija programera sastoji se u tome da minimizira skup metrika koje Kubelet pruža. Usput, sami ti metrik sada nazivaju ne „core metrics”, već „resource metrics”, i opisuju ih kao „first-class resources, such as cpu, and memory”.

Zanimljiv detalj: unatoč očiglednoj prednosti u performansama gRPC endpoint-a u odnosu na različite slučajeve korištenja Prometheus formata (resultat jedne od benchmark-a vidjeti u nastavku), autori su preferirali tekstualni format Prometheus zbog jasne dominacije ovog sustava praćenja u zajednici.

«gRPC nije kompatibilan s glavnim sustavima nadzora. Endpoint će biti koristan samo za isporuku metrika u Metrics Server ili komponente nadzora koje se izravno integriraju s njim. Kada se koristi keširanje u Metrics Serveru, performanse tekstualnog formata Prometheus dovoljno su dobre za nas da preferiramo Prometheus umjesto gRPC, s obzirom na široku rasprostranjenost Prometheusa u zajednici. Kada format OpenMetrics postane stabilniji, moći ćemo približiti performanse gRPC pomoću formata temeljenog na proto.»

Kubernetes 1.14: pregled glavnih noviteta
Jedno od usporednih testiranja performansi korištenja formata gRPC i Prometheus u novom endpointu Kubeleta za metrike. Više grafova i drugih detalja možete pronaći u KEP.

Među ostalim promjenama:

  • Kubelet sada (jednom) pokušava zaustaviti kontejneri u nepoznatom stanju (unknown) prije operacija ponovnog pokretanja i brisanja.
  • Kada koristite PodPresets sada se init-kontejneru dodaje ista informacija kao i običnom kontejneru.
  • Kubelet počeo koristiti usageNanoCores iz CRI statističkog pružatelja, a za čvorove i kontejnere u Windowsu dodana mrežna statistika.
  • Informacije o operativnom sustavu i arhitekturi sada se zapisuju u oznake kubernetes.io/os i kubernetes.io/arch objekata Node (prevedeno iz bete u GA).
  • Mogućnost navođenja konkretne sistemske grupe korisnika za kontejnere u podu (RunAsGroup, uvedena je u K8s 1.11) napredovala do beta verzije (uključena prema zadanim postavkama).
  • du i find, korišteni u cAdvisoru, zamijenjeni Go implementacijama.

CLI

U cli-runtime i kubectl dodana je označavanje -k za integraciju s kustomize (usput, njegov razvoj se sada vodi u zasebnom repozitoriju), tj. za obradu dodatnih YAML datoteka iz specijalnih direktorija kustomization (detalji o njihovom korištenju vidi u KEP):

Kubernetes 1.14: pregled glavnih noviteta
Primjer jednostavnog korištenja datoteke kustomization (moguće je i složenije korištenje kustomize unutar overlays)

Osim toga:

  • Dodana nova naredba kubectl create cronjob, naziv koji govori sam za sebe.
  • U kubectl logs sada je moguće kombinirati oznake -f (--follow za streaming logova) i -l (--selector za label query).
  • kubectl naučili smo kopirati datoteke, odabrane pomoću wild card.
  • U timu kubectl wait dodali su oznake --all za odabir svih resursa u prostoru imena određenog tipa resursa.

Druge

Stabilni (GA) status dobili su sljedeće mogućnosti:

Ostale promjene predstavljene u Kubernetes 1.14:

  • RBAC politika prema zadanim postavkama više ne daje pristup API-ju discovery i access-review korisnicima bez autentifikacije (unauthenticated).
  • Službena podrška za CoreDNS osigurana samo za Linux, stoga, prilikom korištenja kubeadm za njegovo (CoreDNS) postavljanje u klasteru, čvorovi moraju raditi samo u Linuxu (za ovo ograničenje koriste se nodeSelectors).
  • Defaultna konfiguracija CoreDNS sada koristi forward plugin umjesto proxy. Osim toga, u CoreDNS dodana readinessProbe, sprječava balansiranje opterećenja na odgovarajuće (nepripremljene) pod-ove.
  • U kubeadm, u fazama init ili upload-certs, postalo je moguće učitati certifikate potrebne za povezivanje novog control-plane-a na tajnu kubeadm-certs (koristi se zastavica --experimental-upload-certs).
  • Za Windows instalacije dostupna je alfa verzija podrške gMSA (Group Managed Service Account) — posebne račune u Active Directory-u koji se mogu koristiti i od kontejnera.
  • Za GCE aktivirali mTLS-enkripciju između etcd-a i kube-apiserver-a.
  • Ažuriranja u korištenom/zavisnom softveru: Go 1.12.1, CSI 1.1, CoreDNS 1.3.1, podrška za Docker 18.09 u kubeadm, a minimalna podržavana verzija Docker API-a postala je 1.26.

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