Kubernetes și Docker

Configurare noua (How To)

Situatie

Ai construit o aplicație web. Vine momentul să o urci pe un server real și brusc nimic nu mai funcționează. Lipsesc dependențe, versiunile de biblioteci nu se potrivesc, configurările sunt altele. E clasicul „la mine merge”.

Acum gândește-te că aplicația ta crește. Nu mai ai un singur serviciu, ci zece, douăzeci, poate cincizeci de bucăți separate care trebuie să lucreze împreună. Fiecare trebuie să ruleze pe cont propriu, să vorbească cu celelalte, să se ridice singur dacă pică și să facă față când vine val de trafic.

Solutie

Docker este o platformă de containerizare. Un container e practic o cutie izolată în care pui aplicația ta împreună cu tot ce are nevoie ca să funcționeze: biblioteci, configurări, variabile de mediu, absolut tot.

  • În primul rând, aduce consistență. Aplicația se comportă la fel pe laptopul tău, pe serverul de test și în producție. Nu mai există surprize de genul „dar la mine mergea”.
  • Apoi vine izolarea. Fiecare container trăiește în lumea lui. Dacă un serviciu se prăbușește, celelalte continuă liniștite.
  • Mai e și portabilitatea. Un container Docker poate rula pe orice mașină care are Docker instalat. Nu contează dacă e Linux, Mac sau Windows.
  • Și nu în ultimul rând, viteza. Containerele pornesc în câteva secunde. Compară asta cu o mașină virtuală care are nevoie de minute bune doar ca să se trezească.

Scrii un fișier numit Dockerfile în care descrii exact ce are nevoie aplicația ta. Spui ce imagine de bază vrei (poate Ubuntu, poate Alpine Linux), ce pachete trebuie instalate, unde stau fișierele aplicației și cum se pornește totul. Apoi construiești o imagine din fișierul ăla și o rulezi ca un container. Atât. Ai un mediu care se comportă la fel de fiecare dată.

Kubernetes sau K8s cum îi spun toți, este o platformă de orchestrare. Dacă Docker se ocupă de un singur container, Kubernetes se ocupă de sute sau mii de containere în același timp.

  • Orchestrarea este problema cea mare. Kubernetes decide pe ce server rulează fiecare container, distribuie încărcarea și se asigură că totul merge bine împreună.
  • Scalarea automată e un alt punct important. Când un serviciu primește mult trafic, Kubernetes pornește singur instanțe noi. Când traficul scade, le oprește. Nu trebuie să faci nimic manual.
  • Apoi e capacitatea de a se repara singur. Dacă un container pică, Kubernetes îl restartează. Dacă un server întreg cade, mută containerele pe altul. Totul se întâmplă automat.
  • Actualizările sunt și ele elegante. Kubernetes poate înlocui treptat containerele vechi cu versiuni noi, fără ca utilizatorii să simtă vreo pauză.
  • Și mai e partea de comunicare între servicii. Containerele se găsesc și vorbesc între ele automat, fără să stai tu să configurezi adrese IP manual.

Diferența dintre Docker și Kubernetes

Aici apare cea mai frecventă confuzie. Multă lume crede că Docker și Kubernetes sunt concurente, că trebuie să alegi între ele. Nu e cazul. Fac lucruri complet diferite și se completează unul pe celălalt.

  • Docker lucrează la nivel individual. Ia aplicația ta, o împachetează într-un container, o pornește, o oprește. E unealta cu care pregătești pachetul.
  • Kubernetes nu știe să construiască containere. Le primește gata făcute și decide unde să le pună, câte să ruleze din fiecare și ce se întâmplă când ceva nu merge.

Kubernetes nu poate face nimic de unul singur. Are nevoie de ceva care să ruleze efectiv containerele. Docker a fost mult timp alegerea principală pentru treaba asta. Între timp au apărut și alternative ca containerd sau CRI-O, dar ideea rămâne aceeași: fără un motor de containerizare, Kubernetes nu are ce orchestra.

Poți folosi Docker singur și mulți fac asta. Dar în momentul în care ai mai mult de câteva containere, lucrurile devin complicate repede.Cine restartează un container care a picat la 3 dimineața? Cum scalezi de la 2 instanțe la 20 când vine o campanie de marketing? Cum faci un deploy fără să oprești tot pentru utilizatori? Cum distribui containerele pe mai multe servere?

La toate întrebările astea răspunsul e Kubernetes. Docker creează containerele. Kubernetes le dă viață la scară mare.

Mai întâi containerizezi cu Docker

Împachetezi fiecare serviciu într-un container. Scrii un Dockerfile curat, creezi imagini optimizate și le urci într-un registry, fie el Docker Hub, GitHub Container Registry sau unul privat.

Apoi orchestrezi cu Kubernetes

Descrii infrastructura în fișiere YAML. Spui câte instanțe vrei din fiecare serviciu, cum comunică între ele, ce resurse au nevoie și cum se scalează. Kubernetes se ocupă de tot restul.

Conectezi fluxul într-un pipeline CI/CD. La fiecare commit se construiește automat o imagine Docker nouă, se testează, iar Kubernetes o pune în producție fără să intervină cineva manual.

Tip solutie

Permanent

Voteaza

(16 din 36 persoane apreciaza acest articol)

Despre Autor

Leave A Comment?