02 Upotreba Kontejnera

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 36

Upotreba

kontejnera

dr Mihajlo Savić

1/36
Upotreba kontejnera
● Kao okruženje za izvršavanje aplikacije
● Kao okruženje za testiranje aplikacije
● Kao okruženje za izgrađivanje aplikacije
● Kao način za isporuku aplikacije
● Kao način organizacije aplikacije
● Distribuirano okruženje

2/36
Kao okruženje za izvršavanje aplikacije
● Svakoj aplikaciji je neophodna podrška za izvršavanje
– Kernel, biblioteke, potrebni servisi, fajlovi, ...
● Kontejner definiše okruženje
– Sve je u kontejneru i nema eksternih zavisnosti (i aplikacija i podaci i ...)
– Naša aplikacija je van kontejnera (volume sa jar, war, itd.)
– Podaci, takođe, van kontejnera (volume sa fajlovima, MySQL podacima, itd.)
● Izolacija aplikacija
– Kako spriječiti aplikaciju da se ponaša maliciozno?
– Ograničen pristup fajlovima - chroot?
– Ograničen pristup svemu - kontejner!
– Šta ako svaku aplikaciju stavimo u kontejner?
– Converged Multi-level Security System - Qubes OS (koristi Xen)

3/36
Kao okruženje za testiranje aplikacije
● Ako je aplikacija van kontejnera možemo lako da mijenjamo
okruženja bez izmjene aplikacije
– Provjeravamo kako naša aplikacija funkcioniše u različitim uslovima
– Možemo da mijenjamo biblioteke, sistemske servise, druge aplikacije
(koje su dio kontejnera), itd.
● Jednostavan i efikasan način testiranja aplikacije
– Visok nivo automatizacije
– Aplikacija izolovana - problemi izolovani
– Testiranje svake izmjene - problemi lokalizovani
● Kontinualna integracija ;)

4/36
Kao okruženje za izgrađivanje aplikacije
● Da bi od izvornog koda dobili izvšnu verziju aplikacije potrebni su nam
brojni alati
– Kompajleri, linkeri, analizatori, optimizatori, sve-izatori
– Najčešće u vidu okruženja (SDK)
– Veliki broj fajlova, mnogo prostora na disku
● Da li je potrebno da na naš računar instaliramo sva ta okruženja?
– I šta da radimo sa različitim verzijama koje ne vole da žive istovremeno na
istom računaru
● Koristimo kontejner koji sadrži SDK
– U njega postavljamo izvorni kod
– Pokrećemo proces izgradnje aplikacije
– Izlaze koristimo za naše potrebe

5/36
Kao način za isporuku aplikacije
● Ako kontejner sadrži i okruženje i aplikaciju
– Nakon testiranja znamo da aplikacija funkcioniše na
određeni (željeni) način u datom okruženju
– Isporučujemo aplikaciju na takav način da znamo da
će raditi korektno
● Isporuka ne mora biti u jednom koraku
– Kontinualna isporuka
– Više strategija isporuke
● Jer i nakon testiranja može doći do nepredviđenih problema

6/36
Kao način za isporuku aplikacije
● Plavo-zelena (blue-green) isporuka
– Možemo da napravimo kopiju kompletnog okruženja
– Sada imamo dva identična sistema
– U jednom (zelenom) izmijenimo aplikaciju i sve
provjerimo (smoke test, napunimo keš, itd)

7/36
Plavo-zelena isporuka

8/36
Kao način za isporuku aplikacije
● Plavo-zelena (blue-green) isporuka
– Možemo da napravimo kopiju kompletnog okruženja
– Sada imamo dva identična sistema
– U jednom (zelenom) izmijenimo aplikaciju i sve
provjerimo (smoke test, napunimo keš, itd)
– Ako je sve OK, korisnike preusmjerimo na zelenu
– Plava nam više ne treba, možemo da je koristimo za
isporuku naredne verzije

9/36
Plavo-zelena isporuka

10/36
Kao način za isporuku aplikacije
● A/B testiranje
– Razlika u odnosu na blue-green - ovdje pratimo kako
naši korisnici vide i koriste našu aplikaciju u dvije
verzije
● Blue-green nam omogućava isporuku i povratak na
prethodnu verziju ako uočimo nedostatke
● Nisu alternative, obično koristimo oba pristupa zajedno
– Najčešće pratimo razlike u UI-ju
– Šta nas interesuje: upotrebljivost, vidljivost, itd.
Tipično kroz broj klikova, šerova, lajkova, ...
11/36
A/B testiranje

12/36
Kao način za isporuku aplikacije
● Strategija kanarinca (canary)
– Ideja iz rudarskih dana - kanarinac prvi umre od
trovanja
– U produkciju puštamo novu verziju u vrlo ograničenom
obimu (npr. samo jedna instanca)
● Pratimo ponašanje po pitanju integracije, upotrebe resursa, ...
– Zašto? Koliko god da testiramo - bagovi uvijek prođu,
ovako ih nađemo sa minimalnim problemima
● Ako nađemo grešku - izbaci i ispravi problem
● Ako nema grešaka - postepeno migriraj sve instance i prati

13/36
CD testiranje - Strategija kanarinca

14/36
Kao način organizacije aplikacije
● Aplikacija ne mora biti monolitna
– Rastavimo je u servise ili mikro servise
● Treba nam način da organizujemo izvršavanje svih
komponenata
– I da ih nekako povežemo
● Jer sad svaka ima neku IP adresu, itd.
– I da neko pazi na njih i restartuje po potrebi
● Pažljivo sa automatskim restartom!
– I da im da podešavanja
● Kroz fajlove ili environment varijable

