spinny:~/writing $ less introduction-to-kubernetes.md
12Daca lucrezi in lumea dezvoltarii software, cu siguranta ai auzit de Kubernetes. Dar ce este exact si de ce a devenit standardul de facto pentru gestionarea aplicatiilor containerizate? Acest ghid te va duce de la baze la conceptele fundamentale, cu exemple practice si diagrame pentru a te ajuta sa intelegi.34## Inainte de Kubernetes: Un pic de istorie56Pentru a intelege de ce Kubernetes este atat de revolutionar, sa facem un pas inapoi.781. **Implementare traditionala**: Initial, aplicatiile rulau pe servere fizice. Aceasta abordare era costisitoare, dificil de scalat si predispusa la conflicte de resurse.92. **Implementare virtualizata**: Apoi au aparut masinile virtuale (VM). VM-urile au permis mai multor aplicatii izolate sa ruleze pe acelasi hardware, imbunatatind utilizarea resurselor si securitatea. Totusi, fiecare VM ruleaza un sistem de operare complet, consumand multe resurse.103. **Implementare containerizata**: Containerele (precum Docker) sunt urmatoarea evolutie. Ele impart acelasi sistem de operare gazda dar ruleaza procese izolate. Sunt usoare, rapide la pornire si portabile.1112Containerele au rezolvat problema portabilitatii dar au creat alta: cum sa gestionezi sute (sau mii) de containere intr-un mediu de productie? Cum sa te asiguri ca ruleaza mereu, pot comunica intre ele si pot scala in functie de incarcare?1314Aici intervine **Kubernetes**.1516## Ce este Kubernetes?1718Kubernetes (adesea abreviat ca **K8s**) este o platforma open-source pentru orchestrarea containerelor. Pe scurt, automatizeaza implementarea, scalarea si gestionarea aplicatiilor containerizate. Creat de Google si acum intretinut de Cloud Native Computing Foundation (CNCF), Kubernetes a devenit instrumentul de referinta pentru oricine lucreaza cu microservicii la scara.1920## Arhitectura unui cluster Kubernetes2122Un mediu Kubernetes se numeste **cluster**. Un cluster este compus dintr-un set de masini, numite **noduri**, care ruleaza aplicatiile noastre. Arhitectura este impartita in doua parti principale: Planul de control si Nodurile Worker.2324```mermaid25graph TD26 subgraph "Control Plane (Master)"27 A["API Server"]28 B["etcd"]29 C["Scheduler"]30 D["Controller Manager"]31 end3233 subgraph "Worker Node 1"34 E["Kubelet"] --- F["Container Runtime"]35 G["Kube-proxy"]36 F --- H["Pod"]37 F --- I["Pod"]38 end3940 subgraph "Worker Node 2"41 J["Kubelet"] --- K["Container Runtime"]42 L["Kube-proxy"]43 K --- M["Pod"]44 end4546 A -- "Communicates with" --> E47 A -- "Communicates with" --> J48 User -- "kubectl" --> A49 C -- "Assigns Pods to Nodes" --> E50 D -- "Maintains state" --> A51 A -- "Saves/Reads state" --> B52```5354### Planul de control5556Planul de control este "creierul" clusterului. Ia decizii globale (precum planificarea) si detecteaza si raspunde la evenimentele clusterului. Componentele sale principale sunt:5758- **API Server (`kube-apiserver`)**: Este poarta de acces la cluster. Expune API-ul Kubernetes, utilizat de utilizatori (prin `kubectl`), componentele clusterului si instrumentele externe.59- **etcd**: O baza de date cheie-valoare consistenta si inalt disponibila. Stocheaza toate datele clusterului.60- **Scheduler (`kube-scheduler`)**: Asigneaza Pod-urile nou create unui Nod Worker disponibil.61- **Controller Manager (`kube-controller-manager`)**: Ruleaza controlere, care sunt bucle de control ce urmaresc starea clusterului si lucreaza pentru a o aduce la starea dorita.6263### Nodul Worker6465Nodurile Worker sunt masinile unde aplicatiile ruleaza efectiv. Fiecare nod contine:6667- **Kubelet**: Un agent care ruleaza pe fiecare nod. Se asigura ca containerele descrise in Pod-uri ruleaza si sunt sanatoase.68- **Kube-proxy**: Un proxy de retea care gestioneaza regulile de retea pe noduri.69- **Container Runtime**: Software-ul responsabil pentru rularea containerelor. Docker este cel mai faimos, dar Kubernetes suporta si alte runtime-uri precum `containerd` si `CRI-O`.7071## Obiecte fundamentale Kubernetes7273In Kubernetes, totul este reprezentat de **obiecte**. Iata cele mai importante:7475### Pod7677**Pod-ul** este cea mai mica unitate de executie in Kubernetes. Reprezinta unul sau mai multe containere care ruleaza impreuna pe acelasi nod, impartind resurse precum reteaua si stocarea.7879### Deployment8081Un **Deployment** este obiectul pe care il vei folosi cel mai des. Descrie starea dorita pentru un grup de Pod-uri identice.8283```yaml84# nginx-deployment.yaml85apiVersion: apps/v186kind: Deployment87metadata:88 name: nginx-deployment89spec:90 replicas: 391 selector:92 matchLabels:93 app: nginx94 template:95 metadata:96 labels:97 app: nginx98 spec:99 containers:100 - name: nginx101 image: nginx:1.14.2102 ports:103 - containerPort: 80104```105106### Service107108Pod-urile in Kubernetes sunt efemere. Un **Service** ofera un **punct de acces stabil** (o adresa IP virtuala si un nume DNS) pentru un grup de Pod-uri.109110```mermaid111graph TD112 subgraph "Service (nginx-service)"113 A["ClusterIP: 10.96.0.10"]114 end115116 subgraph "Pods"117 B("Pod 1 - IP: 192.168.1.2")118 C("Pod 2 - IP: 192.168.1.3")119 D("Pod 3 - IP: 192.168.1.4")120 end121122 A -- "Selector: app=nginx" --> B123 A -- "Selector: app=nginx" --> C124 A -- "Selector: app=nginx" --> D125126 Client -- "Request to nginx-service" --> A127```128129```yaml130# nginx-service.yaml131apiVersion: v1132kind: Service133metadata:134 name: nginx-service135spec:136 selector:137 app: nginx138 ports:139 - protocol: TCP140 port: 80141 targetPort: 80142 type: ClusterIP # Default - expune serviciul doar in cadrul clusterului143```144145Exista diferite tipuri de Servicii:146- `ClusterIP`: Expune serviciul pe un IP intern al clusterului (implicit).147- `NodePort`: Expune serviciul pe un port static pe fiecare Nod Worker.148- `LoadBalancer`: Creeaza un load balancer extern in furnizorul cloud si asigneaza un IP public serviciului.149150### Ingress151152Un **Ingress** actioneaza ca un "router inteligent" pentru traficul extern. Permite definirea regulilor de rutare bazate pe host sau cale.153154```mermaid155graph LR156 User -- "mysite.com/api" --> Ingress157 User -- "mysite.com/ui" --> Ingress158159 subgraph "Cluster"160 Ingress -- "/api" --> ServiceA("api-service")161 Ingress -- "/ui" --> ServiceB("ui-service")162163 ServiceA --> PodA1("API Pod 1")164 ServiceA --> PodA2("API Pod 2")165166 ServiceB --> PodB1("UI Pod 1")167 ServiceB --> PodB2("UI Pod 2")168 end169```170171### Alte obiecte utile172173- **Namespace**: Permite crearea de "clustere virtuale" in interiorul unui cluster fizic.174- **ConfigMap si Secret**: Pentru gestionarea datelor de configurare si secretelor decuplate de imaginea containerului.175- **StatefulSet**: Similar cu un Deployment, dar specific pentru aplicatii cu stare.176- **PersistentVolume (PV) si PersistentVolumeClaim (PVC)**: Pentru gestionarea stocarii persistente in cluster.177178## Concluzie179180Kubernetes este un instrument incredibil de puternic, dar curba sa de invatare poate fi abrupta. Ce sa faci acum?181- **Experimenteaza local**: Instaleaza [Minikube](https://minikube.sigs.k8s.io/docs/start/) sau [Kind](https://kind.sigs.k8s.io/docs/user/quick-start/).182- **Foloseste `kubectl`**: Familiarizeaza-te cu comanda `kubectl`.183- **Exploreaza tutorialele oficiale**: [Documentatia Kubernetes](https://kubernetes.io/docs/tutorials/) este o resursa fantastica.184185Orchestrarea containerelor este o competenta fundamentala in lumea cloud-native, iar stapanirea Kubernetes iti va deschide o lume de posibilitati. Distractie placuta!186
:Introducere in Kubernetes: Orchestratorul de containerelines 1-186 (END) — press q to close