Cuprins
Printre companiile al căror motor principal al activității este o aplicație sau un sistem IT, scalabilitatea, stabilitatea și viteza de implementare joacă un rol imens. Din acest motiv, din ce în ce mai multe companii apelează la containerizare. Containerizarea se referă la plasarea elementelor aplicației (procesele, dependențele, bibliotecile, fișierele de configurare sau bazele de date locale) în containere gestionate dinamic.
Containerizarea are multe avantaje. Unul dintre ele este portabilitatea, ceea ce înseamnă că un sistem scris o dată poate rula în medii diferite. Datorită acestui fapt, dezvoltatorii își pot dedica timpul pentru crearea de noi funcționalități, în loc să adapteze sistemul la cerințele de infrastructură. Procesul de implementare în sine este, de asemenea, mai simplu, mai rapid și mai sigur.
În cazul unui sistem extins format din mii sau milioane de containere, este necesară administrarea acestora printr-o platformă de orchestrație. Orchestrația permite introducerea automatizării, gestionarea în grup, monitorizarea avansată a proceselor, controlul modificărilor, precum și detectarea și repararea automată a defecțiunilor.
Unele dintre cele mai populare platforme de orchestrație sunt Kubernetes și Docker Swarm. Prezentăm diferențele importante dintre soluții și avantajele și dezavantajele acestora.
Ce este Kubernetes?
Kubernetes, cunoscut și sub numele de K8s, este o platformă open source de orchestrație a containerelor. Suportă automatizarea implementărilor, scalarea aplicațiilor, gestionarea containerelor și monitorizarea modificărilor și proceselor. Permite gestionarea clusterelor (grupuri de mașini care cooperează) și node-urilor (mașini unice într-un cluster) pe scară largă, ceea ce scurtează procesul de adaptare a aplicațiilor la cerințele de infrastructură și simplifică procesul de implementare a modificărilor și de adăugare a elementelor noi în sistem.
Platforma Kubernetes a fost creată de Google acum 20 de ani pentru a deservi volumul de muncă de producție al companiei și pentru a rula miliarde de containere pe săptămână. În anul 2014, proiectul a fost predat organizației Cloud Native Computing Foundation (CNCF; subsidiară Linux Foundation), iar licența software a fost schimbată în Apache 2.0. De atunci, platforma a fost susținută de CNCF și dezvoltată continuu, de asemenea, de comunitatea care utilizează soluția.
Kubernetes este disponibil pe Google Cloud Platform drept Kubernetes as a Service (serviciul Google Kubernetes Engine – GKE).
Aflați mai multe despre K8s în articolul „Kubernetes – ce este și cum să începeți?”
Ce este Docker Swarm?
Docker Swarm, la fel ca și Kubernetes, este un instrument de orchestrație a containerelor în diferite medii de infrastructură. Aceasta este o platformă open source al cărei cod sursă este disponibil sub licența Apache 2.0. Swarm este furnizat și susținut de producător (Docker) și dezvoltat, de asemenea, de comunitatea care îl folosește.
Docker Swarm este utilizat pentru administrarea de elemente individuale și clustere întregi (grupuri de mașini fizice sau virtuale) folosind Docker Engine. Astfel, facilitează procesul de gestionare a aplicației, accelerează noile implementări, elimină multe activități DevOps ale dezvoltatorilor, cum ar fi ajustarea software-ului la cerințele specifice de infrastructură. Funcționează impecabil cu toate aplicațiile care utilizează Docker pentru containerizare.
Kubernetes versus Docker Swarm – comparație
Definiția și instalarea aplicației (application definition)
Kubernetes:
Aplicația poate fi implementată și lansată datorită utilizării unei combinații de pod-uri, servicii (services) sau microservicii (microservices) și deployment (obiectul de implementare care gestionează ciclul de viață al aplicației).
Docker Swarm:
Aplicațiile pot fi implementate ca servicii (services) sau microservicii (microservices) în clustere. Fișierele YAML permit definirea mai multor containere. Aplicația poate fi instalată și prin Docker Compose.
Disponibilitate (availability)
Kubernetes:
Kubernetes suportă disponibilitatea ridicată a aplicațiilor. Deployment permite plasarea pod-urilor (grupuri de containere interconectate) între node-uri (mașini într-un cluster) pentru a asigura o disponibilitate ridicată, chiar și în cazul unei defecțiuni. Site-urile web cu funcția load balancing (tehnica de echilibrare a traficului) identifică pod-urile care nu funcționează corect și le elimină.
Docker Swarm:
Docker Swarm asigură, de asemenea, o disponibilitate ridicată. Serviciile pot fi reproduse în node-uri, iar node-ul principal (swarm manager) este responsabil pentru întregul cluster și gestionează distribuția resurselor între elementele sale.
Echilibrarea încărcării (load balancing)
Kubernetes:
Kubernetes deține tehnică încorporată de echilibrare a încărcării care necesită configurare și activare manuală. Pod-urile sunt definite ca servicii și pot fi utilizate drept load-balancer într-un cluster. Pentru load balancing este utilizat controlerul ingress – un obiect API care gestionează accesul la cluster din exterior, de exemplu, de protocoalele HTTP și HTTPS.
Docker Swarm:
Swarm are o componentă DNS care gestionează solicitările trimise către servicii. Serviciile pot rula pe porturi specificate de utilizator sau care pot fi atribuite automat.
Implementări (roll-outs)
Kubernetes:
Gestionarea aplicațiilor cu ajutorul Kubernetes deployment include modul de actualizare a aplicației. Principalul avantaj al deployment este capacitatea de a porni și opri un set de pod-uri într-un mod previzibil în cadrul strategiilor disponibile: rolling-update (înlocuirea pod-urilor existente) și recreate (eliminarea pod-urilor existente înainte de crearea altora noi). În cazul rolling update, procesul și efectul implementării pot fi modificate utilizând opțiunea maxUnavailable (permite setarea unui număr limită de pod-uri indisponibile) și maxSurge (determină limita numărului de pod-uri nou create).
Docker Swarm:
În mod implicit, programul de actualizare rulează câte o sarcină la un moment dat. Docker Swarm permite configurarea numărului de actualizări simultane și indicarea acțiunilor care ar trebui întreprinse de programul de actualizare în caz de defecțiune (în caz contrar, programul va opri actualizarea). Docker Swarm permite configurarea intervalelor de timp dintre actualizările programate.
Controlul bunei funcționări (health check)
Kubernetes:
Deține două tipuri de health checks: liveness care verifică capacitatea de răspuns a aplicației și readiness care verifică disponibilitatea aplicației (aplicația răspunde repede, dar, de exemplu, execută în prezent un proces care suspendă posibilitatea unui răspuns imediat). K8s are un mecanism de înregistrare a jurnalelor „încorporat” care permite monitorizarea activității între containerele care alcătuiesc un anumit pod.
Docker Swarm:
Opțiunea de verificare a stării de sănătate este limitată la site-uri web. Dacă containerul care susține serviciul nu pornește, noul container va fi pornit. Utilizatorul poate seta manual funcționalitatea verificării stării cu o instrucțiune HEALTHCHECK.
Stocare (storage)
Kubernetes:
Kubernetes are două API-uri de stocare: PersistentVolume (PV) și PersistentVolumeClaim (PVC). PersistentVolume este un element de memorie în cluster (inițiat de administrator sau dinamic prin clase de memorie). API-ul captează detaliile despre implementarea memoriei în masă, cum ar fi NFS, iSCSI sau un sistem de stocare specific pentru furnizorului de cloud, cum ar fi PersistentDisk for Google Cloud Platform. PersistentVolumeClaim include o cerere de stocare trimisă de utilizator. PVC este similar cu un pod; pod-ul consumă resursele node-ului, PVC consumă resursa PV. Poate solicita dimensiuni și moduri de acces specifice (de exemplu, pot fi instalate o dată pentru citire, o dată pentru scriere sau de multiple ori pentru o singură acțiune).
Modificarea resurselor de memorie utilizate de daemon-ul Docker într-un node poate duce la eliminarea temporară a node-ului din cluster.
Docker Swarm:
Docker Engine și platforma Docker Swarm suportă plasarea volumelor în containere. Volumele care conțin protocoale (de exemplu, NFS, iSCSI) pot fi configurate în node-uri. Plugin-urile iau în considerare diverse platforme, inclusiv Azure, Google Cloud Platform, NetApp sau Dell EMC.
Rețele (networking)
Kubernetes:
Platforma are un model plat de rețea care permite comunicarea între toate pod-urile. Politicile de rețea (network policies) indică modul în care pod-urile fac schimb de informații. Kubernetes necesită două CIDR (Classless Inter-Domain Routing): unul din care pod-urile primesc adrese IP și altul pentru servicii.
Docker Swarm:
În Docker Swarm, este posibilă gestionarea comunicării în rețea între gazde multiple prin crearea unei rețele de tip overlay. Pot fi create, de asemenea, rețele de tip bridge care permit comunicarea în interiorul host-ului. Utilizatorii pot cripta traficul de date (data traffic) din container în timpul creării rețelei overlay.
Performanță și scalabilitate (performance & scalability)
Kubernetes:
Kubernetes în versiunea 1.18 suportă clustere de până la 5000 de node-uri. Acceptă, de asemenea, configurații compuse în același timp din:
- până la 5000 de node-uri,
- până la 150 000 de pod-uri,
- până la 300 000 de containere,
- până la 100 de pod- uri pe un node.
Kubernetes asigură scalabilitate pe baza a două SLO-uri (Service Level Objectives):
- capacitate de reacție API: 99% dintre toate API-urile reacționează în mai puțin de 1 s,
- lansarea pod-ului: 99% dintre toate pod-urile și containerele acestora sunt lansate în mai puțin de 5 s.
Docker Swarm:
Docker se poate scala până la un nivel de 30 000 de containere și 1000 de node-uri administrate de un singur Swarm manager (node-ul principal).
Kubernetes versus Docker Swarm – avantajele și dezavantajele platformelor
Avantajele Kubernetes:
- proiect open source, modular și dezvoltat constant,
- cea mai mare comunitate dintre platformele de orchestrație – peste 50000 de commit-uri și 1200 de colaboratori,
- suportul organizației Cloud Native Computing Foundation (CNCF),
- funcționare bună pe fiecare sistem de operare,
- organizare ușoară și structură clară datorită pod-urilor.
Dezavantajele Kubernetes:
- o curbă de învățare abruptă – începuturile personale în Kubernetes pot fi dificile,
- necesită un set separat de instrumente de management, incl. kubectl CLI,
- nu este compatibil cu instrumentele DockerCLI și Docker Compose.
Avantajele Docker Swarm
- un proiect open source, dezvoltat de producător și comunitate,
- funcționare fără erori în mediul Docker, integrare completă cu Docker Compose și Docker CLI,
- instalare simplă și configurare rapidă,
- învățare mai ușoară datorită curbei plate de învățare.
Dezavantajele Docker Swarm
- funcționalități limitate la API-ul Docker,
- lipsa unui suport consistent în ceea ce privește lansările de producție pe scară largă,
- rezistență limitată la erori și defecțiuni,
- comunitate mică în comparație cu Kubernetes – 3000 de commit-uri și 160 de colaboratori.
.
Kubernetes vs. Docker Swarm: Care sistem merită ales pentru companie?
Alegerea instrumentului depinde de caracterul organizației și de produsul dezvoltat. Dacă valoarea principală este viteza de implementare (mai ales dacă produsul nu este foarte complex și exigent), merită să apelați la Docker Swarm. Avantajele sale incontestabile sunt simplitatea instalării, viteza de învățare și compatibilitatea cu mediul Docker.
Cu toate acestea, dacă principalele valori sunt stabilitatea și predictibilitatea dezvoltării, este mai bine să alegeți platforma Kubernetes – mai ales în cazul unui sistem extins, format din mii sau milioane de containere. Timpul necesar pentru a vă familiariza cu capacitățile platformei este mai lung, dar va merita datorită accesului la o multitudine de funcționalități și opțiuni utile de ajustare a platformei la nevoile individuale ale companiei.
Vă vom ajuta să alegeți o soluție
Dacă nu sunteți sigur care este cea mai bună soluție pentru produsul dvs., vă rugăm să ne contactați. Arhitectul nostru certificat Cloud Architect vă va sprijini în analiza și selectarea tehnologiei potrivite. În plus, dacă decideți să vă dezvoltați sistemul împreună cu noi pe baza Google Cloud Platform – o infrastructură cloud scalabilă – veți primi un voucher de 500 USD pentru a fi utilizat în GCP, asistență tehnică completă și opțiunea de plăti pentru serviciul cloud în RON.