Kubernetes | |
---|---|
Tip de | software gratuit și open source |
Dezvoltator | Google [1] și Cloud Native Computing Foundation |
Scris in | Du -te [2] [3] |
Sistem de operare | Linux , Microsoft Windows și macOS |
Prima editie | 7 iunie 2014 |
ultima versiune |
|
Licență | Licență Apache 2.0 [5] |
Site-ul web | kubernetes.io _ |
Fișiere media la Wikimedia Commons |
Kubernetes ( K8s [6] ) este un software de orchestrare open source pentru aplicații containerizate - care automatizează implementarea, scalarea și coordonarea acestora într-un mediu cluster . Suporta tehnologiile majore de containerizare , inclusiv Docker , rkt , tehnologiile de virtualizare hardware sunt de asemenea acceptate [7] .
Versiunea originală a fost dezvoltată de Google pentru nevoi interne, ulterior sistemul a fost transferat sub controlul Cloud Native Computing Foundation . Folosită de o serie de organizații mari și proiecte de internet, în special, infrastructura Fundației Wikimedia a fost transferată de la software-ul dezvoltat de sine pentru organizarea clusterelor la Kubernetes.
Cuvântul „Kubernetes” provine din altă greacă. κυβερνήτης - timonier, timonier [6] . Numeronimul „k8s” este, de asemenea, folosit adesea : în cuvântul „kubernetes” există opt litere între „k” și „s”, prin analogie cu numeronimul „i18n” - o versiune prescurtată a „internaționalizării”.
Principalii dezvoltatori ai primelor versiuni ale sistemului intern Google au fost programatorii Joe Beda , Brendan Burns și Craig McLuckie [8] , ulterior colegii lor Brian Grant și Tim Hawkin s-au alăturat proiectului ( Tim Hockin ). Principalul limbaj de programare al sistemului este Go . Dezvoltarea și ideologia internă a Kubernetes a fost serios influențată de un alt produs Google, care a rămas o dezvoltare internă - sistemul de management al clusterelor Google Borg [9] [10] , la care au lucrat anterior o serie de dezvoltatori cheie Kubernetes.
Numele inițial al proiectului este Project Seven (o referire la eroina din seria Star Trek , revenită la o stare individuală și prietenoasă cu oamenii din statutul de membru al minții cibernetice a roiului inuman al Colectivului Borg ) [11] ; șapte mânere de pe volanul siglei proiectului sunt o aluzie la această imagine artistică.
La mijlocul anului 2014 au fost publicate codurile sursă ale proiectului [12] . Pe 21 iulie 2015, a fost lansată versiunea 1.0 [13] ; după care Google, în parteneriat cu Linux Foundation , a organizat o fundație specială Cloud Native Computing (CNCF), la care corporația a transferat Kubernetes ca contribuție tehnologică inițială.
Pe 19 decembrie 2016 a fost introdusă Container Runtime Interface (CRI), care a înlocuit Docker ca motor pentru gestionarea [14] containerelor , oferind astfel suport nu doar pentru Docker, ci și pentru alte instrumente de containerizare compatibile.
La fel ca multe produse complexe, Kubernetes introduce o serie de termeni și concepte specifice în ecosistemul său.
Un nod este o singură mașină fizică sau virtuală pe care sunt implementate și rulate containerele de aplicații. Fiecare nod din cluster conține servicii pentru rularea aplicațiilor în containere (de exemplu , Docker ), precum și componente pentru gestionarea centralizată a nodului.
Pod ( pod , din engleză - „pod, cocoon”, de asemenea modul ) este unitatea de bază pentru lansarea și gestionarea aplicațiilor: unul sau mai multe containere care sunt garantate să ruleze pe același nod, oferă partajarea resurselor [15] și comunicare între procese , și furnizați o adresă IP unică în cadrul clusterului [16] . Acesta din urmă permite aplicațiilor implementate pe pod să utilizeze numere de porturi fixe și predefinite fără riscul de conflict. Pod-urile pot fi gestionate direct folosind API -ul Kubernetes sau pot fi externalizate către un controler [15] .
Volumul ( volumul ) este o resursă de stocare partajată pentru partajare din containerele implementate în același Pod.
Toate obiectele de management (noduri, poduri, containere) din Kubernetes sunt marcate cu etichete ( label ), selectoarele de etichete ( label selector ) sunt cereri care vă permit să obțineți un link către obiectele corespunzătoare uneia dintre etichete [15] . Etichetele și selectoarele sunt mecanismul principal al Kubernetes pentru a alege ce obiect să folosească pentru operațiunea solicitată.
Un serviciu din Kubernetes este o colecție de seturi de pod-uri legate logic și politici de acces la acestea. De exemplu, un serviciu poate corespunde unuia dintre straturile de software dezvoltate în conformitate cu principiile unei arhitecturi software stratificate. Setul de poduri corespunzător serviciului se obține prin executarea selectorului de etichete corespunzător [15] .
Kubernetes oferă descoperire de servicii și rutare la cerere. În special, sistemul este capabil să reatribuie adresa IP și numele de domeniu al serviciului necesar pentru accesarea serviciului către diferitele poduri care fac parte din acesta. Acest lucru asigură echilibrarea încărcăturii în stilul Round robin DNS între pod-urile ale căror etichete corespund serviciului, precum și funcționarea corectă în cazul în care unul dintre nodurile de cluster eșuează și pod-urile găzduite pe acesta au fost mutate automat în alte noduri [16] . În mod implicit, serviciul este disponibil într-un cluster gestionat de Kubernetes - de exemplu, pod-urile backend sunt grupate împreună pentru a asigura echilibrarea sarcinii și prezentate frontend-ului ca atare. De asemenea, clusterul poate fi configurat pentru a oferi acces la podurile sale constitutive din exterior ca un singur frontend [17] .
Controlerul ( controller ) este un proces care gestionează starea clusterului, încercând să-l aducă din starea actuală la cea dorită [18] ; face acest lucru prin operarea pe un set de Pod-uri definite cu selectoare de etichete și parte din definiția controlerului [19] . Execuția controlerelor este asigurată de componenta Kubernetes Controller Manager. Un tip de controler, cel mai cunoscut este Replication Controller , care oferă scalare prin rularea unui număr specificat de copii Pod într-un cluster. De asemenea, asigură că noi instanțe ale Pod-ului sunt lansate în cazul în care gazda care rulează Pod-ul gestionat de acest controler eșuează [18] . Alte controlere incluse în sistemul principal Kubernetes includ „DaemonSet Controller”, care asigură că un Pod este pornit pe fiecare mașină (sau un subset de mașini) și „Job Controller” pentru pornirea Pod-urilor care rulează până la finalizare, cum ar fi parte dintr-o lucrare pe lot...
Operatorii ( operatorii ) sunt un tip specializat de software Kubernetes conceput pentru a include servicii într-un cluster care își mențin starea între execuții ( stateful ), cum ar fi DBMS, sisteme de monitorizare sau caching [20] . Scopul operatorilor este de a oferi capacitatea de a gestiona aplicațiile cu state într-un cluster Kubernetes într-un mod transparent și de a ascunde detaliile setărilor lor din procesul principal de gestionare a clusterului Kubernetes.
Sistemul implementează arhitectura master-slave : este alocat un subsistem de gestionare a clusterelor, iar unele componente gestionează noduri slave individuale (numite în sine noduri Kubernetes) [15] [21] .
Subsistemul de control asigură comunicarea și distribuția sarcinii în cadrul clusterului; componentele subsistemului pot fi executate pe unul sau mai multe noduri master care funcționează în paralel, oferind în comun un mod de disponibilitate ridicată [21] .
Etcd este o componentă a subsistemului de management responsabil pentru stocarea consecventă a datelor de configurare a clusterului, într-un sens, echivalentul distribuit al directorului /etc al sistemelor Unix. Implementat ca un SGBD NoSQL distribuit ușordin clasa cheie-valoare; creat ca parte a proiectului CoreOS .
Serverul API este o componentă cheie a subsistemului de control care oferă un API în stil REST (folosind comunicarea JSON prin transport HTTP ) și este folosit pentru a oferi acces extern și intern la funcțiile Kubernetes [15] . Serverul API actualizează starea obiectelor stocate în etcd, permițând clienților săi să gestioneze distribuția containerelor și încărcarea între nodurile sistemului gestionat.
Planificatorul este o componentă a subsistemului de control care selectează pe ce nod ar trebui să ruleze un anumit Pod pe baza criteriilor de disponibilitate a resurselor. Planificatorul ține evidența utilizării resurselor pe fiecare nod, asigurându-se că încărcarea este distribuită astfel încât să nu depășească resursele disponibile. În acest scop, planificatorul trebuie să aibă informații despre resursele disponibile pe fiecare dintre noduri, cerințele pentru acestea din podurile gestionate, precum și diverse restricții și politici suplimentare ale utilizatorilor, cum ar fi cerințele QoS , afinitate și anti-afinitate ( afinitate - anti-afinitate - pachete sau decuplare obiecte de control între ele), localizarea datelor . Cu alte cuvinte, rolul planificatorului este de a găsi și furniza resurse în funcție de solicitările care apar în legătură cu încărcarea [22] .
Managerul de controler este procesul care rulează principalele controlere Kubernetes, cum ar fi DaemonSet Controller și Replication Controller. Controllerele interacționează cu serverul API Kubernetes prin crearea, actualizarea și ștergerea resurselor pe care le gestionează (pod-uri, puncte de intrare în serviciu și altele).
Kubectl este o interfață de linie de comandă , împreună cu un API care oferă gestionarea resurselor controlate de Kubernetes.
Modul în care funcționează Kubernetes este că resursele nodurilor sunt distribuite dinamic între podurile care rulează pe ele. Fiecare nod dintr-un cluster conține un număr de componente tipice.
Serviciul de lansare containere oferă funcții de execuție a containerelor de tipul corespunzător (în funcție de tipul de motor container utilizat). Din punctul de vedere al mediului software Kubernetes, containerele sunt încapsulate în pod-uri, containerele în sine fiind componentele software de nivel scăzut cu care interacționează software-ul Kubernetes. Ele, la rândul lor, conțin aplicații executabile, biblioteci și alte resurse necesare pentru funcționarea acestor aplicații. Containerele sunt accesibile lumii exterioare prin adresa IP atribuită fiecăruia dintre pod-uri.
Kubelet este responsabil pentru starea de execuție a podurilor de pe nod - monitorizează dacă fiecare dintre containere funcționează corect în timp ce funcționează. Kubelet oferă pornirea, oprirea și gestionarea containerelor de aplicații organizate în pod-uri. Din punct de vedere funcțional, Kubelet poate fi văzut ca fiind analog cu supervizor [15] [23] . Dacă se găsește că un Pod este într-o stare nevalidă, componenta încearcă să o reinstaleze și să o repornească pe nod. Starea nodului în sine este trimisă subsistemului de control la fiecare câteva secunde sub formă de mesaje de diagnosticare ( mesaj de ritm cardiac ). Dacă nodul master, pe baza conținutului acestor mesaje sau a lipsei acestora, detectează că un anumit nod nu funcționează corect, procesul subsistemului de control al controlerului de replicare încearcă să repornească podurile necesare pe un alt nod care este într-o stare sănătoasă.
Kube-proxy este o componentă care este o combinație între un proxy de rețea și un echilibrator de încărcare . Operațiile de nivel de rețea implementate în acesta utilizează abstracția serviciului [15] . Este responsabil pentru direcționarea traficului de intrare către anumite containere care rulează în Podul situat pe nod. Rutarea este furnizată pe baza adresei IP și a portului cererii primite.
cAdvisor este un agent al sistemului de monitorizare intern Kubernetes care colectează valori de performanță și informații despre utilizarea resurselor de către containerele care rulează în nod, cum ar fi timpul CPU, RAM, fișierele și încărcarea sistemului de rețea.
Kubernetes oferă o serie de instrumente pentru integrarea dezvoltării și implementării software-ului care rulează pe acest sistem. Printre cele mai frecvent utilizate instrumente în acest scop se numără:
Există alternative pentru multe dintre aceste instrumente, de exemplu Flux și werf sunt uneori folosite în loc de ArgoCD.
Mulți dintre furnizorii de management al containerelor au implementat suport pentru Kubernetes în produsele lor, iar un număr dintre ei au participat la activități CNCF . În special, Rancher Labs a inclus Kubernetes în distribuția platformei lor de gestionare a containerelor Rancher [25] , Pivotal Software a folosit Kubernetes în produsul Pivotal Container Service (PKS) [26] , Red Hat l-a folosit ca parte a PaaS- [28][27]OpenShift (care este, de fapt, o versiune extinsă a Kubernetes, adesea numită chiar „distribuție Kubernetes”), CoreOS a inclus sistemul în versiunea comercială a distribuției Container Linux Tectonic și IBM l-a folosit în IBM Cloud Container Service [29 ] [30] și în IBM Cloud Private [31] [32] [33] . Oracle Corporation s-a alăturat Fundației Cloud Native Computing în septembrie 2017 și a încorporat Kubernetes în Oracle Cloud și Oracle Linux [34] .
Se crede că până la sfârșitul anilor 2010, Kubernetes a devenit standardul de facto pentru utilizarea în sistemele și serviciile cloud conform modelului PaaS , care prevede containerizarea aplicațiilor, în special, este baza serviciilor de containerizare ale unui numărul celor mai mari furnizori publici de cloud - Amazon ( AWS Elastic Container Service), Microsoft ( Microsoft Azure Containers), Google ( Google Cloud Platform Kubernetes Engine). Din 2019, Rancher Labs dezvoltă distribuția k3s , o versiune ușoară a Kubernetes, care vizează implementarea în medii cu resurse de calcul limitate.
În același timp, sunt dezvoltate și produse alternative pentru orchestrarea aplicațiilor containerizate - Docker Swarm de la dezvoltatorul Docker și Nomad de la HashiCorp . În comparație cu Docker Swarm, Kubernetes este mai bogat în funcționalități, dar are un prag mai mare de intrare în tehnologie. Când migrați de la Docker Swarm la Kubernetes, trebuie să utilizați aplicația Kompose pentru a converti fișierele de definiție a orchestrației create în Docker Compose într-un format acceptat de Kubernetes.
![]() | |
---|---|
Site-uri tematice | |
În cataloagele bibliografice |