Dezvoltat de | |
---|---|
Ultima versiune | 1.21.0 (8 aprilie 2021) |
Depozit | github.com/kubernetes/kubernetes |
Scris in | Merge |
Sistem de operare | Linux , Microsoft Windows și macOS |
Tip | Proiectul Linux Foundation ( d ) |
Licență | Licență Apache versiunea 2.0 |
Site-ul web | kubernetes.io |
Kubernetes (denumit în mod obișnuit „K8s”) este un sistem open source care își propune să ofere o „ platformă pentru automatizarea implementării, extinderii și implementării containerelor de aplicații pe clustere de servere ”. Funcționează cu o varietate de tehnologii de containerizare și este adesea utilizat cu Docker . A fost inițial proiectat de Google și apoi donat Fundației Cloud Native Computing Foundation.
Kubernetes (din κυβερνήτης : greacă pentru „timonier” sau „pilot”) creat de Joe Beda, Brendan Burns și Craig McLuckie, la care s-au alăturat rapid alți ingineri Google precum Brian Grant și Tim Hockin, este anunțat pentru prima dată de Google la mijlocul anului 2014. Dezvoltarea și arhitectura sa au fost puternic influențate de sistemul Borg (in) Google. Mai mult, majoritatea contribuitorilor principali provin din proiectul Borg. Numele original al lui Kubernetes pe plan intern era Project Seven , cu referire la personajul Star Trek care este un Borg devenit prietenos. Cele șapte spițe ale barei de sigle Kubernetes sunt un semn al denumirii originale.
Kubernetes versiunea 1.0 a fost lansată pe 21 iulie 2015. Odată cu lansarea primei versiuni a Kubernetes, Google a colaborat cu Linux Foundation pentru a crea Cloud Native Computing Foundation (CNCF) și a oferit Kubernetes ca tehnologie de pornire.
Kubernetes este, de asemenea, utilizat de RedHat pentru produsul său OpenShift , de CoreOS în produsul său Tectonic și de Rancher Labs pentru platforma sa de gestionare a containerelor Rancher.
Kubernetes definește un set de instrumente („primitive”) care împreună furnizează mecanisme pentru implementarea, întreținerea și scalarea aplicațiilor. Aceste elemente care alcătuiesc Kubernetes sunt concepute pentru a fi combinate și scalabile și, prin urmare, capabile să suporte o mare varietate de sarcini de lucru. Această extensibilitate este asigurată în mare parte de API-ul Kubernetes, care este utilizat de componentele interne, precum și de extensiile și containerele care rulează pe Kubernetes.
Unitatea de bază a programării în Kubernetes se numește pod . Este o vedere abstractă a componentelor containerizate. Un pod constă din unul sau mai multe containere care sunt garantate pentru a fi co-amplasate pe o mașină gazdă și pot partaja resursele sale. Fiecare pod din Kubernetes are o adresă IP unică (în interiorul clusterului), care permite aplicațiilor să utilizeze porturile mașinii fără riscul de conflict. Un pod poate defini un volum, cum ar fi un director pe o unitate locală sau în rețea, și îl poate expune containerelor din acel pod . Cele păstăile pot fi gestionate manual prin API - ul de Kubernetes. Gestionarea acestora poate fi delegată și unui controlor.
Cele păstăile sunt atașate la nodul care implementează până la expirarea sau ștergerea acestora. Dacă nodul eșuează, pod-uri noi cu aceleași proprietăți ca și cele anterioare vor fi implementate pe alte noduri disponibile.
Kubernetes permite clienților (utilizatori și componente interne) să atașeze perechi cheie-valoare numite „etichete” la orice obiect API din sistem, cum ar fi pod-uri și noduri. Prin corespondență, „selectoarele de etichete” sunt interogări făcute pe etichete legate de obiecte.
Etichetele și selectoarele sunt primul mecanism de grupare din Kubernetes și sunt utilizate pentru a determina pe ce componente să efectueze o operație.
De exemplu, dacă Pod-urile unei aplicații au etichete pentru un sistem tier(" frontend", " backend", de exemplu) și unul release_track(" preproduction", " production", de exemplu), atunci o operație pe toate nodurile " backend" și " preproduction" poate utiliza un selector de etichete după cum urmează:
tier=backend AND release_track=preproduction
Un controler este o buclă de arbitraj care conduce starea curentă a unui cluster la starea dorită. Face acest lucru gestionând un set de păstăi. Unul dintre tipurile de controler se numește "controler de replicare", gestionează replicarea și scalarea prin lansarea unui număr specific de copii ale unui pod pe un cluster. De asemenea, gestionează crearea de pod-uri de înlocuire dacă nodul subiacent este defect controlerele care fac parte din sistemul de bază Kubernetes sunt: „DaemonSet Controller” pentru a lansa un singur pod pe fiecare mașină (sau un subset de mașini), precum și „Job Controller” pentru a lansa pod-uri care au un scop specific (de ex. scripturi) Setul de pod-uri pe care le controlează un controler este determinat de etichetele selectorilor care fac parte din definiția controlerului.
Un serviciu Kubernetes este un grup de pod-uri care lucrează împreună, de exemplu, un strat într-o aplicație cu mai multe straturi. Toate podurile care alcătuiesc un serviciu sunt definite de un selector de etichete. Kubernetes oferă o descoperire și servicii de rutare prin atribuirea unei adrese IP și un nume de domeniu la un serviciu, și echilibrează sarcina de trafic folosind round-robin conexiunilor de rețea de la acea adresă pe toate pastai corespunzătoare selectorul (chiar și atunci când, în cazul a unei defecțiuni, păstăile schimbă mașinile). În mod implicit, un serviciu este expus în interiorul unui cluster (de exemplu, podurile de backend pot fi grupate într-un serviciu, cu cereri de la podurile de încărcare frontend echilibrate la backend), dar un serviciu poate fi expus și în afara unui cluster (de exemplu, astfel încât clienții să poată alăturați podurilor frontend).
Kubernetes urmează arhitectura master / slave. Componentele Kubernetes pot fi împărțite în cele care gestionează un nod individual și cele care fac parte din planul de control.
Masterul Kubernetes este unitatea principală de control care gestionează volumul de lucru și direcționează comunicațiile în sistem. Planul de control Kubernetes este format din mai multe componente, fiecare cu propriul proces, care poate rula pe un singur nod master sau pe mai mulți master pentru a crea clustere de înaltă disponibilitate. Diferitele componente ale planului de control Kubernetes sunt descrise mai jos:
etcdetcd este o unitate de stocare a datelor cheie-valoare distribuită persistentă și ușoară dezvoltată de CoreOS care stochează în mod fiabil datele de configurare ale clusterului, reprezentând starea clusterului în orice moment. Alte componente caută modificări în acest spațiu de stocare pentru a trece ele însele la starea dorită.
Server APIServerul API este o parte cheie și servește API-ul Kubernetes prin JSON prin HTTP . Oferă interfața internă și externă a Kubernetes. Serverul API gestionează și validează cererile REST și actualizează starea obiectelor API din etcd, permițând clienților să configureze volumul de lucru și containerele pe nodurile lucrătorului.
PlanificatorulPlanificatorul este o componentă suplimentară care permite selectarea nodului care ar trebui să ruleze un pod neprogramat pe baza disponibilității resurselor. Planificatorul gestionează utilizarea resurselor pe fiecare nod pentru a se asigura că volumul de lucru nu depășește resursele disponibile. Pentru a atinge acest obiectiv, programatorul trebuie să știe ce resurse sunt disponibile și ce sunt alocate în prezent serverelor.
Manager controlerManagerul controlerului este procesul în care rulează controlerele principale Kubernetes, cum ar fi DaemonSet Controller și Replication Controller. Controlerele comunică cu serverul API pentru a crea, actualiza și șterge resursele pe care le gestionează (pod-uri, puncte finale de serviciu etc.).
Nodul numit și Worker sau Minion este o singură mașină (sau o mașină virtuală ) în care sunt implementate containere (sarcini de lucru). Fiecare nod din cluster trebuie să ruleze programul de containerizare (de exemplu, Docker ), precum și componentele menționate mai jos, pentru a comunica cu masterul pentru a configura partea de rețea a acestor containere.
KubeletKubelet este responsabil pentru starea de funcționare a fiecărui nod (adică, asigurarea faptului că toate containerele de pe un nod sunt sănătoase). Se ocupă de pornirea, oprirea și întreținerea containerelor de aplicații (organizate în capsule) direcționate de planul de control.
Kubelet monitorizează starea unui pod și, dacă acesta nu se află în starea dorită, podul va fi redistribuit pe același nod. Starea nodului este transmisă la fiecare câteva secunde prin mesaje de stare către master. De îndată ce maestrul detectează o defecțiune la un nod, controlorul de replicare vede această schimbare de stare și lansează podurile pe alte gazde sănătoase .
Kube-proxyKube-proxy este implementarea unui proxy de rețea și a unui echilibru de sarcină , gestionează serviciul de abstractizare, precum și alte operațiuni de rețea. Este responsabil pentru direcționarea traficului către containerul corespunzător pe baza adresei IP și a numărului de port al cererii primite.
cAdvisorcAdvisor este un agent care monitorizează și preia date despre consumul de resurse și performanță, cum ar fi CPU, memorie, precum și utilizarea discului și a rețelei containerelor din fiecare nod.