Kubernetes

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”.

Istorie

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.

Concepte

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.

Arhitectură și componente

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

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.

Componentele nodului

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.

Dezvoltare și implementare

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.

Distribuție și competiție

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.

Note

  1. http://kubernetes.io/
  2. https://github.com/kubernetes/kubernetes/search?l=go
  3. Proiectul kubernetes Open Source pe Open Hub: Pagina de limbi - 2006.
  4. Versiunea 1.25.3 - 2022.
  5. https://github.com/kubernetes/kubernetes/blob/master/LICENSE
  6. 1 2 Ce este Kubernetes (K8s)? . Glosar Dialogic al Termenilor Telecom . Consultat la 10 octombrie 2017. Arhivat din original la 11 octombrie 2017.
  7. Extensia Kubevirt oferă posibilitatea de a rula pod-uri care nu se bazează pe Interfața Container Runtime, ci se bazează pe orice mașini virtuale acceptate de libvirt .
  8. ↑ Google și-a făcut public planul secret pentru a-și spori cloud  -ul . Consultat la 27 iunie 2016. Arhivat din original la 1 iulie 2016.
  9. Abhishek Verma; Luis Pedrosa; Madhukar R. Korupolu; David Oppenheimer; Eric Tune; John Wilkes. Managementul clusterelor la scară largă la Google cu Borg  (neopr.)  // Proceedings of the European Conference on Computer Systems (EuroSys). - 2015. - 21 aprilie. Arhivat din original pe 27 iulie 2017.
  10. Borg, Omega și Kubernetes - Coada ACM . queue.acm.org . Consultat la 27 iunie 2016. Arhivat din original pe 9 iulie 2016.
  11. Startup-ul Heptio își propune să facă Kubernetes prietenos . Preluat la 6 decembrie 2016.
  12. Google Open Sources, arma sa secretă în cloud computing . cu fir . Consultat la 24 septembrie 2015. Arhivat din original la 10 septembrie 2015.
  13. Pe măsură ce Kubernetes atinge versiunea 1.0, Google donează tehnologie pentru nou-înființată Cloud Native Computing Foundation . TechCrunch . Preluat la 24 septembrie 2015. Arhivat din original la 23 septembrie 2015.
  14. Container Runtime Interface (CRI) | Kubernetes
  15. 1 2 3 4 5 6 7 8 O introducere în Kubernetes . DigitalOcean . Consultat la 24 septembrie 2015. Arhivat din original la 1 octombrie 2015.
  16. 1 2 Langemak, Jon Kubernetes 101 - Rețele . Das Blinken Lichten (11 februarie 2015). Consultat la 2 noiembrie 2015. Arhivat din original la 25 octombrie 2015.
  17. Langemak, Jon Kubernetes 101 - Acces extern în cluster . Das Blinken Lichten (15 februarie 2015). Consultat la 2 noiembrie 2015. Arhivat din original la 26 octombrie 2015.
  18. 1 2 Prezentare generală a unui controler de replicare . Documentatie . Sistemul de operare de bază . Consultat la 2 noiembrie 2015. Arhivat din original la 22 septembrie 2015.
  19. Introducere: Training Docker și Kubernetes - Ziua 2 . Red Hat (20 octombrie 2015). Consultat la 2 noiembrie 2015. Arhivat din original la 29 octombrie 2015.
  20. Introducing Operators: Putting Operational Knowledge into Software Arhivat 25 noiembrie 2019 la Wayback Machine // CoreOS
  21. ↑ 1 2 Infrastructura Kubernetes . Documentația comunității OpenShift . tura deschisă. Preluat la 24 septembrie 2015. Arhivat din original la 6 iulie 2015.
  22. The Three Pillars of Kubernetes Container Orchestration - Rancher Labs . rancher.com (18 mai 2017). Preluat la 22 mai 2017. Arhivat din original la 24 iunie 2017.
  23. Marhubi, Kamal Ce [.. este un Kubelet?] . kamalmarhubi.com (27 august 2015). Consultat la 2 noiembrie 2015. Arhivat din original pe 13 noiembrie 2015.
  24. Folosirea Helm pentru implementarea în Kubernetes  (engleză)  (downlink) . daemonza.github.io. Preluat la 23 februarie 2018. Arhivat din original la 23 mai 2019.
  25. Implementați și gestionați clusterele Kubernetes | Laboratoarele  de crescătorie , Laboratoarele de crescătorie . Arhivat din original pe 16 aprilie 2017. Preluat la 15 aprilie 2017.
  26. Software, Pivotal Pivotal Container Service (PKS  ) . pivotal.io (17 ianuarie 2017). Data accesului: 14 februarie 2018. Arhivat din original pe 15 februarie 2018.
  27. Platforma OpenShift v3 combină Docker, Kubernetes . blog.openshift.com . Preluat la 14 august 2014. Arhivat din original la 6 iulie 2015.
  28. De ce Red Hat a ales Kubernetes pentru OpenShift . blog.openshift.com . Consultat la 7 noiembrie 2016. Arhivat din original pe 21 februarie 2017.
  29. IBM lansează Bluemix Container Service cu Kubernetes pentru a alimenta dezvoltarea rapidă și foarte sigură a  aplicațiilor cognitive . ibm.com . Consultat la 21 noiembrie 2017. Arhivat din original la 24 august 2017.
  30. IBM urmărește Google, Microsoft cu Kubernetes în  cloud . infoworld.com . Preluat la 21 noiembrie 2017. Arhivat din original la 1 decembrie 2017.
  31. IBM anunță IBM Cloud  Private . ibm.com . Consultat la 1 noiembrie 2017. Arhivat din original la 1 noiembrie 2017.
  32. IBM Cloud Private aduce cloud computing nativ în  centrul dvs. de date . techcrunch.com . Consultat la 2 noiembrie 2017. Arhivat din original pe 3 noiembrie 2017.
  33. Lansările IBM Cloud Private cu arhitectură bet open câștigă hibrid cloud  scrum . zdnet.com . Consultat la 2 noiembrie 2017. Arhivat din original pe 3 noiembrie 2017.
  34. Oracle se alătură Cloud Native Computing Foundation ca membru Platinum - Cloud Native Computing Foundation  , Cloud Native Computing Foundation (  13 septembrie 2017). Arhivat din original la 1 decembrie 2017. Preluat la 16 februarie 2018.

Literatură

Link -uri