Showing posts with label kubernetes. Show all posts
Showing posts with label kubernetes. Show all posts

Sunday, December 25, 2022

Kako se kubernetes monitoriše?

 Postoji nekoliko načina na koje možete monitorisati Kubernetes klastar:


Koristite Kubernetes API server i kubectl komandu za praćenje stanja objekata u klastru, kao što su podovi, service-i i druge resurse. Možete koristiti kubectl komandu da biste dobili informacije o stanju objekata i da biste ih ažurirali.


Koristite alate za praćenje resursa, kao što su Prometheus i Grafana, da biste pratili resurse u klastru, kao što su CPU i memorija. Ovi alati vam omogućavaju da vizualizujete podatke o resursima i da odredite kada se resursi preopterećuju ili se koriste neefikasno.


Koristite alate za praćenje radnog opterećenja, kao što su New Relic ili Datadog, da biste pratili radno opterećenje u klastru i odredili uzroke problema s performansama.


Koristite Kubernetes notifikacione alate, kao što su Slack ili PagerDuty, da biste dobili obavijesti o problemima u klastru i da biste odmah reagovali na njih.

Kubernetes namespace

 Namespace u Kubernetes-u je logička granica u klastru koja se koristi za odvajanje resursa i objekata u klastru. Namespace-ovi se koriste za razdvajanje različitih radnih opterećenja u istom klastru i za osiguravanje da se resursi ne preklope ili se međusobno utječu.


Na primer, možete koristiti namespace-ove da bi ste odvojili različite aplikacije u istom klastru ili da bi ste odvojili resurse za različite timove u organizaciji.


Svaki namespace u Kubernetes klastru sadrži svoj set objekata, uključujući podove, service-e, deploymente i druge resurse. Možete kreirati više namespace-ova u jednom klastru i pristupiti im preko API-ja ili koristeći kubectl komandu.


Ukratko, namespace u Kubernetes-u je logička granica koja se koristi za odvajanje resursa i objekata u klastru i za razdvajanje različitih radnih opterećenja u istom klastru.

Kube-proxy proces

 Kube-proxy je proces koji se izvršava na svakom čvoru u Kubernetes klastru i odgovoran je za upravljanje mrežnim prometom između podova i servicea u klastru.


Konkretno, kube-proxy upravlja sljedećim zadacima:


Upravljanje mrežnim prometom: Kube-proxy se koristi za usmjeravanje mrežnog prometa između podova i servicea u klastru i za praćenje promjena u klastru kako bi se osiguralo da se promet usmjerava na odgovarajuće podove.


Pracenje stanja servicea: Kube-proxy stalno prati stanje servicea u klastru i ažurira svoje tablice usmjeravanja prometa u skladu s tim.


Kommuniciranje s API serverom: Kube-proxy se povezuje s Kubernetes API serverom kako bi dobio informacije o serviceima u klastru i kako bi ažurirao svoje tablice usmjeravanja prometa u skladu s tim.


Ukratko, kube-proxy je odgovoran za upravljanje mrežnim prometom između podova i servicea u Kubernetes klastru i za pracenje stanja servicea te kommuniciranje s API serverom.

Kube-controller-manager

 Kube-controller-manager je proces koji se izvršava u Kubernetes klastru i odgovoran je za upravljanje kontrolerima u Kubernetes sustavu. Kontroleri su procesi koji stalno prate stanje objekata u Kubernetes klastru i pokušavaju ih uskladiti s željenim stanjem.


Konkretno, kube-controller-manager upravlja sljedećim zadacima:


Upravljanje kontrolerima: Kube-controller-manager pokreće i upravlja različitim kontrolerima u Kubernetes sustavu, kao što su replikacijski kontroler, deployment kontroler i slično.


Pracenje stanja objekata: Kube-controller-manager stalno prati stanje objekata u Kubernetes klastru i pokušava ih uskladiti s željenim stanjem.


