Uvod
Preduvjeti
Razmještaj
Instalirajte Alpine Linux 3.9.0 na poslužitelje
Konfiguracija poslužitelja nakon instalacije
Instalirajte Docker na svoje poslužitelje
Inicijalizirajte Docker roj s jednim čvorom upravitelja i jednim čvorom radnika
Postavite Portainer sa SSL-om za upravljanje svojim Docker rojem
Uvod
Ovaj vodič će vam pokazati kako stvoriti i konfigurirati Docker roj koristeći više Alpine Linux 3.9.0 poslužitelja i Portainera. Imajte na umu da Vultr nudi Docker aplikaciju jednim klikom koja trenutno podržava i CentOS 7 x64 i Ubuntu 16.04 x64.
Preduvjeti
Za početak, trebat će vam najmanje dva VC2 poslužitelja s Alpine Linux 3.9.0. Unutar vašeg Docker roja, jedan od tih poslužitelja će djelovati kao manager nodesučelje s vanjskim mrežama i delegiranje poslova na radne čvorove. Drugi će poslužitelj tada djelovati kao worker node- izvršavanje poslova koje mu delegira upraviteljski čvor.
Imajte na umu da možete pokrenuti više od dva poslužitelja ako vaša aplikacija zahtijeva redundantnost i/ili više računalne snage, a koraci navedeni u ovom vodiču i dalje će se primjenjivati.
Razmještaj
Posjetite sučelje za postavljanje poslužitelja Vultr .
Provjerite je li Vultr Cloud (VC2)kartica odabrana na vrhu stranice.
Možete odabrati bilo koju lokaciju iz Server Locationodjeljka, međutim svi poslužitelji moraju biti na istoj lokaciji , inače neće biti moguće implementirati Docker roj na njih.
Odaberite ISO Librarykarticu Server Typeodjeljka i odaberite Alpine Linux 3.9.0 x86_64sliku.
Odaberite odgovarajuću opciju iz Server Sizeodjeljka. Ovaj vodič koristit će veličinu SSD poslužitelja od 25 GB, ali to može biti nedovoljno za ispunjavanje zahtjeva za resursima vaše aplikacije. Iako Vultr olakšava nadogradnju veličine poslužitelja nakon što je već pokrenut, ipak biste trebali pažljivo razmotriti koju veličinu poslužitelja vaša aplikacija treba da bi radila optimalno.
U Additional Featuresodjeljku morate odabrati Enable Private Networkingopciju. Iako ostale opcije nisu potrebne za praćenje ovog vodiča, trebali biste razmotriti ima li svaka od njih smisla u kontekstu vaše prijave.
Ako ste prethodno omogućili Multiple Private Networksopciju na svom računu, tada ćete morati odabrati postojeću ili stvoriti novu privatnu mrežu za svoje poslužitelje. Ako ga niste omogućili, možete zanemariti ovaj odjeljak. Za informacije o ručnom konfiguriranju privatnih mreža pogledajte ovaj vodič .
Firewall GroupZa sada preskočite odjeljak. Samo poslužitelj koji djeluje kao upraviteljski čvor u Docker roju trebat će otvorene portove, a to bi trebalo biti konfigurirano nakon postavljanja poslužitelja.
Na samom dnu stranice morate unijeti Server Qtynajmanje dva. Kao što je već spomenuto, možda će vam trebati više od dva poslužitelja, ali dva su dovoljna za praćenje ovog vodiča.
Konačno, u Server Hostname & Labelodjeljku unesite smislena i nezaboravna imena hosta i oznake za svaki poslužitelj. Za potrebe ovog vodiča, ime hosta i oznaka prvog poslužitelja bit će docker-manageri Docker Manager, odnosno - i docker-workeri Docker Workerza drugi, respektivno.
Nakon dvostruke provjere svih vaših konfiguracija, možete kliknuti Deploy Nowgumb na dnu stranice da pokrenete svoje poslužitelje.
Instalirajte Alpine Linux 3.9.0 na poslužitelje
Budući da ste odabrali OS iz Vultrove ISO biblioteke, morat ćete ručno instalirati i konfigurirati Alpine Linux 3.9.0 na svakom poslužitelju.
Nakon što Vultru date minutu ili dvije da dodijeli vaše poslužitelje, kliknite more optionsikonu s trostrukom točkom za Docker Managerposlužitelj na sučelju za upravljanje poslužiteljem , a zatim odaberite View Consoleopciju.
Trebali biste biti preusmjereni na konzolu s upitom za prijavu. Ako ne, pričekajte još jednu minutu da Vultr završi s postavljanjem vaših poslužitelja.
U tom upitu za prijavu unesite rootkorisničko ime. Verzija Alpine Linuxa 3.9.0 uživo (na kojoj trenutno rade vaši poslužitelji) ne zahtijeva od superkorisnika unos lozinke prilikom prijave.
Nakon što ste se uspješno prijavili na root račun, vidjet ćete poruku dobrodošlice praćenu promptom ljuske koji izgleda ovako:
localhost:~#
Da biste pokrenuli instalacijski program Alpine Linux, unesite sljedeću naredbu:
# setup-alpine
Prvo odaberite odgovarajući raspored tipkovnice. Ovaj vodič će koristiti usizgled i varijantu.
Prilikom postavljanja imena hosta, odaberite isto ime hosta koje ste postavili za ovaj poslužitelj tijekom implementacije. Ako ste točno slijedili ovaj vodič, ime hosta bi trebalo biti docker-manager.
Trebala bi biti dostupna dva mrežna sučelja: eth0i eth1. Ako vidite samo eth0, to znači da niste ispravno konfigurirali privatnu mrežu svojih poslužitelja. Inicijalizirajte eth0pomoću dhcpi inicijalizirajte eth1korištenjem privatne IP adrese, mrežne maske i pristupnika koji je ovom poslužitelju dodijeljen tijekom implementacije. Ovim pojedinostima možete pristupiti iz sučelja postavki vašeg poslužitelja. Kada se to od vas zatraži, nemojte izvoditi ručnu konfiguraciju mreže.
Unesite novu lozinku za korijenski račun, a zatim odaberite vremensku zonu prikladnu za lokaciju na koju ste odabrali postaviti te poslužitelje.
Ako namjeravate koristiti HTTP/FTP proxy, unesite njegov URL, inače nemojte postavljati proxy URL.
Odaberite NTP klijent za upravljanje sinkronizacijom sata sustava. Ovaj vodič će koristiti busybox.
Kada se od vas zatraži da se koristi zrcalo spremišta paketa, ili ga odaberite eksplicitno unosom njegovog broja; automatski otkriti i odabrati najbrži unosom f; ili ručno uredite konfiguracijsku datoteku spremišta unosom e, što se ne preporučuje osim ako niste upoznati s Alpine Linuxom. Ovaj vodič će koristiti prvo zrcalo.
Ako planirate koristiti SSH za pristup svojim poslužiteljima ili za hostiranje datotečnog sustava baziranog na SSH-u, odaberite SSH poslužitelj za korištenje. Ovaj vodič će koristiti openssh.
Kada se od vas zatraži da koristite disk, odaberite disk vdakao sysvrstu.
Alpine Linux 3.9.0 sada bi trebao biti instaliran na vašem poslužitelju. Ponovite ovaj postupak za sve ostale poslužitelje koje ste prethodno postavili, osiguravajući da zamijenite ispravne vrijednosti za ime hosta i eth1mrežno sučelje.
Konfiguracija poslužitelja nakon instalacije
U ovom trenutku, vaši poslužitelji još uvijek koriste živu ISO verziju Alpine Linux 3.9.0. Da biste se pokrenuli sa SSD instalacije, posjetite sučelje postavki vašeg poslužitelja, idite na Custom ISOunos bočnog izbornika i kliknite Remove ISOgumb. Ovo bi trebalo ponovno pokrenuti poslužitelj. Ako se ne dogodi, ponovno pokrenite ručno.
Nakon što poslužitelj završi ponovno pokretanje, vratite se na web konzolu za poslužitelj Docker Manager.
Prijavite se na root račun koristeći lozinku koju ste prethodno postavili tijekom procesa instalacije.
Omogućite spremište paketa zajednice dekomentiranjem trećeg retka /etc/apk/repositorieskorištenja vi. Možete omogućiti rubna i testna spremišta na sličan način, ali oni nisu obvezni slijediti ovaj vodič.
Sinkronizirajte poslužiteljov lokalni indeks paketa s udaljenim spremištem koje ste ranije odabrali unosom sljedeće naredbe ljuske:
# apk update
Zatim nadogradite zastarjele pakete:
# apk upgrade
Kao i prije, ponovite ovaj postupak konfiguracije za svaki poslužitelj koji ste prethodno postavili.
Instalirajte Docker na svoje poslužitelje
Prije instaliranja samog Docker paketa, možda ćete htjeti stvoriti zasebnog dockerkorisnika. To možete učiniti pomoću sljedeće naredbe:
# adduser docker
Napomena: Ovaj novi korisnik i svi korisnici dodani u novu dockergrupu imat će root privilegije nakon što se Docker paket instalira. Pogledajte sljedeći problem iz Moby Github repozitorija:
Due to the --privileged in docker, anyone added to the 'docker' group is root equivalent. Anyone in the docker group has a back door around all privilege escalation policy and auditing on the system.
This is different from someone being able to run running sudo to root, where they have policy, and audit applied to them.
Ako korisniku želite dati dopuštenje sudo docker, prvo instalirajte sudopaket:
# apk add sudo
Zatim stvorite sudogrupu:
# addgroup sudo
Na kraju dodajte dockerkorisnika u sudogrupu:
# adduser docker sudo
Sada možete slijediti 4. korak ovog vodiča da završite konfiguriranje sudoa.
U ovom trenutku, spremni ste za instalaciju Docker paketa. Imajte na umu da nije striktno potrebno imati zasebnog dockerkorisnika sposobnog za sudo za instalaciju i konfiguraciju Dockera, ali ovaj vodič slijedi tu konvenciju.
Instalirajte Docker paket sljedećom naredbom:
# apk add docker
Zatim omogućite Docker init skriptu:
# rc-update add docker
Konačno, pokrenite Docker demon:
# rc-service docker start
Ovom naredbom možete provjeriti radi li se Docker:
# docker info
Kao i prošli put, ponovite ovaj postupak instalacije Dockera za svaki poslužitelj koji ste postavili na početku.
Inicijalizirajte Docker roj s jednim čvorom upravitelja i jednim čvorom radnika
Nakon što ste riješili sve te postavke, konačno ste spremni za stvaranje Docker roja.
Napravite roj i dodajte čvor upravitelja
Vratite se na web konzolu vašeg Docker Managerposlužitelja. Konfigurirat ćete ovaj poslužitelj kao upraviteljski čvor u vašem roju. Ako ste dockerranije odlučili stvoriti korisnika, prijavite se koristeći taj račun, a ne superkorisnik.
Unesite sljedeću naredbu, ali zamijenite 192.0.2.1privatnom (ne javnom), IP adresom koju je vaš Docker Managerposlužitelj dodijelio:
$ docker swarm init --advertise-addr 192.0.2.1
Docker će prikazati naredbu koju možete izvršiti na drugim poslužiteljima u privatnoj mreži kako biste ih dodali kao radne čvorove ovom novom roju. Spremite ovu naredbu.
Dodajte radni čvor
Sada idite na web konzolu svog Docker Workerposlužitelja, prijavite se s dockerkorisnikom ako ste ga stvorili.
Za dodavanje ovog poslužitelja kao radnog čvora roju koji ste upravo stvorili, izvedite naredbu koju ste spremili iz izlaza naredbe za stvaranje roja. Izgledat će slično sljedećem:
$ docker swarm join --token SWMTKN-1-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXX 192.0.2.1:2377
Docker će ispisati je li se čvor uspio pridružiti roju. Ako naiđete na probleme s dodavanjem radnih čvorova u roj, dvaput provjerite konfiguraciju privatne mreže i pogledajte ovaj vodič za rješavanje problema.
Ako ste na početku implementirali više od dva poslužitelja, možete dodati ostale kao radne čvorove svom roju koristeći gornju naredbu, povećavajući količinu resursa dostupnih vašoj aplikaciji. Alternativno, možete dodati dodatne čvorove upravitelja, ali to je izvan dosega ovog vodiča.
Postavite Portainer sa SSL-om za upravljanje svojim Docker rojem
U ovom trenutku vaš je Docker roj spreman za upotrebu. Međutim, možete po želji pokrenuti Portainer stog na čvoru upravitelja u vašem roju. Portainer nudi praktično web sučelje za upravljanje vašim rojem i čvorovima u njemu.
Sada je vrijeme da stvorite grupu vatrozida za svoj roj. Osim ako vaša aplikacija to izričito ne zahtijeva, izložite portove samo na čvorovima upravitelja . Izlaganje portova na vašim radničkim čvorovima bez pažljivog razmatranja može dovesti do ranjivosti.
Dođite do sučelja za upravljanje vatrozidom i stvorite novu grupu vatrozida. Vaša aplikacija treba diktirati koje portove treba izložiti, ali morate, u najmanju ruku, otkriti port 9000za Portainer. Primijenite ovu grupu vatrozida na Docker Managerposlužitelj.
Iako to nije potrebno, snažno se preporučuje osiguranje Portainera SSL-om. Radi ovog vodiča, koristit ćete samo samopotpisani OpenSSL certifikat, ali biste trebali razmisliti o korištenju Let's Encrypt u proizvodnji.
Idite na web konzolu Docker Managerposlužitelja, prijavite se pomoću dockerkorisnika i koristite sljedeće naredbe za generiranje samopotpisanog OpenSSL certifikata:
$ mkdir ~/certs
$ openssl genrsa -out ~/certs/portainer.key 2048
$ openssl req -new -x509 -sha256 -key ~/certs/portainer.key -out ~/certs/portainer.pem -days 3650
Napravite novu datoteku, ~/portainer-agent-stack.yml, sa sljedećim sadržajem:
version: '3.2'
services:
agent:
image: portainer/agent
environment:
AGENT_CLUSTER_ADDR: tasks.agent
CAP_HOST_MANAGEMENT: 1
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/volumes:/var/lib/docker/volumes
- /:/host
networks:
- agent_network
deploy:
mode: global
portainer:
image: portainer/portainer
command: -H tcp://tasks.agent:9001 --tlsskipverify --ssl --sslcert /certs/portainer.pem --sslkey /certs/portainer.key
ports:
- target: 9000
published: 9000
protocol: tcp
mode: host
volumes:
- portainer_data:/data
- /home/docker/certs:/certs
networks:
- agent_network
deploy:
mode: replicated
replicas: 1
placement:
constraints: [node.role == manager]
networks:
agent_network:
driver: overlay
attachable: true
volumes:
portainer_data:
Nakon što modificirate ovu konfiguracijsku datoteku Docker stoga kako bi bila u skladu s vašim zahtjevima, možete je implementirati:
$ docker stack deploy --compose-file ~/portainer-agent-stack.yml portainer
Da biste provjerili radi li Portainer, izvedite sljedeću naredbu nakon što ste Dockeru dali minutu ili dvije da razmjesti stog:
$ docker ps
Vidjet ćete dva spremnika sa slikama portainer/portainer:latesti portainer/agent:latest, što potvrđuje da je Portainer ispravno pokrenut.
Sada možete konfigurirati i upravljati svojim Docker rojem posjetom javne IP adrese vašeg Docker Managerposlužitelja na portu 9000koristeći HTTPS.