Cum să implementați aplicații în Kubernetes

Kubernetes este una dintre cele mai populare platforme de automatizare pentru implementarea, scalarea și operarea containerelor de aplicații pe un cluster de gazde sau noduri.

Acest articol va discuta despre unul dintre obiectele centrale din Kubernetes: implementarea. Scopul este de a înțelege comportamentul acestuia și cum să-l creați, actualizați și ștergeți.

Ce este o implementare?

O implementare este unul dintre obiectele utilizate pentru lansarea Pod-urilor. Cele mai bune practici Kubernetes încurajează utilizarea implementărilor pentru aplicații fără stat. Fără o implementare, ar trebui să creați, să actualizați și să ștergeți manual mai multe Pod-uri, ceea ce ar fi plictisitor și imposibil pentru multe Pod-uri.

O implementare declară un singur obiect în YAML, care nu numai că creează Pod-urile, ci se asigură și că acestea sunt actualizate și rulează. Puteți, de asemenea, să vă scalați automat aplicațiile folosind o implementare pe Kubernetes. Astfel, o implementare este utilizată pentru a scala, a implementa și a rula înapoi versiunile aplicațiilor dvs. din Pods.

O implementare îi spune lui Kubernetes câte copii ale unui Pod vrem să rulăm, iar Kubernetes se ocupă de restul. Controlerul asociat va crea un ReplicaSet din configurația dvs. atunci când creați o implementare. Controlerul asociat cu ReplicaSet va crea o serie de Pod-uri din configurația ReplicaSet.

Avantajele utilizării unei implementări în loc de a crea direct un ReplicaSet sunt:

  • Istorizarea obiectului: fiecare modificare a obiectului (prin „aplicare” sau „editare”) va crea o copie de rezervă a versiunii anterioare.
  • Gestionarea lansării și derulării înapoi: puteți reveni la o configurație în legătură cu punctul anterior.
  Cum să încorporați un desen Google în Google Docs

Crearea unei implementări

Există două metode pe care le putem folosi pentru a crea o implementare Kubernetes:

Metoda imperativă

API-urile Kubernetes permit o abordare mai directă și mai imperativă fără a necesita fișiere de configurare sau manifeste formatate YAML. În această abordare, tot ce trebuie să facem este să spunem ce vrem să se facă, iar Kubernetes își va asuma responsabilitatea pentru definirea a ceea ce trebuie făcut pentru a obține rezultatul așteptat.

Pentru a utiliza metoda imperativă, trebuie doar să utilizați comanda de mai jos:

kubectl create deployment nginx-deployment --image nginx --port=80

Metoda Declarativă

În această metodă, trebuie să declarați totul, iar când utilizați acest cod, Kubernetes doar vă citește definițiile și creează exact așa cum sunt prezentate sau declarate.

Pentru a utiliza implementarea declarativă, va trebui să creați un fișier YAML.

Fișier YAML pentru implementare cu numele new_deployment.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
spec:
  #Specifies the number of Pod Copies
  replicas: 3
 #Selects the Pod to be managed by the deployment
  selector:
    #Matches the defined labels
    matchLabels:
      deploy: example
  template:
    metadata:
      #Specifies the labels on the Pod.
       labels:
         deploy: example
    spec:
      containers:
        - name: nginx
          image: nginx:1.20.2 

În acest fișier YAML, după definirea versiunii Kubernetes API, a tipului de obiect pe care îl creați și a numelui implementării, există secțiunea specificații. În această secțiune, definiți mai întâi cheia de replici, care indică numărul de instanțe Pod pe care implementarea trebuie să le mențină activă.

Utilizați o etichetă de selecție pentru a identifica podurile din implementare. Pentru aceasta, puteți utiliza eticheta de implementare, care spune că toate podurile care se potrivesc cu aceste etichete sunt grupate în implementare.

După aceea, aveți obiectul șablon în care aveți un model Pod în specificația dvs. de implementare. Când implementarea creează Pod-uri, le creează folosind acest șablon. Specificațiile unui pod obișnuit pot fi găsite sub cheia șablon.

  10 cele mai bune bloguri Java pentru programatori de toate nivelurile

