
Ove noći novi izdanja Kubernetes — . 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 , 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 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 ;
- 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).

Arhitektura HA klastera Kubernetes, stvorena s kubeadm
Detalje o implementaciji možete pronaći u . 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 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:

Detalii o implementaciji — u . Trenutna spremnost — alpha verzija (napredak do beta verzije planiran je za sljedeće izdanje Kubernetes).
U alpha verziji postalo je dostupno 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 .
Dosadašnji logovi 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 polje runtime_handler za praćenje informacija o RuntimeClass u pod-u (više o njemu možete pročitati u tekstu o , gdje je ova klasa prvi put predstavljena kao alfa-verzija), a u Admission Webhooks mogućnost određivanja koje verzije AdmissionReview podržavaju. Konačno, u pravilima Admission Webhooks sada raspon njihove primjene namespace-ima i granicama klastera.
Skladišta
, koja su imala status beta-verzije od izdanja , stabilnima (GA): ova funkcionalnost više se ne isključuje i bit će uklonjena u Kubernetes 1.17.
korištenja varijabli okruženja poznatog kao (npr. ime pod-a) za nazive direktorija, montiranih kao , 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) 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 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 . Za korištenje () 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 ). 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 .
Sve je to dovelo do toga da su alfa-verzije dostigle 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 . Posljedica ove migracije također je bila 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) u beta-verziju.
Čvorovi / Kubelet
Predstavljena je alfa-verzija 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 u tome da minimizira skup metrika koje Kubelet pruža. Usput, sami ti metrik 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.»

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 .
Među ostalim promjenama:
- Kubelet sada (jednom) kontejneri u nepoznatom stanju (unknown) prije operacija ponovnog pokretanja i brisanja.
- Kada koristite sada se init-kontejneru ista informacija kao i običnom kontejneru.
- Kubelet
usageNanoCoresiz CRI statističkog pružatelja, a za čvorove i kontejnere u Windowsu mrežna statistika. - Informacije o operativnom sustavu i arhitekturi sada se zapisuju u oznake
kubernetes.io/osikubernetes.io/archobjekata Node (prevedeno iz bete u GA). - Mogućnost navođenja konkretne sistemske grupe korisnika za kontejnere u podu (
RunAsGroup, uvedena je u ) do beta verzije (uključena prema zadanim postavkama). - du i find, korišteni u cAdvisoru, Go implementacijama.
CLI
U cli-runtime i kubectl označavanje -k za integraciju s (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 ):

Primjer jednostavnog korištenja datoteke (moguće je i složenije korištenje kustomize unutar )
Osim toga:
- nova naredba
kubectl create cronjob, naziv koji govori sam za sebe. - U
kubectl logssada je moguće oznake-f(--followza streaming logova) i-l(--selectorza label query). - kubectl kopirati datoteke, odabrane pomoću wild card.
- U timu
kubectl waitoznake--allza odabir svih resursa u prostoru imena određenog tipa resursa.
Druge
Stabilni (GA) status dobili su sljedeće mogućnosti:
- , korišten za specifikaciju pod-a za definiranje dodatnih uvjeta koji se uzimaju u obzir prilikom spremnosti pod-a;
- Podrška za velike stranice (feature gate pod nazivom );
- ;
- PriorityClass API, .
Ostale promjene predstavljene u Kubernetes 1.14:
- RBAC politika prema zadanim postavkama više ne daje pristup API-ju
discoveryiaccess-reviewkorisnicima bez autentifikacije (unauthenticated). - Službena podrška za CoreDNS 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 umjesto proxy. Osim toga, u CoreDNS readinessProbe, sprječava balansiranje opterećenja na odgovarajuće (nepripremljene) pod-ove.
- U kubeadm, u fazama
initiliupload-certs, 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 gMSA (Group Managed Service Account) — posebne račune u Active Directory-u koji se mogu koristiti i od kontejnera.
- Za GCE 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
