Ú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 Locationsekcii 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 Librarykartu Server Typesekcie a vyberte Alpine Linux 3.9.0 x86_64obrázok.
Vyberte vhodnú možnosť zo Server Sizesekcie. 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 Featuressekcii musíte vybrať Enable Private Networkingmož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 Networksmož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 GroupSekciu 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 Qtyaspoň 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 & Labelsekcii 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-managera Docker Manager, v tomto poradí- docker-workera Docker Workerpre druhý server , v tomto poradí.
Po dvojitej kontrole všetkých vašich konfigurácií môžete kliknúť na Deploy Nowtlač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 optionspre Docker Managerserver v rozhraní správy servera a potom vyberte View Consolemož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 rootako 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ť usrozlož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: eth0a eth1. Ak vidíte iba eth0, znamená to, že ste nenakonfigurovali privátnu sieť vašich serverov správne. Inicializujte eth0pomocou dhcpa inicializujte eth1pomocou 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 vdaako systyp.
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 eth1sieť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 ISOpoložku bočnej ponuky a kliknite na Remove ISOtlač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/repositoriesusing 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 dockerpouží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 dockerskupiny 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 sudobalík:
# apk add sudo
Potom vytvorte sudoskupinu:
# addgroup sudo
Nakoniec pridajte dockerpoužívateľa do sudoskupiny:
# 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 dockerna 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 Managerservera. Tento server nakonfigurujete ako manažérsky uzol vo vašom roji. Ak ste sa rozhodli vytvoriť dockerpouží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.1ho súkromnou (nie verejnou) adresou IP, ktorá Docker Managerbola 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 Workerservera a prihláste sa s dockerpouží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 9000pre Portainer. Použite túto skupinu brány firewall na Docker Managerserver.
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 Managerservera, prihláste sa pomocou dockerpouží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.ymls 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:latesta 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 Managerservera na porte 9000pomocou HTTPS.