Noțiuni introductive cu Kubernetes: o introducere pentru începători

Kubernetes este un sistem open-source extrem de popular, destinat automatizării proceselor de gestionare a containerelor software.

Un studiu recent al Cloud Native Computing Foundation (CNCF) a arătat că 96% dintre organizații folosesc sau iau în considerare adoptarea K8s. În prezent, aproximativ 5,8 milioane de dezvoltatori la nivel global utilizează Kubernetes, ceea ce reprezintă 31% din totalul dezvoltatorilor backend.

Principalul avantaj al acestui sistem este capacitatea sa de a îmbunătăți scalabilitatea, disponibilitatea și timpul de implementare. Dacă mulți dezvoltatori încep călătoria în lumea containerelor cu Docker (un instrument bazat pe linia de comandă pentru gestionarea containerelor individuale), K8s oferă abstracții de nivel superior, permițând definirea aplicațiilor și infrastructurii acestora prin intermediul unor scheme colaborative.

Acest articol se adresează în special celor care sunt la început de drum cu Kubernetes, oferind o introducere în elementele de bază și informații utile pentru a demara. Veți descoperi cum K8s poate contribui la accelerarea dezvoltării produselor dvs. digitale.

Ce este Kubernetes și de ce este necesar?

Kubernetes este un motor open-source de orchestrarare, un cadru folosit pentru automatizarea implementării, scalării și gestionării aplicațiilor containerizate. Acesta asigură predictibilitatea și disponibilitatea aplicațiilor.

Pentru a înțelege mai bine, să ne imaginăm o aplicație pe care ați containerizat-o. Pentru a deservi utilizatorii, trebuie să rulați mai multe instanțe ale acestui container. Problemele apar în momentul în care aceste containere trebuie gestionate. Ele pot fi rulate pe mașini diferite, ceea ce complică situația. Care este soluția?

Aici intervine Kubernetes, oferind o metodă eficientă de gestionare a acestor procese. Deși K8s poate fi comparat cu un motor de containere precum Docker, el este, de fapt, un orchestrator de containere. Ca dezvoltator începător, nu este necesar să vă preocupați de detaliile implementării orchestrației. Cel mai probabil, nu veți configura un cluster K8s pentru aplicația dvs.; vom detalia acest aspect mai târziu.

Veți interacționa însă cu clusterele configurate de echipa dvs. de infrastructură. Este esențial să vă familiarizați cu obiectele cu care veți interacționa. Înainte de toate, este util să aveți o înțelegere generală a arhitecturii sistemului, pentru a înțelege modul în care funcționează.

Caracteristicile Kubernetes

Kubernetes oferă numeroase funcționalități pentru rularea containerelor și a infrastructurii asociate. Iată o listă cu cele mai importante:

  • Lansări automate, scalare și rollback: K8s automatizează crearea numărului dorit de copii (replici), distribuirea acestora pe hardware-ul corespunzător și reprogramarea containerelor în cazul în care un nod devine indisponibil. Puteți scala instantaneu numărul de replici în funcție de cerere sau de necesități (ex: utilizarea procesorului).
  • Descoperirea serviciilor, echilibrarea încărcării și intrarea în rețea: Kubernetes oferă o soluție de rețea integrată, inclusiv descoperirea serviciilor interne și expunerea containerelor publice.
  • Aplicații cu stare și fără stare: Inițial, K8s se concentra pe containerele fără stare. Odată cu evoluția tehnologiei, acesta găzduiește acum și aplicații cu stare. Teoretic, orice tip de aplicație poate rula pe Kubernetes.
  • Gestionarea stocării: Indiferent de sistemul de fișiere utilizat (local, în rețea partajată sau în cloud), Kubernetes oferă stocare persistentă pentru aplicațiile care rulează în containere. Această abstractizare permite definirea cerințelor de stocare, independent de infrastructura de bază, prin mecanisme precum volume persistente (PV), revendicări de volume persistente (PVC), clase de stocare și plugin-uri de volum.
  • Stare declarativă: K8s folosește fișiere YAML (Yet Ain’t Markup Language), denumite manifest, pentru a specifica stările dorite ale clusterului. Manifestele determină cum arată clusterul, inclusiv instanțele de aplicații, regulile de rețea și alte configurații. K8s gestionează automat toate tranzițiile de stare, fără a fi nevoie de scripturi personalizate.
  • Medii de lucru multiple: Kubernetes poate fi utilizat atât în cloud, cât și pe stația de lucru a dezvoltatorului. Distribuții diverse sunt disponibile pentru a acoperi diverse cazuri de utilizare. Furnizori importanți de servicii cloud precum Amazon Web Services, Google Cloud și Microsoft Azure oferă servicii Kubernetes gestionate. Distribuții single-node, cum ar fi Minikube și K3s, sunt disponibile pentru uz local.
  • Extensibilitate avansată: K8s este o colecție de funcționalități extinse. Capacitățile sale pot fi îmbunătățite prin extensii. Puteți crea tipuri de obiecte personalizate, operatori și controllere pentru a simplifica anumite sarcini.

