Úvod
Předpoklady
Rozvinutí
Nainstalujte na servery Alpine Linux 3.9.0
Konfigurace serveru po instalaci
Nainstalujte Docker na své servery
Inicializujte Docker swarm s jedním manažerským uzlem a jedním pracovním uzlem
Nasaďte Portainer s SSL a spravujte svůj Docker swarm
Úvod
Tato příručka vám ukáže, jak vytvořit a nakonfigurovat Docker swarm pomocí několika serverů Alpine Linux 3.9.0 a Porttaineru. Mějte prosím na paměti, že Vultr nabízí aplikaci One-Click Docker App, která aktuálně podporuje CentOS 7 x64 i Ubuntu 16.04 x64.
Předpoklady
Chcete-li začít, budete potřebovat alespoň dva servery VC2 se systémem Alpine Linux 3.9.0. V rámci vašeho Docker swarmu bude jeden z těchto serverů fungovat jako manager node
– rozhraní s externími sítěmi a delegování úloh na pracovní uzly. Druhý server pak bude fungovat jako worker node
- provádějící úlohy, které mu byly delegovány manažerským uzlem.
Pamatujte, že pokud vaše aplikace vyžaduje redundanci a/nebo vyšší výpočetní výkon, můžete spustit více než dva servery a kroky uvedené v této příručce budou stále platit.
Rozvinutí
Navštivte rozhraní pro nasazení serveru Vultr .
Ujistěte se, že Vultr Cloud (VC2)
je vybrána karta v horní části stránky.
V Server Location
sekci můžete vybrat libovolné umístění , ale všechny servery musí být ve stejném umístění , jinak na ně nebude možné nasadit roj Docker.
Vyberte ISO Library
záložku Server Type
sekce a vyberte Alpine Linux 3.9.0 x86_64
obrázek.
Vyberte vhodnou možnost ze Server Size
sekce. Tato příručka bude používat velikost serveru SSD 25 GB, ale ke splnění požadavků na zdroje vaší aplikace to nemusí stačit. I když Vultr usnadňuje upgrade velikosti serveru poté, co byl již spuštěn, měli byste stále pečlivě zvážit, jakou velikost serveru vaše aplikace potřebuje, aby fungovala optimálně.
V Additional Features
sekci musíte vybrat Enable Private Networking
možnost. I když ostatní možnosti nejsou pro následování tohoto průvodce vyžadovány, měli byste zvážit, zda každá z nich dává smysl v kontextu vaší aplikace.
Pokud jste tuto Multiple Private Networks
možnost na svém účtu dříve povolili , budete muset pro své servery vybrat existující nebo vytvořit novou privátní síť. Pokud jste to nepovolili, můžete tuto sekci ignorovat. Informace o ruční konfiguraci privátních sítí naleznete v této příručce .
Firewall Group
Sekci prozatím přeskočte . Exponované porty bude potřebovat pouze server působící jako manažerský uzel v Docker swarm a to by mělo být nakonfigurováno po nasazení serveru.
Úplně dole na stránce musíte zadat Server Qty
alespoň dvě. Jak již bylo zmíněno dříve, možná budete potřebovat více než dva servery, ale k provedení tohoto průvodce stačí dva.
Nakonec v Server Hostname & Label
části zadejte smysluplné a zapamatovatelné názvy hostitelů a štítky pro každý server. Pro účely této příručky bude název hostitele a štítek prvního serveru docker-manager
a Docker Manager
, v tomto pořadí- a docker-worker
a Docker Worker
pro druhý, v tomto pořadí.
Po dvojité kontrole všech vašich konfigurací můžete kliknutím na Deploy Now
tlačítko v dolní části stránky spustit servery.
Nainstalujte na servery Alpine Linux 3.9.0
Protože jste si vybrali operační systém z knihovny ISO Vultr, budete muset ručně nainstalovat a nakonfigurovat Alpine Linux 3.9.0 na každý server.
Poté, co dáte Vultru minutu nebo dvě na přidělení vašich serverů, klikněte na more options
ikonu se třemi tečkami pro Docker Manager
server v rozhraní správy serveru a poté vyberte View Console
možnost.
Měli byste být přesměrováni do konzole s výzvou k přihlášení. Pokud ne, počkejte prosím ještě minutu, než Vultr dokončí nasazení vašich serverů.
Na výzvu k přihlášení zadejte root
jako uživatelské jméno. Živá verze Alpine Linux 3.9.0 (na které aktuálně běží vaše servery) nevyžaduje, aby superuživatel při přihlašování zadával heslo.
Jakmile se úspěšně přihlásíte do účtu root, uvidíte uvítací zprávu následovanou výzvou shellu, která vypadá takto:
localhost:~#
Chcete-li spustit instalační program Alpine Linux, zadejte následující příkaz:
# setup-alpine
Nejprve vyberte vhodné rozložení klávesnice. Tato příručka bude používat us
rozložení a variantu.
Při nastavování názvu hostitele vyberte stejný název hostitele, který jste nastavili pro tento server během implementace. Pokud jste přesně postupovali podle tohoto návodu, název hostitele by měl být docker-manager
.
K dispozici by měla být dvě síťová rozhraní: eth0
a eth1
. Pokud vidíte pouze eth0
, znamená to, že jste soukromou síť svých serverů nenakonfigurovali správně. Inicializujte eth0
pomocí dhcp
a inicializujte eth1
pomocí soukromé IP adresy, masky sítě a brány, které byly tomuto serveru přiřazeny během nasazení. K těmto podrobnostem můžete přistupovat z rozhraní nastavení vašeho serveru. Po zobrazení výzvy neprovádějte žádnou ruční konfiguraci sítě.
Zadejte nové heslo pro účet root a poté vyberte časové pásmo vhodné pro umístění, do kterého jste tyto servery nasadili.
Pokud hodláte používat HTTP/FTP proxy, zadejte jeho URL, jinak URL proxy nenastavujte.
Vyberte klienta NTP pro správu synchronizace systémových hodin. Tato příručka bude používat busybox
.
Když budete požádáni o použití zrcadla úložiště balíčků, buď je explicitně vyberte zadáním jeho čísla; automaticky detekovat a vybrat nejrychlejší zadáním f
; nebo ručně upravte konfigurační soubor úložiště zadáním e
, což se nedoporučuje, pokud neznáte Alpine Linux. Tato příručka bude používat první zrcadlo.
Pokud plánujete používat SSH k přístupu k vašim serverům nebo k hostování souborového systému založeného na SSH, vyberte server SSH, který chcete použít. Tato příručka bude používat openssh
.
Po zobrazení výzvy pro disk použít, zvolte disk vda
jako sys
typ.
Alpine Linux 3.9.0 by nyní měl být nainstalován na vašem serveru. Tento postup opakujte pro všechny ostatní servery, které jste dříve nasadili, a ujistěte se, že jste nahradili správné hodnoty pro název hostitele a eth1
síťové rozhraní.
Konfigurace serveru po instalaci
V tuto chvíli vaše servery stále používají živou ISO verzi Alpine Linux 3.9.0. Chcete-li zavést systém z instalace SSD, navštivte rozhraní nastavení vašeho serveru, přejděte na Custom ISO
položku postranní nabídky a klikněte na Remove ISO
tlačítko. To by mělo restartovat server. Pokud ne, restartujte ručně.
Po dokončení restartování serveru přejděte zpět do webové konzole serveru Docker Manager
.
Přihlaste se k účtu root pomocí hesla, které jste nastavili dříve během procesu instalace.
Povolte úložiště komunitních balíčků zrušením komentáře na třetím řádku /etc/apk/repositories
using vi
. Edge a testovací úložiště můžete povolit podobným způsobem, ale není nutné, aby se řídili tímto průvodcem.
Synchronizujte lokální index balíčků serveru se vzdáleným úložištěm, které jste vybrali dříve, zadáním následujícího příkazu shell:
# apk update
Poté upgradujte zastaralé balíčky:
# apk upgrade
Stejně jako dříve opakujte tento konfigurační proces pro každý server, který jste nasadili dříve.
Nainstalujte Docker na své servery
Před instalací samotného balíčku Docker možná budete chtít vytvořit samostatného docker
uživatele. Můžete to provést pomocí následujícího příkazu:
# adduser docker
Poznámka: Tento nový uživatel a všichni uživatelé přidaní do nové docker
skupiny budou mít po instalaci balíčku Docker oprávnění root. Podívejte se na následující problém z úložiště 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.
Pokud chcete uživateli udělit oprávnění sudo docker
, nejprve nainstalujte sudo
balíček:
# apk add sudo
Poté vytvořte sudo
skupinu:
# addgroup sudo
Nakonec přidejte docker
uživatele do sudo
skupiny:
# adduser docker sudo
Nyní můžete podle kroku 4 této příručky dokončit konfiguraci sudo.
V tomto okamžiku jste připraveni nainstalovat balíček Docker. Upozorňujeme, že docker
k instalaci a konfiguraci Dockeru není nezbytně nutné mít samostatného uživatele schopného sudo , ale tato příručka se řídí touto konvencí.
Nainstalujte balíček Docker pomocí následujícího příkazu:
# apk add docker
Poté povolte inicializační skript Docker:
# rc-update add docker
Nakonec spusťte démona Docker:
# rc-service docker start
Pomocí tohoto příkazu můžete ověřit, že Docker běží:
# docker info
Stejně jako minule opakujte tento instalační proces Dockeru pro každý server, který jste nasadili na začátku.
Inicializujte Docker swarm s jedním manažerským uzlem a jedním pracovním uzlem
Po vyřešení všech těchto nastavení jste konečně připraveni vytvořit roj Dockerů.
Vytvořte roj a přidejte manažerský uzel
Přejděte zpět do webové konzole vašeho Docker Manager
serveru. Tento server nakonfigurujete jako manažerský uzel ve vašem roji. Pokud jste se rozhodli vytvořit docker
uživatele dříve, přihlaste se pomocí tohoto účtu, nikoli pomocí superuživatele.
Zadejte následující příkaz, ale nahraďte 192.0.2.1
jej soukromou (nikoli veřejnou) IP adresou, kterou váš Docker Manager
server přidělil:
$ docker swarm init --advertise-addr 192.0.2.1
Docker zobrazí příkaz, který můžete provést na jiných serverech v privátní síti a přidat je jako pracovní uzly do tohoto nového roje. Uložte tento příkaz.
Přidejte pracovní uzel
Nyní přejděte do webové konzole vašeho Docker Worker
serveru a přihlaste se s docker
uživatelem, pokud jste ji vytvořili.
Chcete-li přidat tento server jako pracovní uzel do roje, který jste právě vytvořili, spusťte příkaz, který jste uložili z výstupu příkazu k vytvoření roje. Bude vypadat podobně jako následující:
$ docker swarm join --token SWMTKN-1-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXX 192.0.2.1:2377
Docker vypíše, zda se uzel dokázal připojit k roji. Pokud narazíte na problémy s přidáváním pracovních uzlů do roje, znovu zkontrolujte konfiguraci privátní sítě a vyhledejte řešení v této příručce .
Pokud jste na začátku nasadili více než dva servery, můžete zbytek přidat jako pracovní uzly do svého roje pomocí příkazu výše, čímž zvýšíte množství prostředků dostupných pro vaši aplikaci. Případně můžete přidat další manažerské uzly, ale to je nad rámec této příručky.
Nasaďte Portainer s SSL a spravujte svůj Docker swarm
V tomto okamžiku je váš roj Docker připraven k použití. Volitelně však můžete spustit hromádku Portainerů na manažerském uzlu ve vašem roji. Portainer nabízí pohodlné webové rozhraní pro správu vašeho roje a jeho uzlů.
Nyní je čas vytvořit skupinu firewallu pro váš roj. Pokud to vaše aplikace výslovně nevyžaduje, vystavujte porty pouze na svých manažerských uzlech . Vystavení portů na vašich pracovních uzlech bez pečlivého zvážení může způsobit zranitelnost.
Přejděte do rozhraní pro správu brány firewall a vytvořte novou skupinu brány firewall. Vaše aplikace by měla diktovat, které porty se mají vystavit, ale musíte přinejmenším vystavit port 9000
pro Portainer. Použijte tuto skupinu brány firewall na Docker Manager
server.
I když to není vyžadováno, důrazně se doporučuje zabezpečit Porttainer pomocí SSL. Kvůli této příručce budete používat pouze certifikát OpenSSL podepsaný svým držitelem, ale měli byste zvážit použití Let's Encrypt v produkci.
Přejděte na webovou konzolu Docker Manager
serveru, přihlaste se pomocí docker
uživatele a pomocí následujících příkazů vygenerujte certifikát OpenSSL s vlastním podpisem:
$ mkdir ~/certs
$ openssl genrsa -out ~/certs/portainer.key 2048
$ openssl req -new -x509 -sha256 -key ~/certs/portainer.key -out ~/certs/portainer.pem -days 3650
Vytvořte nový soubor ~/portainer-agent-stack.yml
, s následujícím obsahem:
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 úpravě tohoto konfiguračního souboru zásobníku Docker tak, aby odpovídal vašim požadavkům, jej můžete nasadit:
$ docker stack deploy --compose-file ~/portainer-agent-stack.yml portainer
Chcete-li ověřit, že Porttainer funguje, spusťte následující příkaz poté, co jste dali Dockeru minutu nebo dvě na nasazení zásobníku:
$ docker ps
Uvidíte dva kontejnery s obrázky portainer/portainer:latest
a portainer/agent:latest
, které ověřují, že se Porttainer spustil správně.
Nyní můžete konfigurovat a spravovat svůj Docker swarm návštěvou veřejné IP adresy vašeho Docker Manager
serveru na portu 9000
pomocí HTTPS.