Posts

Showing posts from August 21, 2026

Minikube — Kubernetes klaster na sopstvenom računaru

Sve dosadašnje Kubernetes lekcije opisuju objekte i komande — ali bez klastera na kom se to isprobava, ostaje teorija. Minikube pravi klaster na tvom računaru za nekoliko minuta, besplatno i bez cloud naloga. Šta ti treba 2 procesorska jezgra, 2 GB slobodne memorije, 20 GB diska Docker, ili neki hipervizor (KVM, VirtualBox) kubectl Ovo su najniži zahtevi. Realno, sa 4 GB dodeljene memorije rad je osetno prijatniji. Minikube, kind ili k3s Alat Kakav je Kada Minikube pun klaster, mnogo dodataka, dashboard učenje i razvoj kind klaster u Docker kontejnerima, vrlo brz automatsko testiranje, CI k3s lagan ali pravi Kubernetes mali produkcijski serveri, IoT Za učenje uzmi Minikube — ima najviše ugrađenih dodataka i najbolje poruke o greškama. Kad ti zatreba da klaster nastane i nestane za deset sekundi u nekom skriptu, pređi na kind. A k3s je jedini od ova tri koji se zaista koristi u produkciji. Instalacija Docker Ako ga još nemaš, prođi lekciju Insta...

kubectl — rad sa Kubernetes klasterom

Kroz dosadašnje Kubernetes lekcije objašnjeni su Pod , Deployment , Service i ostali objekti. kubectl je alat kojim se sve to zaista radi — jedini kanal između tebe i klastera. Svaka komanda ide na API server , koji je onda prosleđuje dalje. Nema drugog puta. Provera veze $ kubectl version --client $ kubectl cluster-info $ kubectl get nodes NAME STATUS ROLES AGE VERSION master01 Ready control-plane 42d v1.30.2 worker01 Ready <none> 42d v1.30.2 worker02 Ready <none> 42d v1.30.2 Ako ovo radi, klaster te prepoznaje. Ako dobiješ connection refused , problem je u konfiguraciji — o tome pri kraju teksta. Struktura komande kubectl [radnja] [tip] [ime] [opcije] kubectl get pods kubectl describe pod web-abc123 kubectl delete deployment web Tipovi objekata imaju kratke oblike, što štedi dosta kucanja: Pun naziv Skraćeno pods po deployments deploy services svc namespaces ns configmaps...

docker compose — više kontejnera odjednom

Aplikacija retko radi sama. Uz nju ide baza, možda Redis, možda reverse proxy. Sa docker run to znači tri duge komande, ručno pravljenje mreže i pamćenje redosleda pokretanja. Compose sve to opisuje u jednom fajlu. Jedna komanda diže ceo sklop, jedna ga ruši. docker-compose ili docker compose Stariji alat je bio zaseban program pisan u Pythonu i zvao se docker-compose , sa crticom. Danas je Compose ugrađen u Docker kao poddomanda — docker compose , sa razmakom. $ docker compose version Docker Compose version v2.29.1 Ako ti to ne radi, instaliraj dodatak: # dnf install -y docker-compose-plugin Fajl se danas zove compose.yaml . Staro ime docker-compose.yml i dalje radi i videćeš ga svuda. Prvi compose fajl $ mkdir moj-sajt && cd moj-sajt $ vi compose.yaml services: web: image: nginx:1.25-alpine ports: - "8080:80" volumes: - ./html:/usr/share/nginx/html:ro $ mkdir html $ echo "<h1>Radi!</h1>" ...

Dockerfile i docker build — pravljenje sopstvenog image-a