Arhitectura Kubernetes

La bază, arhitectura Kubernetes include un nod principal (master) și cel puțin un nod de lucru (slave). Nodul master controlează clusterul, iar nodurile de lucru rulează efectiv aplicațiile.

Sursa: kubernetes.io

Mai jos găsiți o descriere detaliată a componentelor.

Nodul(ele) master

Nodul master stabilește stările clusterului și decide acțiunile fiecărui nod individual. Configurația nodului master necesită mai multe procese.

  • Server API: Toate comunicările clusterului trec prin acest punct. Acesta este punctul de acces care permite tuturor componentelor clusterului să facă schimb de informații și expune API-ul Kubernetes. Serverul API îndeplinește două roluri principale: punctul de intrare pentru interacțiunea utilizatorilor cu clusterul (de ex., trimiterea de cereri prin Kubectl), și autentificarea și validarea cererilor (doar anumiți utilizatori pot executa cereri).
  • Scheduler: Planificatorul atribuie aplicațiile (obiectele workload) nodurilor de lucru. Acesta plasează pod-urile pe noduri în funcție de cerințele de resurse. Un pod este o unitate mică de implementare în Kubernetes.
  • Controller Manager: Această componentă monitorizează clusterul (de ex., eșecul nodurilor) și menține numărul corect de pod-uri. Detectează modificările de stare ale clusterului (de ex., căderea pod-urilor) și încearcă să restabilească pod-ul la starea inițială. Dacă un pod moare, controller manager-ul solicită planificatorului să determine pe ce nod va fi creat noul pod, iar kubelet va crea efectiv pod-ul.
  • etcd: Denumit și „creierul” clusterului. Aceasta este o bază de date de tip cheie-valoare pentru configurația clusterului, unde sunt înregistrate toate modificările. Puteți crea copii de rezervă ale clusterului prin salvarea acestei baze de date. Rețineți că aici sunt stocate doar datele privind starea clusterului, nu și datele aplicației.

Nodul(ele) sclav

Fiecare nod slave are instalate trei procese care permit K8s să interacționeze cu el și să lanseze pod-uri individuale. Aceste procese sunt:

  • Kubelet: Acesta este serviciul principal Kubernetes care gestionează execuția containerelor. Fără kubelet, Kubernetes ar fi doar un API REST cu o bază de date cheie-valoare. K8s execută aplicațiile în containere, care sunt izolate atât una de cealaltă, cât și de sistemul gazdă. Această abordare permite decuplarea managementului aplicațiilor de infrastructura fizică sau virtuală. Kubelet interacționează cu nodul și containerul, preia fișierele de configurare și lansează pod-uri folosind runtime-ul containerului.
  • Runtime-ul containerului: Această componentă rulează efectiv containerele. Exemple includ Docker, rkt sau containerd.
  • Kube-proxy: Această componentă oferă un strat de abstractizare pentru pod-urile de noduri, urmând reguli comune precum echilibrarea încărcării. Toate nodurile folosesc Kube-proxy pentru a furniza o adresă IP virtuală clienților care accesează pod-uri dinamice, asigurând echilibrarea încărcării cu o amprentă de performanță scăzută.

Cum funcționează containerizarea

Containerizarea presupune virtualizarea tuturor componentelor necesare unei aplicații software într-o singură unitate. Un container conține biblioteci, binare și toate configurațiile necesare aplicației, dar nu include resurse kernel sau hardware virtualizat.

Containerele rulează deasupra timpurilor de execuție, care gestionează resursele. Deoarece containerele includ doar componentele de bază și dependențele aplicației, acestea sunt ușoare și mai rapide comparativ cu mașinile virtuale.

Citește și: Containere vs. Mașini virtuale: Explicarea diferențelor

Cum se instalează și se configurează Kubernetes

După atâta teorie, vom trece la aspectele practice. Această secțiune detaliază instalarea pe sistemul de operare Windows.

Instalarea pe Windows poate fi realizată atât prin linia de comandă, cât și prin interfața grafică. Asigurați-vă că sistemul dvs. respectă următoarele cerințe:

Hardware: nod master cu minimum 2 GB de memorie și 700 MB pentru nodul de lucru. Software: Hyper-V, Docker Desktop, adresă MAC unică și un UUID unic pentru fiecare nod. Iată pașii necesari.

Instalarea și configurarea Hyper-V

Hyper-V este software-ul de virtualizare implicit al Windows, similar cu un VirtualBox avansat. Acesta permite gestionarea mașinilor virtuale prin interfața grafică Microsoft sau prin linia de comandă. Pentru a activa Hyper-V, urmați acești pași:

  • Deschideți Panoul de control.
  • Faceți clic pe Programe.
  • În secțiunea Programe și funcții, faceți clic pe „Activare sau dezactivare caracteristici Windows”.
  • Selectați caracteristicile Hyper-V și Hypervisor pentru Windows.
  • Faceți clic pe OK; sistemul va reporni pentru a activa setările.