Kommuniciranje s API serverom: Kube-controller-manager se povezuje s Kubernetes API serverom kako bi dobio informacije o objektima u klastru i kako bi ažurirao stanje objekata u skladu s željenim stanjem.


Ukratko, kube-controller-manager je odgovoran za upravljanje kontrolerima u Kubernetes sustavu i za pracenje stanja objekata u klastru te kommuniciranje s API serverom.

kube-apiserver

 Kube-apiserver je proces koji se izvršava u Kubernetes klastru i odgovoran je za upravljanje API-jem za Kubernetes. API server se koristi za upravljanje objektima u Kubernetes klastru, kao što su podovi, deploymenti, servicei i slično.


Konkretno, kube-apiserver upravlja sljedećim zadacima:


Upravljanje objektima u Kubernetes klastru: Kube-apiserver omogućava kreiranje, čitanje, ažuriranje i brisanje objekata u Kubernetes klastru putem API-ja.


Kommuniciranje s ostalim komponentama Kubernetes sustava: Kube-apiserver se povezuje s ostalim komponentama Kubernetes sustava, kao što su kubeleti i kube-scheduler, kako bi im dao informacije o objektima u klastru i kako bi od njih dobio informacije o stanju čvora i resursima.


Upravljanje autentifikacijom i autorizacijom: Kube-apiserver također upravlja autentifikacijom i autorizacijom za pristup API-ju i objektima u Kubernetes klastru.


Ukratko, kube-apiserver je odgovoran za upravljanje API-jem za Kubernetes i omogućava upravljanje objektima u klastru, kommuniciranje s ostalim komponentama sustava i upravljanje autentifikacijom i autorizacijom.

Šta radi Kube-scheduler?

 Kube-scheduler je proces koji se izvršava u Kubernetes klastru i odgovoran je za određivanje na kojem čvoru/node-u će se pokrenuti specifičan pod ili kontejner.


Konkretno, kube-scheduler upravlja sljedećim zadacima:


Određivanje na kojem čvoru će se pokrenuti pod: Kube-scheduler određuje na kojem čvoru će se pokrenuti pod na osnovu raspoloživosti resursa, kao što su CPU i memorija, na svakom čvoru.


Balansiranje opterećenja: Kube-scheduler također pomaže u balansiranju opterećenja na klastru tako da se ne preopterećuju pojedini čvorovi i da se resursi koriste efikasnije.


Kommuniciranje s API serverom: Kube-scheduler se povezuje s Kubernetes API serverom kako bi dobio informacije o podacima, kontejnerima i resursima na klastru i kako bi odredio gdje treba da se pokrenu određeni podovi ili kontejneri.


Ukratko, kube-scheduler je odgovoran za određivanje gdje će se pokrenuti specifični podovi ili kontejneri u Kubernetes klastru i za balansiranje opterećenja na klastru.

Kubelet proces

 Kubelet je proces koji se pokreće na svakom čvoru u Kubernetes klastru i odgovoran je za upravljanje podacima i kontejnerima na tom čvoru. Njegove glavne dužnosti su:


Upravljanje podacima: Kubelet se brine da podaci i kontejneri na čvoru budu u skladu sa definicijama stanja objekata u Kubernetes API serveru.


Upravljanje kontejnerima: Kubelet upravlja životnim ciklusima kontejnera na čvoru, uključujući pokretanje, zaustavljanje i preuređivanje kontejnera.


Kommunikacija s API serverom: Kubelet se povezuje s Kubernetes API serverom kako bi dobio informacije o tome šta treba da radi i kako treba da upravlja podacima i kontejnerima na čvoru.


Upravljanje resursima: Kubelet upravlja resursima, kao što su CPU i memorija, na čvoru i osigurava da se kontejneri ne opterećuju više nego što im je dodeljeno.


Ukratko, kubelet je važan deo Kubernetes sistema i odgovoran je za upravljanje podacima i kontejnerima na čvoru, kommuniciranje s API serverom i upravljanje resursima.

