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 nodegrä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 Locationavsnittet, 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 Libraryfliken för Server Typeavsnittet och välj Alpine Linux 3.9.0 x86_64bilden.
Välj ett lämpligt alternativ från Server Sizeavsnittet. 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 Featuresavsnittet måste du välja Enable Private Networkingalternativet. Ä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 Networksalternativet 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 Groupavsnittet 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 Qtyav 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 & Labelavsnittet, 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-manageroch Docker Managerrespektive- och docker-workeroch Docker Workerför den andra.
Efter att ha dubbelkollat alla dina konfigurationer kan du klicka på Deploy Nowknappen 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 optionsikonen med tre punkter för Docker Managerservern på serverhanteringsgränssnittet och välj sedan View Consolealternativet.
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 rootsom 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 uslayouten 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: eth0och eth1. Om du bara ser eth0betyder det att du inte har konfigurerat dina servrars privata nätverk korrekt. Initiera eth0med dhcpoch initiera eth1med 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 vdasom systyp.
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 eth1nä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 ISOsidomenyn och klicka på Remove ISOknappen. 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/repositoriesanvä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 dockeranvä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 dockergruppen 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 dockeranvändaren, installera först sudopaketet:
# apk add sudo
Skapa sedan en sudogrupp:
# addgroup sudo
Lägg slutligen till dockeranvändaren i sudogruppen:
# 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 dockeranvä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 Managerservers webbkonsol. Du kommer att konfigurera den här servern som en förvaltarnod i din svärm. Om du valde att skapa dockeranvändaren tidigare, logga in med det kontot istället för superanvändaren.
Ange följande kommando, men ersätt 192.0.2.1med den privata (inte den offentliga), IP-adressen som din Docker Managerserver 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 Workerserver och logga in med dockeranvä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 9000för Portainer. Använd denna brandväggsgrupp på Docker Managerservern.
Ä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 Managerserverns webbkonsol, logga in med dockeranvä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:latestoch 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 Managerserver på porten med 9000hjälp av HTTPS.