Computerul poate reporni încă o dată pentru a asigura configurarea corectă. Pentru a verifica instalarea, introduceți următoarea comandă în Power Shell:

Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V

Asigurați-vă că starea afișată este „Enabled”.

Instalarea Docker

După cum am menționat, K8s este un instrument de orchestrare a containerelor construit pe baza containerelor; Docker este o alegere potrivită. K8s comunică cu Docker și gestionează totul la nivel de întreprindere. Descărcați Docker pentru Windows. Docker Desktop este preferat pentru simplificarea dezvoltării, distribuirii și rulării aplicațiilor dockerizate.

Este cea mai rapidă metodă de a construi aplicații Docker pe Windows, folosind Hyper-V și rețele. Odată instalat, Docker este accesibil din orice terminal. Pentru un ghid detaliat, consultați documentația oficială Docker. Dacă întâmpinați probleme (de ex., pictograme ascunse), o repornire a mașinii poate rezolva problema.

Instalarea Kubernetes

Interfața grafică Docker permite configurarea, instalarea și activarea Kubernetes. Pentru a instala K8s, urmați pașii de mai jos:

  • Faceți clic dreapta pe pictograma Docker și selectați Proprietăți.
  • Selectați „Setări” din meniul drop-down.
  • În panoul din stânga, alegeți „Kubernetes” și faceți clic pe „Aplicați”.

Docker va instala pachete și dependențe suplimentare. Procesul poate dura între cinci și zece minute, în funcție de viteza internetului. Aplicația Docker poate fi folosită pentru a verifica dacă totul funcționează corect.

Deoarece aplicațiile Kubernetes pot fi implementate prin CLI, poate fi necesară instalarea tabloului de bord K8s, care nu este instalat implicit. Pentru a-l instala, urmați acești pași:

  • Descărcați fișierul de configurare YAML.
  • Implementați aplicația cu ajutorul codului: `kubectl apply -f .yaml`.
  • Verificați instalarea cu: `kubectl get -f .yaml`.

Pentru a accesa tabloul de bord, rulați următoarea comandă în Power Shell:

  • Rulați următorul cod: `((kubectl -n kube-system describe secret default | select-string „token:”) -split ” +”)[1]`
    • Copiați token-ul generat și rulați `kubectl proxy`.
  • Deschideți acest link în browser.
  • Faceți clic pe `Token` și inserați token-ul.
  • Conectați-vă.

Dacă ați ajuns până aici, ecranul dvs. ar trebui să afișeze tabloul de bord K8s. Acum puteți gestiona aplicațiile fără a folosi linia de comandă.

Citește și: Cum se instalează Kubernetes pe Ubuntu 18

Cum să creați și să gestionați un cluster Kubernetes

Dacă ați urmat instrucțiunile de mai sus, Kubernetes ar trebui să fie instalat pe sistemul dvs. Acum urmați pașii de mai jos pentru a crea și gestiona un cluster:

  • Configurați rețeaua: Este necesară configurarea rețelei pentru ca nodurile din cluster să poată comunica între ele.
  • Configurați autentificarea: Creați mecanisme de autentificare și autorizare pentru accesul la cluster.
  • Configurați componentele principale: Includeți serverul API, planificatorul și controller manager-ul.
  • Alăturați nodurile de lucru: Conectați nodurile de lucru la cluster folosind fișierele de configurare furnizate de procesul de configurare al clusterului.
  • Implementați suplimente: Puteți instala extensii pentru a îmbunătăți funcționalitatea clusterului.
  • Gestionați sarcinile de lucru: Acum este momentul să implementați aplicațiile.

Acesta este doar un rezumat al procesului de creare a unui cluster, care implică mulți pași și comenzi. Consultați ghidul oficial pentru a învăța cum să creați clustere înainte de implementare.

Cum să implementați prima aplicație cu Kubernetes

Cea mai folosită comandă în K8s este `kubectl`, care vă permite să efectuați acțiuni specifice (de ex., crearea sau ștergerea unei resurse).

Dacă sunteți blocat, utilizați `–help` după o comandă secundară pentru informații suplimentare.

De exemplu: `kubectl get nodes –help`. Pentru a implementa prima aplicație, folosiți comanda: `kubectl create deployment kubernetes-bootcamp –image=gcr.io/google-samples/kubernetes-bootcamp:v1`.

Cuvinte finale

Acest ghid a oferit o introducere în tehnologia Kubernetes. Ați aflat despre beneficii, caracteristici și arhitectura sa. Sperăm că ați consultat și alte resurse pentru a înțelege modul în care funcționează sistemul.

Deși înțelegerea întregului ecosistem poate părea complicată la început, acest ghid a oferit o bază solidă pentru a începe cu K8s. Pentru a vă dezvolta abilitățile, vă recomandăm documentația oficială Kubernetes ca referință suplimentară. Cu cât exersați mai mult, cu atât mai repede veți deveni un expert în K8s.

Apoi, consultați tutorialele Kubernetes pentru începători.