Kubernetes volume

 Volume je objekat u Kubernetes klasteru koji se koristi za cuvanje podataka izvan pods-a. Volume se može koristiti da bi se podaci sačuvali i nakon što pods ode iz klastera, da bi se podaci delili između više pods-a ili da bi se podaci prenosili između različitih node-ova u klasteru.


Postoji mnogo različitih tipova volumena u Kubernetes-u, a neki od najčešćih su:


emptyDir: Ovaj tip volumena se kreira kada se pods pokrene i uništava kada pods prestane da radi. Podaci se cuju na node-u na kojem je pokrenut pods.

hostPath: Ovaj tip volumena povezuje podatke sa lokalnim fajl sistemom node-a na kojem je pokrenut pods.

persistentVolumeClaim (PVC): Ovaj tip volumena se povezuje sa PersistentVolume-om izvan pods-a i omogućava da podaci budu sačuvani i nakon što pods ode iz klastera.

configMap: Ovaj tip volumena se povezuje sa ConfigMap-om i omogućava da se podaci iz ConfigMap-a učitaju u pods.

secret: Ovaj tip volumena se povezuje sa Secret objektom i omogućava da se tajni podaci, kao što su lozinke i ključevi, učitaju u pods.

Evo jednog primera definicije volumena tipa "emptyDir" u pods-u sa imenom "my-pod":

apiVersion: v1

kind: Pod

metadata:

  name: my-pod

spec:

  containers:

  - name: my-container

    image: my-image

    volumeMounts:

    - name: data-volume

      mountPath: /data

  volumes:

  - name: data-volume

    emptyDir: {}

Ovaj primer definiše pods sa imenom "my-pod" i kontejnerom sa imenom "my-container" koji pokreće sliku "my-image". Kontejneru se dodaje volume sa imenom "data-volume" i mount path-om "/data". Volume se definiše kao emptyDir, što znači da će se podaci cuvati unutar pods-a na node-u na kojem je pokrenut. Podaci će biti uništeni kada pods prestane da radi.

Šta je ConfigMap?

 ConfigMap je objekat u Kubernetes klasteru koji se koristi za cuvanje konfiguracijskih podataka u obliku key-value parova. ConfigMap se može koristiti da bi se podaci izdvojili iz samog aplikativnog koda i da bi se lako menjali bez potrebe za izmenom aplikacije. To se često koristi za cuvanje podataka koji se razlikuju od jedne instalacije do druge, kao što su parametri za podešavanje, URL-ovi za pristup bazama podataka i sl.


Evo jednog primera definicije ConfigMap-a sa imenom "my-config":

apiVersion: v1

kind: ConfigMap

metadata:

  name: my-config

data:

  key1: value1

  key2: value2

  key3: value3

Ovaj primer definiše ConfigMap sa imenom "my-config" i tri key-value para sa imenima "key1", "key2" i "key3" i odgovarajućim vrednostima "value1", "value2" i "value3". ConfigMap se može koristiti da bi se podaci prosledili kao argumenti u komandnoj liniji ili kao environment varijable u kontejneru.


Da biste koristili ConfigMap u aplikaciji, potrebno je da ga dodate u specifikaciji Deployment-a ili StatefulSet-a koji pokreće pods sa aplikacijom. Evo jednog primera:

apiVersion: apps/v1

kind: Deployment

metadata:

  name: my-deployment

spec:

  template:

    spec:

      containers:

      - name: my-container

        image: my-image

        envFrom:

        - configMapRef:

            name: my-config

Ovaj primer dodaje ConfigMap "my-config" kao environment varijable u kontejner "my-container" u Deployment-u "my-deployment". Environment varijable se mogu koristiti u aplikaciji da bi se učitavali konfiguracijski podaci.

Kubernetes service

 Kubernetes service je objekat u Kubernetes klasteru koji omogućava pristup pods-u ili grupi pods-a izvan klastera. To se postiže tako što se pods-u dodeljuje jedinstvena IP adresa i DNS ime, što omogućava da se pods pristupa sa bilo kog mesta u klasteru putem jedinstvenog imena i adrese.