Do sada si u Dockeru koristio tuđe image-e — povukao docker pull -om i pokrenuo docker run -om. Da bi spakovao svoju aplikaciju, treba ti sopstveni image. Dockerfile je tekstualni fajl sa uputstvom kako se image pravi. Komanda docker build to uputstvo izvršava i pravi image. Zašto ne docker commit Image se može napraviti i tako što uđeš u kontejner, ručno instaliraš šta ti treba i sačuvaš stanje sa docker commit . Radi — ali niko ne zna šta je unutra, ne može se ponoviti, i ne može se držati u Git-u. Dockerfile je recept: čitljiv, verzionisan i ponovljiv. Svako ko ga ima dobija identičan image. Prvi Dockerfile Napravi direktorijum i u njemu fajl imena Dockerfile — bez ekstenzije, sa velikim D: $ mkdir moja-app && cd moja-app $ vi Dockerfile FROM rockylinux:9 RUN dnf install -y httpd && dnf clean all COPY index.html /var/www/html/ EXPOSE 80 CMD ["httpd", "-D", "FOREGROUND"] Napravi i index.html : <h1>Radi...

Bash skripte 4 — funkcije i skripta za produkciju

U trećem delu skripta je naučila da odlučuje i ponavlja. Ovaj deo je o razlici između skripte koja radi na tvom računaru i skripte kojoj možeš da veruješ na serveru u tri ujutru. Funkcije Funkcija je imenovani deo skripte koji pozivaš više puta: #!/usr/bin/env bash pozdrav() { echo "Zdravo!" } pozdrav pozdrav Funkcija mora biti definisana pre prvog poziva — bash čita fajl odozgo nadole. Argumenti Funkcije primaju argumente isto kao skripta: $1 , $2 , $@ : proveri_servis() { local servis="$1" if systemctl is-active --quiet "$servis"; then echo "$servis: radi" else echo "$servis: NE RADI" fi } proveri_servis httpd proveri_servis sshd Unutar funkcije $1 je prvi argument funkcije , ne skripte. local — obavezna navika Bez local promenljiva u funkciji je globalna i tiho gazi istoimenu iz ostatka skripte: brojac=100 uvecaj() { brojac=5 # gazi globalnu! } uvecaj e...

Bash skripte 3 — uslovi i petlje

U drugom delu skripta je počela da radi sa različitim ulazima. Sada je učimo da donosi odluke i da ponavlja posao — bez toga skripta ostaje spisak komandi. Sve počinje od izlaznog koda Bash nema pravi tip „tačno/netačno". Umesto toga gleda izlazni kod komande: nula znači uspeh , sve ostalo neuspeh. $ ls /etc > /dev/null $ echo $? 0 $ ls /nepostojeci 2> /dev/null $ echo $? 2 Zato se if u bash-u ne pita „da li je ovo tačno" nego „da li je ova komanda uspela". Kad to jednom shvatiš, sve ostalo ima smisla. if #!/usr/bin/env bash if [ -f /etc/passwd ]; then echo "Fajl postoji" fi Puni oblik: if uslov; then komande elif drugi_uslov; then komande else komande fi Blok se zatvara sa fi — if unazad. Razmaci unutar uglastih zagrada su obavezni if [ -f "$fajl" ]; then # radi if [-f "$fajl"]; then # ne radi Razlog je što je [ zapravo komanda, a ne deo sintakse. Bez razmaka bash traži koma...

Bash skripte 2 — promenljive i argumenti

U prvom delu napravili smo skriptu koja svaki put radi isto. Da bi radila sa različitim ulazima — različitim fajlom, direktorijumom ili imenom servisa — trebaju ti promenljive. Dodela vrednosti ime="Alen" broj=42 putanja="/var/log/httpd" Znak $ ispred imena vraća vrednost: #!/usr/bin/env bash ime="Alen" echo "Zdravo, $ime" Zdravo, Alen Bez razmaka oko znaka jednakosti Ovo je greška koju svi naprave bar jednom: ime = "Alen" -bash: ime: command not found Sa razmakom bash misli da je ime komanda, a = i "Alen" njeni argumenti. Piši ime="Alen" , bez razmaka ni sa jedne strane. Imena promenljivih Slova, brojevi i donja crta; ne smeju počinjati brojem. Bash razlikuje mala i velika slova — ime i IME su dve različite promenljive. Uobičajena praksa: mala slova za svoje promenljive, velika za konstante na vrhu skripte i za promenljive okruženja. LOG_DIR="/var/log/httpd" MAX_DA...

