Posts

Showing posts with the label devops

Praktičan primer od A do Š: AI asistent za sopstveni server

Trideset tekstova iza nas pokrilo je delove. Ovaj ih sklapa u jednu postavku koja radi — od prazne mašine do asistenta koji ujutru pošalje izveštaj, a preko dana odgovara na pitanja o tvojoj dokumentaciji. Sve je namerno svedeno na ono što jedan čovek može da održava. Nema Kubernetesa, nema agenata, nema fine-tuninga. Šta gradimo Server: 1 × RTX 3090 (24 GB), Debian 13 ┌─────────────────────────────────────────────┐ │ Nginx :443 — TLS, ključevi, ograničenja │ └──────┬───────────────────────┬──────────────┘ │ │ Open WebUI :3000 API /api/ │ │ └───────┬───────────────┘ │ Ollama :11434 qwen3:27b-q4_K_M │ ┌───────┴────────┐ │ │ Qdrant :6333 Prometheus :9090 dokumentacija + Grafana Alatke: zasto, pitaj, pitaj-doks Cron: noćni izveštaj, osvežavanje RAG-a, kopije Odluka Zašto Ollama, ne vLLM ...

Deploy modela na Kubernetes

Kubernetes ne ubrzava inferenciju i ne rešava nijedan problem koji si do sada imao. Ono što donosi je raspoređivanje: kada imaš više servera sa karticama i više modela, neko mora da odluči šta ide gde — i da to ponovo uradi kad node otkaže. Ovaj tekst pokazuje kako se model pokreće u klasteru i gde se GPU postavka razlikuje od svega ostalog što tamo vrtiš. Kada ovo ima smisla Ima smisla Nema smisla Više servera sa karticama Jedan server, jedan model Klaster već postoji i drži ostalo Klaster bi se dizao samo zbog ovoga Više modela deli isti skup kartica Nema rezervnog hardvera Opterećenje se menja kroz dan Stalno, predvidivo opterećenje Za jedan server systemd jedinica ostaje bolje rešenje. Kubernetes uvodi sloj koji treba održavati, a ako imaš tačno jednu karticu, raspoređivati nema šta. Preduslov je poznavanje osnovnih pojmova — pod , deployment , servis . Device plugin Kubernetes ne zna za...

Monitoring inferencije sa Prometheusom i Grafanom

Benchmark iz prethodnog teksta ti kaže kako je bilo u trenutku merenja. Nadzor ti kaže kako je sada i kako je bilo prošle srede u tri ujutru — a to je jedini način da odgovoriš na pitanje da li je sporije nego pre. Ovaj tekst postavlja tri komponente: prikupljanje metrika sa kartice i iz servisa, njihovo čuvanje i prikaz. Šta se prati Sloj Metrika Zašto Kartica Memorija, potrošnja, temperatura Kapacitet i usporavanje Servis Zahtevi u obradi i u redu, KV keš Da li stižeš da obradiš Proxy Trajanje zahteva, kodovi odgovora Šta korisnik zaista doživljava Sva tri sloja su potrebna. Kartica na devedeset posto ne znači da je servis zagušen; servis bez grešaka ne znači da korisnici ne čekaju. Metrike sa kartice Zvanični alat je DCGM exporter. Radi kroz isti nvidia-container-toolkit iz teksta o Dockeru : $ docker run -d \ --name dcgm-exporter \ --gpus all \ --cap-add SYS_ADMIN \ ...

Ollama u Dockeru sa GPU passthrough-om

Kontejner rešava dva problema koja se javljaju čim server prestane da bude samo tvoj: verzija alata više ne zavisi od distribucije, a ceo servis se seli na drugu mašinu jednom komandom. Cena je jedan dodatni sloj koji mora da propusti karticu. Taj sloj se zove nvidia-container-toolkit i on je sve o čemu ovaj tekst zapravo govori. Bez njega kontejner vidi procesor i ništa više. Kada u kontejner Za Protiv Verzija alata nezavisna od distribucije Još jedan sloj koji može da zakaže Ista postavka na svakoj mašini Slika sa CUDA bibliotekama ide preko gigabajta Više servisa jedan pored drugog, bez sukoba Drajver i dalje mora biti na domaćinu Vraćanje na staru verziju je trivijalno Modeli se lako izgube ako volumen nije podešen Prirodan korak ka Kubernetesu Nešto komplikovaniji nadzor Ako imaš jedan server i jedan model, systemd jedinica iz prethodnog teksta je jednostavnija i sasvim dovol...

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...