Introduktion
Förutsättningar
Spridning
Installera Alpine Linux 3.9.0 på servrarna
Serverkonfiguration efter installation
Installera Docker på dina servrar
Initiera en Docker-svärm med en chefsnod och en arbetarnod
Distribuera Portainer med SSL för att hantera din Docker-svärm
Introduktion
Den här guiden visar dig hur du skapar och konfigurerar en Docker-svärm med flera Alpine Linux 3.9.0-servrar och Portainer. Var medveten om att Vultr erbjuder en One-Click Docker-app som för närvarande stöder både CentOS 7 x64 och Ubuntu 16.04 x64.
Förutsättningar
För att börja behöver du minst två VC2-servrar som kör Alpine Linux 3.9.0. Inom din Docker-svärm kommer en av dessa servrar att fungera som ett manager node
gränssnitt med externa nätverk och delegera jobb till arbetarnoder. Den andra servern kommer då att fungera som ett worker node
- exekverande jobb som delegerats till den av chefsnoden.
Observera att du kan starta fler än två servrar om din applikation kräver redundans och/eller mer datorkraft, och stegen i den här guiden kommer fortfarande att gälla.
Spridning
Besök Vultr- serverns distributionsgränssnitt .
Se till att Vultr Cloud (VC2)
fliken är vald överst på sidan.
Du kan välja vilken plats som helst från Server Location
avsnittet, men alla servrar måste vara på samma plats , annars kommer det inte att vara möjligt att distribuera en Docker-svärm till dem.
Välj ISO Library
fliken för Server Type
avsnittet och välj Alpine Linux 3.9.0 x86_64
bilden.
Välj ett lämpligt alternativ från Server Size
avsnittet. Den här guiden kommer att använda SSD-serverstorleken på 25 GB, men den kan vara otillräcklig för att uppfylla din applikations resurskrav. Även om Vultr gör det enkelt att uppgradera en serverstorlek efter att den redan har lanserats, bör du ändå noga överväga vilken serverstorlek din applikation behöver för att fungera optimalt.
I Additional Features
avsnittet måste du välja Enable Private Networking
alternativet. Även om de andra alternativen inte krävs för att följa den här guiden, bör du överväga om vart och ett är vettigt i din ansökan.
Om du tidigare har aktiverat Multiple Private Networks
alternativet på ditt konto måste du antingen välja ett befintligt eller skapa ett nytt privat nätverk för dina servrar. Om du inte har aktiverat det kan du ignorera det här avsnittet. För information om att manuellt konfigurera privata nätverk, se den här guiden .
Hoppa över Firewall Group
avsnittet tills vidare. Endast servern som fungerar som en chefsnod i Docker-svärmen kommer att behöva exponerade portar, och detta bör konfigureras efter serverinstallation.
Längst ner på sidan måste du ange en Server Qty
av minst två. Som nämnts tidigare kan du behöva mer än två servrar, men två är tillräckligt för att följa den här guiden.
Slutligen, i Server Hostname & Label
avsnittet, ange meningsfulla och minnesvärda värdnamn och etiketter för varje server. För syftet med denna guide kommer värdnamnet och etiketten för den första servern att vara docker-manager
och Docker Manager
respektive- och docker-worker
och Docker Worker
för den andra.
Efter att ha dubbelkollat alla dina konfigurationer kan du klicka på Deploy Now
knappen längst ner på sidan för att starta dina servrar.
Installera Alpine Linux 3.9.0 på servrarna
Eftersom du valde ett OS från Vultrs ISO-bibliotek, måste du manuellt installera och konfigurera Alpine Linux 3.9.0 på varje server.
Efter att ha gett Vultr en minut eller två på sig att tilldela dina servrar, klicka på more options
ikonen med tre punkter för Docker Manager
servern på serverhanteringsgränssnittet och välj sedan View Console
alternativet.
Du bör omdirigeras till en konsol med en inloggningsprompt. Om inte, vänta ytterligare en minut tills Vultr har slutfört driftsättningen av dina servrar.
Vid den inloggningsprompten anger du root
som användarnamn. Liveversionen av Alpine Linux 3.9.0 (vilket är vad dina servrar kör för närvarande) kräver inte att superanvändaren anger ett lösenord när han loggar in.
När du har loggat in på root-kontot kommer du att se ett välkomstmeddelande följt av en skalprompt som ser ut så här:
localhost:~#
För att starta installationsprogrammet för Alpine Linux, skriv in följande kommando:
# setup-alpine
Välj först en lämplig tangentbordslayout. Denna guide kommer att använda us
layouten och varianten.
När du ställer in värdnamnet, välj samma värdnamn som du angav för den här servern under distributionen. Om du har följt den här guiden exakt bör värdnamnet vara docker-manager
.
Två nätverksgränssnitt bör vara tillgängliga: eth0
och eth1
. Om du bara ser eth0
betyder det att du inte har konfigurerat dina servrars privata nätverk korrekt. Initiera eth0
med dhcp
och initiera eth1
med den privata IP-adressen, nätmasken och gatewayen som denna server tilldelades under distributionen. Du kan komma åt dessa detaljer från inställningsgränssnittet på din server. Utför ingen manuell nätverkskonfiguration när du uppmanas att göra det.
Ange ett nytt lösenord för root-kontot och välj sedan en tidszon som är lämplig för den plats du valde att distribuera dessa servrar till.
Om du tänker använda en HTTP/FTP-proxy anger du dess URL, annars ställer du inte in en proxy-URL.
Välj en NTP-klient för att hantera systemklocksynkronisering. Denna guide kommer att använda busybox
.
När du blir ombedd att använda en paketförvarsspegel, välj antingen en uttryckligen genom att ange dess nummer; upptäck och välj automatiskt den snabbaste genom att ange f
; eller redigera förvarets konfigurationsfil manuellt genom att ange e
, vilket inte rekommenderas om du inte är bekant med Alpine Linux. Denna guide kommer att använda den första spegeln.
Om du planerar att använda SSH för att komma åt dina servrar eller för att vara värd för ett SSH-baserat filsystem, välj en SSH-server att använda. Denna guide kommer att använda openssh
.
När du uppmanas att använda en disk väljer du disk vda
som sys
typ.
Alpine Linux 3.9.0 bör nu installeras på din server. Upprepa denna process för alla andra servrar som du distribuerade tidigare, och se till att du ersätter värdnamnet och eth1
nätverksgränssnittet med rätt värden .
Serverkonfiguration efter installation
Vid det här laget kör dina servrar fortfarande den levande ISO-versionen av Alpine Linux 3.9.0. För att starta från SSD-installationen, besök inställningsgränssnittet på din server, navigera till Custom ISO
sidomenyn och klicka på Remove ISO
knappen. Detta bör starta om servern. Om det inte gör det, starta om manuellt.
När servern har startat om, navigera tillbaka till webbkonsolen för servern Docker Manager
.
Logga in på root-kontot med lösenordet du angav tidigare under installationsprocessen.
Aktivera community-paketförrådet genom att avkommentera den tredje raden för att /etc/apk/repositories
använda vi
. Du kan aktivera kant- och testarkiven på liknande sätt, men de behöver inte följa den här guiden.
Synkronisera serverns lokala paketindex med fjärrarkivet du valde tidigare genom att ange följande skalkommando:
# apk update
Uppgradera sedan föråldrade paket:
# apk upgrade
Som tidigare, upprepa den här konfigurationsprocessen för varje server som du distribuerade tidigare.
Installera Docker på dina servrar
Innan du installerar själva Docker-paketet kanske du vill skapa en separat docker
användare. Du kan göra detta med följande kommando:
# adduser docker
Obs: Den här nya användaren och alla användare som läggs till i den nya docker
gruppen kommer att ha root-privilegier när Docker-paketet har installerats. Se följande problem från Moby Github-förvaret:
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.
Om du vill ge sudo-tillstånd till docker
användaren, installera först sudo
paketet:
# apk add sudo
Skapa sedan en sudo
grupp:
# addgroup sudo
Lägg slutligen till docker
användaren i sudo
gruppen:
# adduser docker sudo
Nu kan du följa steg 4 i den här guiden för att slutföra konfigureringen av sudo.
Vid det här laget är du redo att installera Docker-paketet. Observera att det inte är strikt nödvändigt att ha en separat, sudo-kapabel docker
användare för att installera och konfigurera Docker, men den här guiden följer den konventionen.
Installera Docker-paketet med följande kommando:
# apk add docker
Aktivera sedan Docker init-skriptet:
# rc-update add docker
Slutligen, starta Docker-demonen:
# rc-service docker start
Du kan verifiera att Docker körs med detta kommando:
# docker info
Som förra gången, upprepa denna Docker-installationsprocessen för varje server du distribuerade i början.
Initiera en Docker-svärm med en chefsnod och en arbetarnod
Med all den installationen hanterad är du äntligen redo att skapa Docker-svärmen.
Skapa en svärm och lägg till en chefsnod
Navigera tillbaka till din Docker Manager
servers webbkonsol. Du kommer att konfigurera den här servern som en förvaltarnod i din svärm. Om du valde att skapa docker
användaren tidigare, logga in med det kontot istället för superanvändaren.
Ange följande kommando, men ersätt 192.0.2.1
med den privata (inte den offentliga), IP-adressen som din Docker Manager
server tilldelades:
$ docker swarm init --advertise-addr 192.0.2.1
Docker kommer att visa ett kommando som du kan köra på andra servrar i det privata nätverket för att lägga till dem som arbetarnoder till denna nya svärm. Spara detta kommando.
Lägg till en arbetarnod
Navigera nu till webbkonsolen på din Docker Worker
server och logga in med docker
användaren om du skapade den.
För att lägga till den här servern som en arbetarnod till svärmen du just skapade, kör kommandot du sparade från utgången av kommandot för att skapa svärm. Det kommer att se ut som följande:
$ docker swarm join --token SWMTKN-1-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXXXXXXXXXXXX 192.0.2.1:2377
Docker kommer att visa om noden kunde ansluta sig till svärmen. Om du stöter på problem med att lägga till arbetarnoder till svärmen, dubbelkolla din privata nätverkskonfiguration och se den här guiden för felsökning.
Om du distribuerade fler än två servrar i början kan du lägga till resten som arbetarnoder till din svärm med kommandot ovan, vilket ökar mängden resurser som är tillgängliga för din applikation. Alternativt kan du lägga till ytterligare chefsnoder, men det ligger utanför den här guidens räckvidd.
Distribuera Portainer med SSL för att hantera din Docker-svärm
Vid det här laget är din Docker-svärm redo att användas. Du kan dock valfritt starta en Portainer-stack på managernoden i din svärm. Portainer erbjuder ett bekvämt webbgränssnitt för att hantera din svärm och noderna däri.
Det är nu dags att skapa en brandväggsgrupp för din svärm. Om inte din applikation specifikt kräver det, exponera bara portar på dina managernoder . Att exponera portar på dina arbetarnoder utan noggrant övervägande kan introducera sårbarheter.
Navigera till gränssnittet för brandväggshantering och skapa en ny brandväggsgrupp. Din ansökan bör diktera vilka portar som ska exponeras, men du måste åtminstone exponera port 9000
för Portainer. Använd denna brandväggsgrupp på Docker Manager
servern.
Även om det inte är nödvändigt, rekommenderas starkt att säkra Portainer med SSL. För den här guidens skull kommer du bara att använda ett självsignerat OpenSSL-certifikat, men du bör överväga att använda Let's Encrypt i produktionen.
Navigera till Docker Manager
serverns webbkonsol, logga in med docker
användaren och använd följande kommandon för att generera ett självsignerat OpenSSL-certifikat:
$ mkdir ~/certs
$ openssl genrsa -out ~/certs/portainer.key 2048
$ openssl req -new -x509 -sha256 -key ~/certs/portainer.key -out ~/certs/portainer.pem -days 3650
Skapa en ny fil, ~/portainer-agent-stack.yml
, med följande innehåll:
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:
Efter att ha modifierat denna Docker-stackkonfigurationsfil för att överensstämma med dina krav, kan du distribuera den:
$ docker stack deploy --compose-file ~/portainer-agent-stack.yml portainer
För att verifiera att Portainer fungerar, kör följande kommando efter att ha gett Docker en minut eller två för att distribuera stacken:
$ docker ps
Du kommer att se två behållare med bilderna portainer/portainer:latest
och portainer/agent:latest
, som verifierar att Portainer startade korrekt.
Du kan nu konfigurera och hantera din Docker-svärm genom att besöka den offentliga IP-adressen för din Docker Manager
server på porten med 9000
hjälp av HTTPS.