Postoje različiti tipovi Kubernetes servisa, a neki od najčešćih su:


ClusterIP: Ovaj tip servisa je dostupan samo unutar klastera i ne može se pristupiti sa spoljne mreže.

NodePort: Ovaj tip servisa omogućava pristup pods-u putem IP adrese i porta na kojoj je pokrenut node u klasteru.

LoadBalancer: Ovaj tip servisa koristi load balancer izvan klastera da bi omogućio pristup pods-u sa spoljne mreže.

Ingress: Ovaj tip servisa omogućava pristup grupi pods-a sa spoljne mreže putem jedinstvenog DNS imena.

Evo jednog primera definicije Kubernetes servisa za pod sa imenom "my-app":


Copy code

apiVersion: v1

kind: Service

metadata:

  name: my-app-service

spec:

  type: NodePort

  selector:

    app: my-app

  ports:

  - protocol: TCP

    port: 80

    targetPort: 8080

Ovaj primer definiše servis tipa NodePort sa imenom "my-app-service" i selectorom koji selektuje sve pods-e sa "app" label-om "my-app". Servis omogućava pristup pods-ima putem IP adrese i porta node-a na kojem su pokrenuti. Pods-i se mogu pristupiti putem protokola TCP na portu 80, dok je target port 8080 na pods-u.

Kubernetes master nod

 Master node u Kubernetes je glavni računar u klasteru Kubernetes. On kontroliše sve druge računare u klasteru, koje nazivamo node-ovi. Master node se sastoji od više komponenti koje rade zajedno da bi upravljale klasterom i omogućile da se aplikacije raspodele i izvršavaju na node-ovima.


Glavne komponente master node-a su:


etcd: distributivna baza podataka koja čuva sve konfiguracije i stanja Kubernetes klastera.

API server: komponenta koja prima zahteve od korisnika i drugih komponenti za upravljanje klasterom i izvršava ih tako što poziva odgovarajuće funkcije iz etcd baze podataka.

Scheduler: komponenta koja određuje na koji node će biti dodeljen podatak (container) u aplikaciji.

Controller manager: komponenta koja kontroliše rad node-ova i podataka u klasteru, da bi se osiguralo da se aplikacije izvršavaju u skladu sa zahtevima i da se održava odgovarajuće stanje.

Master node je odgovoran za upravljanje radom node-ova u klasteru i omogućavanje da se aplikacije izvršavaju i raspodeljuju u skladu sa zahtevima. Node-ovi se pak bave izvršavanjem podataka aplikacija i održavanjem resursa potrebnih za rad aplikacija.

Primer manifest fajla

 Evo primera manifest fajla za raspoređivanje pods u Kubernetes klaster:

apiVersion: v1

kind: Pod

metadata:

  name: nginx-pod

  labels:

    app: nginx

spec:

  containers:

  - name: nginx

    image: nginx:1.15

    ports:

    - containerPort: 80

  restartPolicy: Always

Ovaj manifest fajl opisuje pods sa imenom "nginx-pod" i etiketom "app: nginx". Pods sadrži jedan kontejner sa imenom "nginx" i sliku "nginx:1.15". Kontejner ima port 80 otvoren i pods ima politiku restartovanja "Always".


Da bi se ovaj pods rasporedio u Kubernetes klaster, potrebno je koristiti komandu "kubectl apply" i navesti putanju do manifest fajla:

kubectl apply -f /path/to/manifest.yaml

Ova komanda će rasporediti pods u klaster i aplikacija će biti dostupna za upotrebu.

Manifest fajl u Kubernetesu

 Manifest fajl u Kubernetesu je fajl u kome se navode sve potrebne informacije o resursima koje treba da se rasporede u Kubernetes klasteru, kao što su pods, deployment, servisi i slično. Manifest fajl se koristi kao osnova za raspoređivanje resursa u klasteru i omogućava da se resursi lako konfigurišu i upravljaju.


