Laboratorul 04 - Introducere in Kubernetes

Introducere

Kubernetes (prescurtat K8s) este cel mai popular orchestrator, folosit la scara larga si oferit ca si CaaS (Container as a Service) de toti vendorii de infrastructura (Amazon, Google, Microsoft). Este considerat standard in materie de deployment al serviciilor orchestrate.

Varianta originala este dezvoltata de Google, este open source, si face parte din Cloud Native Foundation (CNF). Fiecare vendor adauga pachete in plus, pentru a il adapta la ecosistemul proprietar (de exemplu, Azure adauga comenzi si straturi in plus peste varianta de baza).

Este mai complicat decat Docker Swarm, dar in multe situatii nu veti fi nevoiti sa rulati propriul vostru cluster de K8s, ci doar sa rulati aplicatii peste un cluster de kubernetes gata oferit (de exemplu, Azure Kubernetes Service (AKS)).

Avantajul major asupra Docker Swarm il ofera utilizarea sa in industrie, cat si faptul ca este mai flexibil si ofera mai multe functionalitati, insa nu out of the box. Faptul ca este customizabil implica, bineinteles, si un factor de dificultate mai mare. Kubernetes este mai greu de invatat decat Swarm, dar are si mai multe capabilitati.

Aici puteti vedea toti partenerii Kubernetes

Instalare

Kubernetes se poate seta in multe moduri:

Bootstrap la propriul cluster

Este metoda cea mai dificila, in care se leaga mai multe masini in retea folosind Kubeadm. Se foloseste pentru a crea un cluster de la 0 si necesita un nivel de cunostinte mediu-avansat.

Folosirea unui cluster deja setat

Asa cum am precizat in introducere, sunt putine cazurile cand veti trebui sa setati un cluster de la 0, deoarece vendorii principali de infrastructura au versiunile lor de Kubernetes si sistemele de CaaS deja pregatite.

Instalare locala

Cea mai buna metoda de a invata este sa va setati local un cluster cu un singur nod de kubernetes. Acest lucru se poate face in mai multe moduri:

  • Pentru utilizatorii Windows PRO care au si Docker instalat, Kubernetes vine preinstalat
  • Pentru utilizatorii Windows Non-Pro se foloseste Minikube
  • Pentru utilizatorii Linux, se foloseste MicroK8s

Arhitectura Kubernetes

Precum Docker Swarm, Kubernetes este un sistem format din mai multe componente:

  1. Kubectl - CLI pentru configurarea clusterului si managementului aplicatiilor. Asemanator cu comanda docker
  2. Node - nodul fizic din cadrul unui cluster
  3. Kubelet - agentul (daemon) de Kubernetes care ruleaza pe fiecare nod
  4. Control Plane - colectia de noduri care fac management la cluster. Include API Server, Scheduler, Controller Manager, CoreDNS, Etcd. Asemanator cu nodurile “master” din Docker Swarm.

Componentele unei aplicatii Kubernetes

La fel ca in cadrul Docker Swarm, Kubernetes foloseste o ierarhie logica de componente pentru aplicatii:

  • Pod - unitatea fundamentala de lucru. Un pod contine intotdeauna containere.
  • Controllere - creaza, actualizeaza si mentine starea de rulare a pod-urilor. Echivalentul unui serviciu din docker swarm.

Exemple de controllere: Deployment, ReplicaSet, StatefulSet, DaemonSet, Job, CronJob

  • Service - endpoint de conectare in retea. Se ataseaza unui pod. Echivalentul configuratiei de retea din docker swarm.

Tipurile de services sunt: NodePort, ClusterIP si LoadBalancer.

  • Storage - obiecte care se ocupa de persistarea datelor. PersistentVolume (PV) si PersistentVolumeClaim (PVC). Asemanator cu docker mounts.

Datorita PV si PVC, in kubernetes se poate realiza persistarea datelor chiar si intre mai multe noduri. In cadrul Docker Swarm eram limitati la utilizarea unui NFS extern.

  • Namespace - grup de obiecte intr-un cluster. Asemanator cu stack din docker swarm
  • Configurations - obiecte de configuratie. Exemple de obiecte de configuratie: Secrets, ConfigMaps

Exemplu Comenzi

## Kubernetes Local Install
 
### minikube
 
minikube start
 
### microk8s
 
microk8s.kubectl
 
microk8s.enable dns
 
alias kubectl=microk8s.kubectl
 
## Kubectl run, create and apply
 
kubectl run
 
kubectl create
 
kubectl apply
 
## Pornirea unui Pod
 
kubectl version
 
kubectl run my-nginx --image nginx
 
kubectl get pods
 
kubectl get all
 
kubectl delete deployment my-nginx
 
kubectl get all
 
## Scalarea unui Pod (se foloseste de ReplicaSet)
 
kubectl run my-apache --image httpd
 
kubectl get all
 
kubectl scale deploy/my-apache --replicas2
 
kubectl scale deployment my-apache --replicas2
 
kubectl get all
 
## Inspectarea obiectelor Kubernetes
 
kubectl get pods
 
kubectl logs deployment/my-apache
 
kubectl logs deployment/my-apache --follow --tail 1
 
kubectl logs -l run=my-apache
 
kubectl get pods
 
kubectl describe pod/my-apache-<pod id>
 
kubectl get pods -w
 
kubectl delete pod/my-apache-<pod id>
 
kubectl get pods
 
kubectl delete deployment my-apache

Gasiti cateva exemple de fisiere declarative in repository-ul laboratorului.

cc/laboratoare/04.txt · Last modified: 2021/11/09 14:12 by radu.ciobanu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0