Bash skripte 1 — prva skripta

Skripta je tekstualni fajl u koji upišeš komande koje bi inače kucao u terminal. Umesto da svaki put ponavljaš isti niz koraka, pokreneš jednu komandu i sve se odradi samo. Ovo je prvi od četiri teksta o bash skriptovanju. U ovom delu pravimo skriptu koja radi; u narednima dodajemo promenljive, uslove i petlje, pa na kraju sklapamo upotrebljivu backup skriptu. Sve što ti treba je terminal i tekstualni editor . Zašto uopšte skripte Zamisli da svakog jutra proveravaš server: koliko je diska ostalo, da li Apache radi, ima li grešaka u logu. To je tri komande koje kucaš ručno. Skripta je te tri komande u jednom fajlu. Otkucaš jednu reč i dobiješ sve. A kad to jednom postoji, može i da se zakaže da radi samo, preko cron-a . Skriptovanje nije programiranje u klasičnom smislu — to je automatizacija onoga što ionako već radiš. Prva skripta Napravi fajl: $ vi zdravo.sh Upiši: #!/bin/bash echo "Zdravo, svete!" Sačuvaj i izađi. To je cela skripta. Shebang Pr...

less i more — pregled velikih fajlova

Kad otvoriš fajl sa cat , ceo sadržaj se prospe kroz terminal i ostaje ti samo poslednji ekran. Za konfiguraciju od petsto linija ili log od pedeset hiljada to je neupotrebljivo. Pager je program koji prikazuje sadržaj ekran po ekran i dozvoljava da se krećeš gore-dole i pretražuješ. Na Linuxu ih ima dva: more i less . Kratko: koristi less more je stariji i primitivniji — kreće se samo unapred i izlazi na kraju fajla. less je napisan kao njegova bolja zamena, odakle i ime: šala na račun izreke da je manje ponekad više. Nauči less , a more zapamti samo zato što ga ponekad zatekneš na starim ili vrlo minimalnim sistemima. Pokretanje $ less /etc/ssh/sshd_config Fajl se otvara u punom ekranu, sa : na dnu. Izlaz je taster q . less ne učitava ceo fajl u memoriju, nego čita onoliko koliko treba. Zato otvara fajl od nekoliko gigabajta trenutno, dok bi ga editor učitavao dugo ili se ugušio. Kretanje Taster Radnja Space ili f ekran napred b ekran nazad ↓...

cron — zakazivanje poslova na Linuxu

cron je servis koji pokreće komande po rasporedu — svakog minuta, svake noći u tri, svakog prvog u mesecu. Sve što bi inače morao da radiš ručno svakog dana može da radi sam: backup baze, brisanje starih fajlova, provera da li servis radi, slanje izveštaja. Posao koji cron pokreće zove se cron job , a raspored se upisuje u tabelu koja se zove crontab . Uređivanje sopstvenog crontab-a $ crontab -e Otvara tvoj lični crontab u podrazumevanom editoru . Ako te dočeka vi a ti to ne želiš: $ export EDITOR=nano $ crontab -e Pregled bez uređivanja: $ crontab -l Brisanje celog crontab-a — bez pitanja, bez povratka: $ crontab -r Tastature -r i -e su jedna do druge. Naviknuti se na crontab -l pre svega ostalog je jeftina navika koja te jednog dana spasi. Tuđi crontab, kao administrator: # crontab -u nginx -l Sintaksa Svaki red ima pet vremenskih polja i komandu: * * * * * komanda │ │ │ │ │ │ │ │ │ └─ dan u nedelji (0-7, gde su 0 i 7 nedelja) │ ...