Úvod
Predpoklady
Nasadenie
Nainštalujte na servery Alpine Linux 3.9.0
Konfigurácia servera po inštalácii
Nainštalujte Docker na svoje servery
Inicializujte Docker swarm s jedným manažérskym a jedným pracovným uzlom
Nasaďte Portainer s SSL na správu svojho Docker swarm
Úvod
Táto príručka vám ukáže, ako vytvoriť a nakonfigurovať Docker swarm pomocou viacerých serverov Alpine Linux 3.9.0 a Porttainer. Upozorňujeme, že Vultr ponúka aplikáciu One-Click Docker App, ktorá v súčasnosti podporuje CentOS 7 x64 aj Ubuntu 16.04 x64.
Predpoklady
Na začiatok budete potrebovať aspoň dva servery VC2 so systémom Alpine Linux 3.9.0. V rámci vášho Docker swarmu bude jeden z týchto serverov fungovať ako manager node
– prepojenie s externými sieťami a delegovanie úloh na pracovné uzly. Druhý server bude potom fungovať ako worker node
- vykonávajúci úlohy, ktoré mu deleguje manažérsky uzol.
Všimnite si, že môžete spustiť viac ako dva servery, ak vaša aplikácia vyžaduje redundanciu a/alebo vyšší výpočtový výkon, pričom kroky uvedené v tejto príručke budú stále platiť.
Nasadenie
Navštívte rozhranie nasadenia servera Vultr .
Uistite sa, že je Vultr Cloud (VC2)
karta vybratá v hornej časti stránky.
V Server Location
sekcii si môžete vybrať ľubovoľné umiestnenie , avšak všetky servery musia byť na rovnakom mieste , inak na ne nebude možné nasadiť roj Dockerov.
Vyberte ISO Library
kartu Server Type
sekcie a vyberte Alpine Linux 3.9.0 x86_64
obrázok.
Vyberte vhodnú možnosť zo Server Size
sekcie. V tejto príručke sa použije veľkosť servera SSD 25 GB, ale nemusí to stačiť na splnenie požiadaviek na zdroje vašej aplikácie. Aj keď Vultr uľahčuje aktualizáciu veľkosti servera po jeho spustení, stále by ste mali starostlivo zvážiť, akú veľkosť servera potrebuje vaša aplikácia na optimálny výkon.
V Additional Features
sekcii musíte vybrať Enable Private Networking
možnosť. Zatiaľ čo ostatné možnosti nie sú potrebné, aby ste sa riadili touto príručkou, mali by ste zvážiť, či každá z nich dáva zmysel v kontexte vašej aplikácie.
Ak ste túto Multiple Private Networks
možnosť vo svojom účte predtým povolili , budete musieť pre svoje servery vybrať existujúcu alebo vytvoriť novú súkromnú sieť. Ak ste to nepovolili, môžete túto časť ignorovať. Informácie o manuálnej konfigurácii súkromných sietí nájdete v tejto príručke .
Firewall Group
Sekciu zatiaľ preskočte . Odkryté porty bude potrebovať iba server, ktorý pôsobí ako manažérsky uzol v Docker swarm, a to by sa malo nakonfigurovať po nasadení servera.
Úplne dole na stránke musíte zadať Server Qty
aspoň dva. Ako už bolo spomenuté, možno budete potrebovať viac ako dva servery, ale dva sú dostatočné na to, aby ste sa riadili týmto návodom.
Nakoniec v Server Hostname & Label
sekcii zadajte zmysluplné a zapamätateľné názvy hostiteľov a štítky pre každý server. Na účely tejto príručky bude názov hostiteľa a štítok prvého servera docker-manager
a Docker Manager
, v tomto poradí- docker-worker
a Docker Worker
pre druhý server , v tomto poradí.
Po dvojitej kontrole všetkých vašich konfigurácií môžete kliknúť na Deploy Now
tlačidlo v spodnej časti stránky a spustiť servery.
Nainštalujte na servery Alpine Linux 3.9.0
Pretože ste si vybrali OS z knižnice ISO Vultr, budete musieť manuálne nainštalovať a nakonfigurovať Alpine Linux 3.9.0 na každom serveri.
Potom, čo dáte Vultrovi minútu alebo dve na pridelenie vašich serverov, kliknite na ikonu s tromi bodkami more options
pre Docker Manager
server v rozhraní správy servera a potom vyberte View Console
možnosť.
Mali by ste byť presmerovaní na konzolu s výzvou na prihlásenie. Ak nie, počkajte ďalšiu minútu, kým Vultr dokončí nasadenie vašich serverov.
Po prihlásení zadajte root
ako používateľské meno. Živá verzia Alpine Linux 3.9.0 (na ktorej momentálne bežia vaše servery) nevyžaduje, aby superužívateľ pri prihlasovaní zadával heslo.
Po úspešnom prihlásení do účtu root uvidíte uvítaciu správu, po ktorej bude nasledovať výzva shellu, ktorá vyzerá takto:
localhost:~#
Ak chcete spustiť inštalačný program Alpine Linux, zadajte nasledujúci príkaz:
# setup-alpine
Najprv vyberte vhodné rozloženie klávesnice. Táto príručka bude používať us
rozloženie a variant.
Pri nastavovaní názvu hostiteľa vyberte rovnaký názov hostiteľa, aký ste nastavili pre tento server počas nasadenia. Ak ste postupovali presne podľa tohto návodu, názov hostiteľa by mal byť docker-manager
.
Mali by byť k dispozícii dve sieťové rozhrania: eth0
a eth1
. Ak vidíte iba eth0
, znamená to, že ste nenakonfigurovali privátnu sieť vašich serverov správne. Inicializujte eth0
pomocou dhcp
a inicializujte eth1
pomocou súkromnej IP adresy, masky siete a brány, ktoré boli tomuto serveru priradené počas nasadenia. K týmto podrobnostiam sa dostanete z rozhrania nastavení vášho servera. Keď sa zobrazí výzva, nevykonávajte žiadnu manuálnu konfiguráciu siete.
Zadajte nové heslo pre konto root a potom vyberte časové pásmo vhodné pre umiestnenie, do ktorého ste tieto servery nasadili.
Ak máte v úmysle použiť HTTP/FTP proxy, zadajte jeho URL, inak URL proxy nenastavujte.
Vyberte klienta NTP na správu synchronizácie systémových hodín. Táto príručka bude používať busybox
.
Keď budete požiadaní o použitie zrkadla úložiska balíkov, vyberte ho explicitne zadaním jeho čísla; automaticky zistiť a vybrať najrýchlejší zadaním f
; alebo manuálne upravte konfiguračný súbor úložiska zadaním e
, čo sa neodporúča, pokiaľ nepoznáte Alpine Linux. Táto príručka bude používať prvé zrkadlo.
Ak plánujete používať SSH na prístup k vašim serverom alebo na hosťovanie súborového systému založeného na SSH, vyberte server SSH, ktorý chcete použiť. Táto príručka bude používať openssh
.
Po výzve pre disk použiť, vyberte disk vda
ako sys
typ.
Alpine Linux 3.9.0 by teraz mal byť nainštalovaný na vašom serveri. Tento proces zopakujte pre všetky ostatné servery, ktoré ste predtým nasadili, pričom sa uistite, že ste nahradili správne hodnoty pre názov hostiteľa a eth1
sieťové rozhranie.
Konfigurácia servera po inštalácii
V tomto bode vaše servery stále používajú živú ISO verziu Alpine Linux 3.9.0. Ak chcete zaviesť systém z inštalácie SSD, navštívte rozhranie nastavení vášho servera, prejdite na Custom ISO
položku bočnej ponuky a kliknite na Remove ISO
tlačidlo. To by malo reštartovať server. Ak sa tak nestane, reštartujte manuálne.
Po dokončení reštartovania servera prejdite späť na webovú konzolu servera Docker Manager
.
Prihláste sa do účtu root pomocou hesla, ktoré ste nastavili skôr počas procesu inštalácie.
Povoľte úložisko komunitných balíkov zrušením komentára v treťom riadku /etc/apk/repositories
using vi
. Edge a testovacie úložiská môžete povoliť podobným spôsobom, nemusia sa však riadiť týmto sprievodcom.
Synchronizujte lokálny index balíkov servera so vzdialeným archívom, ktorý ste vybrali predtým, zadaním nasledujúceho príkazu shell:
# apk update
Potom inovujte zastarané balíky:
# apk upgrade
Ako predtým, zopakujte tento konfiguračný proces pre každý server, ktorý ste predtým nasadili.
Nainštalujte Docker na svoje servery
Pred inštaláciou samotného balíka Docker možno budete chcieť vytvoriť samostatného docker
používateľa. Môžete to urobiť pomocou nasledujúceho príkazu:
# adduser docker
Poznámka: Tento nový používateľ a všetci používatelia pridaní do novej docker
skupiny budú mať po nainštalovaní balíka Docker oprávnenia root. Pozrite si nasledujúci problém z úložiska Moby Github:
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.
Ak chcete používateľovi udeliť povolenie sudo docker
, najskôr nainštalujte sudo
balík:
# apk add sudo
Potom vytvorte sudo
skupinu:
# addgroup sudo
Nakoniec pridajte docker
používateľa do sudo
skupiny:
# adduser docker sudo
Teraz môžete podľa kroku 4 tejto príručky dokončiť konfiguráciu sudo.
V tomto bode ste pripravení nainštalovať balík Docker. Upozorňujeme, že docker
na inštaláciu a konfiguráciu Dockeru nie je nevyhnutne potrebné mať samostatného používateľa schopného sudo , ale táto príručka sa riadi touto konvenciou.
Nainštalujte balík Docker pomocou nasledujúceho príkazu:
# apk add docker
Potom povoľte inicializačný skript Docker:
# rc-update add docker
Nakoniec spustite démona Docker:
# rc-service docker start
Pomocou tohto príkazu môžete overiť, či je Docker spustený:
# docker info
Ako naposledy, zopakujte tento proces inštalácie Docker pre každý server, ktorý ste nasadili na začiatku.
Inicializujte Docker swarm s jedným manažérskym a jedným pracovným uzlom
Po vykonaní všetkých týchto nastavení ste konečne pripravení vytvoriť roj Dockerov.
Vytvorte roj a pridajte manažérsky uzol
Prejdite späť na webovú konzolu vášho Docker Manager
servera. Tento server nakonfigurujete ako manažérsky uzol vo vašom roji. Ak ste sa rozhodli vytvoriť docker
používateľa skôr, prihláste sa pomocou tohto účtu a nie pomocou superpoužívateľa.
Zadajte nasledujúci príkaz, ale nahraďte 192.0.2.1
ho súkromnou (nie verejnou) adresou IP, ktorá Docker Manager
bola priradená vášmu serveru:
$ docker swarm init --advertise-addr 192.0.2.1
Docker zobrazí príkaz, ktorý môžete vykonať na iných serveroch v súkromnej sieti a pridať ich ako pracovné uzly do tohto nového roja. Uložte tento príkaz.
Pridajte pracovný uzol
Teraz prejdite na webovú konzolu vášho Docker Worker
servera a prihláste sa s docker
používateľom, ak ste ju vytvorili.
Ak chcete pridať tento server ako pracovný uzol do roja, ktorý ste práve vytvorili, vykonajte príkaz, ktorý ste uložili z výstupu príkazu na vytvorenie roja. Bude to vyzerať podobne ako nasledovné:
$ docker swarm join --token SWMTKN-1-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXX 192.0.2.1:2377
Docker vypíše, či sa uzol dokázal pripojiť k roju. Ak narazíte na problémy s pridávaním pracovných uzlov do roja, dvakrát skontrolujte konfiguráciu súkromnej siete a pozrite si túto príručku na riešenie problémov.
If you deployed more than two servers at the beginning, you can add the rest as worker nodes to your swarm using the command above, increasing the amount resources available to your application. Alternatively, you can add additional manager nodes, but that's beyond the scope of this guide.
Deploy Portainer with SSL to manage your Docker swarm
At this point your Docker swarm is ready for use. You may, however, optionally launch a Portainer stack on the manager node in your swarm. Portainer offers a convenient web interface for managing your swarm and the nodes therein.
It's now time to create a firewall group for your swarm. Unless your application specifically requires it, only expose ports on your manager nodes. Exposing ports on your worker nodes without careful consideration can introduce vulnerabilities.
Prejdite do rozhrania správy brány firewall a vytvorte novú skupinu brány firewall. Vaša aplikácia by mala diktovať, ktoré porty sa majú odkryť, ale musíte prinajmenšom odkryť port 9000
pre Portainer. Použite túto skupinu brány firewall na Docker Manager
server.
Hoci to nie je povinné, dôrazne sa odporúča zabezpečiť Porttainer pomocou SSL. Kvôli tejto príručke budete používať iba certifikát OpenSSL s vlastným podpisom, ale mali by ste zvážiť použitie Let's Encrypt v produkcii.
Prejdite na webovú konzolu Docker Manager
servera, prihláste sa pomocou docker
používateľa a pomocou nasledujúcich príkazov vygenerujte certifikát OpenSSL s vlastným podpisom:
$ mkdir ~/certs
$ openssl genrsa -out ~/certs/portainer.key 2048
$ openssl req -new -x509 -sha256 -key ~/certs/portainer.key -out ~/certs/portainer.pem -days 3650
Vytvorte nový súbor ~/portainer-agent-stack.yml
s nasledujúcim obsahom:
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:
Po úprave tohto konfiguračného súboru zásobníka Docker tak, aby vyhovoval vašim požiadavkám, ho môžete nasadiť:
$ docker stack deploy --compose-file ~/portainer-agent-stack.yml portainer
Ak chcete overiť, či Porttainer funguje, vykonajte nasledujúci príkaz po tom, čo ste dali Dockerovi minútu alebo dve na nasadenie zásobníka:
$ docker ps
Uvidíte dva kontajnery s obrázkami portainer/portainer:latest
a portainer/agent:latest
, čím sa overí, či sa Porttainer spustil správne.
Teraz môžete konfigurovať a spravovať svoj Docker swarm návštevou verejnej IP adresy vášho Docker Manager
servera na porte 9000
pomocou HTTPS.