Manifest fajl se sastoji od opisa resursa u JSON ili YAML formatu. U manifest fajlu se navode svi potrebni detalji o resursima, uključujući nazive, vrednosti atributa, kontejnere i druge podešavanja.


Da bi se resursi rasporedili u Kubernetes klaster, potrebno je kreirati manifest fajl i koristiti komandu "kubectl" da bi se resurs rasporedio u klaster. Na primer, da bi se pod rasporedio u klaster, potrebno je kreirati manifest fajl u kome se navode svi potrebni detalji o podu, uključujući kontejnere koji će se rasporediti, resurse koje će pod koristiti i druge podešavanja. Nakon što se manifest fajl kreira, može se koristiti komanda "kubectl apply" da bi se pod rasporedio u klaster.


Manifest fajl je važan deo Kubernetesa jer omogućava da se resursi lako konfigurišu i upravljaju u klasteru. On takođe omogućava da se resursi lako raspoređuju i skaliraju u odgovarajućem trenutku, što olakšava razvoj i održavanje aplikacija u oblaku.

Kubernetes pod

 Pod u Kubernetesu je najmanja jedinica za raspoređivanje i upravljanje u Kubernetes klasteru. Pods predstavljaju aplikaciju ili deo aplikacije i sadrže jedan ili više kontejnera koji rade zajedno da bi se osigurala funkcionalnost aplikacije. Pods takođe mogu da sadrže resurse za rad aplikacije, kao što su memorija i procesor, i da se povežu sa drugim pods ili servisima u klasteru preko mreže.


Pods su korisni jer omogućavaju da se aplikacije lako rasporede i upravljaju u Kubernetes klasteru. Oni omogućavaju da se aplikacije lako skale tako što se dodaju ili uklanjaju pods u zavisnosti od potreba. Pods takođe omogućavaju da se aplikacije lako održavaju i nadgledaju, jer se sve što je potrebno za rad aplikacije nalazi u jednom pods, što olakšava dijagnostiku i održavanje.


Da bi se kreirao pod u Kubernetes klasteru, potrebno je kreirati manifest fajl u kome se navode svi potrebni detalji o pods, uključujući kontejnere koji će se rasporediti, resurse koje će pods koristiti i druge podešavanja. Nakon što se manifest fajl kreira, može se koristiti komanda "kubectl" da bi se pod rasporedio u klaster.

Šta je Kubernetes?

 Kubernetes (često skraćeno kao "K8s") je open-source sistem za upravljanje i automatizaciju raspoređivanja, skaliranja i upravljanja aplikacijama u oblaku. To omogućava lakše razvoj, distribuciju i održavanje aplikacija, omogućavajući da se aplikacije lako rasporede u različitim okruženjima, uključujući lokalne računare, datacentre i oblake.


Kubernetes se sastoji od više komponenti koji rade zajedno da bi se osiguralo da su aplikacije uvek dostupne i da se lako skale u odgovarajućem trenutku. Osnovne komponente Kubernetesa uključuju "podove", "nodove" i "klaster menadžere". Podovi su najmanje jedinice koje se raspoređuju u Kubernetesu i predstavljaju aplikaciju ili deo aplikacije. Nodi su računari koji izvršavaju podove i obično su organizovani u klaster. Klaster menadžer je deo Kubernetesa koji upravlja nodovima i podovima u klasteru i omogućava da se aplikacije lako rasporede i skale.


Kubernetes se često koristi u kombinaciji sa drugim tehnologijama za automatizaciju i upravljanje kontejnerima, kao što je Docker, kako bi se omogućilo lako razvoj i distribucija aplikacija u oblaku.

NAT Gateway

  NAT Gateway je potpuno upravljani AWS servis koji omogućava instancama u privatnim subnetima u Amazon VPC -u da uspostave izlazne veze ka...