Odată cu această implementare, imaginile Nginx cu etichete vor fi implementate în Pods. Mai mult, trebuie să fii atent și la acest punct, iar Pod-ul este unitatea de scalabilitate din Kubernetes, așa că trebuie să te gândești la modelul pe care vrei să-l folosești dacă pui mai multe containere în același Pod.

Apoi, aplicați fișierul new_deployment.yaml Yaml, utilizați următoarea comandă:

kubectl apply -f new_deployment.yaml

După câteva secunde, puteți obține starea implementării utilizând următoarele:

kubectl get all

Preluați și actualizați implementarea

Rețineți că aveți podurile create, implementarea și, de asemenea, un Replicaset. Deci, o implementare creează și gestionează întotdeauna un Replicaset. Acum puteți folosi următoarea comandă pentru a descrie implementarea:

kubectl describe deployment nginx-deployment 

Acum aveți o descriere completă a implementării. Evidențiază strategia utilizată pentru a crea/reconstrui podurile atunci când o actualizare a fost definită ca RollingUpdate.

Strategia RollingUpdate permite o migrare ordonată a unei versiuni a unei aplicații la o versiune mai nouă. Este strategia implicită folosită în Kubernetes.

În plus, avem și următoarele strategii:

  • Recreează: termină instanțele Pod care rulează în prezent și le „recreează” cu noua versiune;
  • Albastru/Verde: Această strategie creează două medii separate, dar identice. În mediul albastru, aplicația rulează așa cum este, în timp ce în mediul verde, aplicația rulează așa cum va fi în viitor;
  • Canary: o strategie de implementare în care un subset de utilizatori este implicat în lansarea incrementală a unei aplicații sau a unui serviciu.

Dacă optați pentru „actualizare rulantă”, puteți configura comportamentul acestuia cu privire la numărul de replici dorit.

  • maxSurge vă permite să indicați (în termeni procentuali sau absoluti) câte Pod-uri poate crea în plus față de numărul de replici configurat în prezent.
  • maxUnavailable vă permite să indicați (în termeni procentuali sau absoluti) câte Pod-uri pot fi „indisponibile” în timpul actualizării, în funcție de numărul de replici configurate.
  Faceți-vă scrisul mai ușor de citit utilizând 1000 de cuvinte utilizate în mod obișnuit

În funcție de aplicația dvs. și de autoscaler, aceste configurații vă vor permite să asigurați QoS sau să vă accelerați implementările.

Apoi, trebuie să scalați Pod-urile la 10 și să schimbați eticheta de imagine Nginx la cea mai recentă.

kubectl scale deployment nginx-deployment --replicas=10

Rețineți că avem 5 containere în curs de creare, iar din 10 Pod-uri avem 5 disponibile.

După câteva secunde, utilizați următoarea comandă:

kubectl get all

Aici puteți vedea că toate podurile au fost create și containerele rulează.

Ștergerea implementării dvs

Pentru a șterge o implementare Kubernetes, puteți folosi următoarele comenzi:

kubectl delete deploy nginx-deployment 
kubectl delete deploy new_deployment.yaml

Helm: simplificați implementările

Când doriți să implementați o aplicație complexă care utilizează zeci sau chiar sute de resurse Kubernetes, instrumentul kubectl devine nepotrivit, motiv pentru care a fost dezvoltat instrumentul Helm. Helm este un manager de pachete pentru Kubernetes care se bazează pe kubectl și simplifică implementarea aplicațiilor.

În vocabularul Helm, o aplicație se numește lansare. Este asociat cu o diagramă, adică o colecție de fișiere de configurare în format YAML care conține variabile globale și șabloane care descriu resursele Kubernetes.

Concluzie

Implementarea este un obiect Kubernetes esențial. Întrucât o mare putere implică o mare responsabilitate, trebuie să fii atent când o configurați sau riscați să aveți comportamente neașteptate. Pentru a merge mai departe cu configurațiile de implementare, puteți consulta documentația Kubernetes.

De asemenea, puteți explora unele dintre cele mai bune tutoriale Kubernetes pentru a învăța de la zero și a deveni un expert.