15/36
Mikroservisna arhitektura

16/36
Kao način organizacije aplikacije
● Aplikacija ne mora biti monolitna
– Rastavimo je u servise ili mikro servise
● Treba nam način da organizujemo izvršavanje svih
komponenata
– I da ih nekako povežemo
● Jer sad svaka ima neku IP adresu, itd.
– I da neko pazi na njih i restartuje po potrebi
● Pažljivo sa automatskim restartom!
– I da im da podešavanja
● Kroz fajlove ili environment varijable
● Docker-compose :)
17/36
Mihajlo Savić - ETF BL - Operativni sistem
i 2 - Virtuelne mašine
Primjer - Scalelite

19/36
docker-compose.yml
volumes:
postgres-data:
redis-data:
services:
redis:
...
postgres:
...
scalelite-api:
...
scalelite-nginx:
...
scalelite-poller:
...
scalelite-recording-importer:
...

20/36
docker-compose.yml
redis:
image: redis:5.0-alpine
container_name: redis
restart: on-failure
volumes:
- redis-data:/data

21/36
docker-compose.yml
services:
postgres:
image: postgres:11.5-alpine
container_name: postgres
restart: unless-stopped
volumes:
- postgres-data:/var/lib/postgresql/data
environment:
- POSTGRES_USER=${POSTGRES_USER:-postgres}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-password}

22/36
docker-compose.yml
scalelite-api:
image: blindsidenetwks/scalelite:v1-api
container_name: scalelite-api
restart: unless-stopped
ports:
- "3000:3000"
volumes:
- ./log/scalelite/:/app/log
environment:
- LOADBALANCER_SECRET=${LOADBALANCER_SECRET}
- REDIS_URL=${REDIS_URL:-redis://redis:6379}
- DATABASE_URL=${DATABASE_URL:-postgres://postgres:password@postgres:5432/scalelite?pool=5}
- URL_HOST=${URL_HOST}
depends_on:
- postgres
- redis

23/36
docker-compose.yml
scalelite-nginx:
image: blindsidenetwks/scalelite:v1-nginx
container_name: scalelite-nginx
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./log/nginx/:/var/log/nginx
- ./data/nginx/scalelite:/etc/nginx/conf.d/scalelite
environment:
- NGINX_SSL=${NGINX_SSL-true}
- URL_HOST=${URL_HOST}
depends_on:
- scalelite-api

24/36
Primjer - Scalelite

25/36
Primjer - Scalelite

26/36
Primjer - Scalelite

27/36
Primjer - Scalelite

28/36
Distribuirano okruženje

Master(i)

Servis 1 Servis 1 Servis 2 Servis 2 Servis 1


Servis 1 Servis 1 Servis 1 Servis 1
Servis 1 Servis 2 Servis 2 Servis 3

Čvor #1 Čvor #2 Čvor #1


#3 Čvor #1
#4 Čvor #5
#1

29/36
Distribuirano okruženje

Master(i)

Servis 1 Servis 1 Servis 2 Servis 2 Servis 1


Servis 1 Servis 1 Servis 1 Servis 1
Servis 1 Servis 2 Servis 2 Servis 3

Čvor #1 Čvor #2 Čvor #1


#3 Čvor #1
#4 Čvor #5
#1

30/36
Distribuirano okruženje

Master(i)

Servis 1 Servis 1 Servis 2 Servis 2 Servis 1


Servis 1 Servis 1 Servis 1 Servis 1
Servis 1 Servis 2 Servis 2 Servis 3

Čvor #1 Čvor #2 Čvor #1


#3 Čvor #1
#4 Čvor #5
#1

31/36
Distribuirano okruženje

Master(i)

Servis 1 Servis 1 Servis 2 Servis 2 Servis 1


Servis 1 Servis 1 Servis 1 Servis 1
Servis 1 Servis 2 Servis 2 Servis 3

Čvor #1 Čvor #2 Čvor #1


#3 Čvor #1
#4 Čvor #5
#1

32/36
Distribuirano okruženje

Master(i)

Servis 1 Servis 1 Servis 2 Servis 2 Servis 1


Servis 1 Servis 1 Servis 1 Servis 1
Servis 1 Servis 2 Servis 2 Servis 3

Čvor #1 Čvor #2 Čvor #1


#3 Čvor #1
#4 Čvor #5
#1

33/36
Distribuirano okruženje

Master(i)

Servis 1 Servis 1 Servis 2 Servis 2 Servis 1


Servis 1 Servis 1 Servis 1 Servis 1
Servis 1 Servis 2 Servis 2 Servis 3

Čvor #1 Čvor #2 Čvor #1


#3 Čvor #1
#4 Čvor #5
#1

34/36
Distribuirano okruženje
● Mnogo mogućnosti
– Najjednostavnija - Docker swarm
– Kubernetes, Nomad, Rancher, ...
● Postoji orkestrator na nivou klastera
– Više čvorova (servera) koji mogu da izvršavaju kontejnere
– Jedan ili više čvorova (servera) koji upravljaju
izvršavanjem
– Dijeljenje i koordinisanje resursa
● Mrežna infrastruktura, fajlovi, stanje, itd.

35/36
Hvala na pažnji

PITANJA?

36/36

You might also like