Come installare e configurare un cluster Docker Swarm su CentOS 8
Su questa pagina
- Prerequisiti
- Installa Docker su entrambi i nodi
- Configura firewall
- Inizializza il Docker Swarm Cluster
- Aggiungi nodo di lavoro a Docker Swarm Cluster
- Avvia un servizio in Docker Swarm
- Verifica Docker Swarm
- Conclusione
Docker è uno strumento open source che può essere utilizzato per creare, distribuire ed eseguire applicazioni utilizzando un contenitore. Il contenitore consente di impacchettare un'applicazione con tutte le dipendenze richieste e di spedirla come un unico pacchetto.
Docker Swarm è uno strumento di clustering utilizzato per la gestione dell'host Docker. Consente di trasformare un gruppo di host Docker in un unico server virtuale logico. In questo modo puoi ridimensionare la tua applicazione orizzontalmente e aumentare il numero dell'istanza del contenitore. Docker swarm offre funzionalità molto utili, tra cui la riparazione automatica dei container, il bilanciamento del carico, lo scale up e lo scale down dei container, l'individuazione dei servizi e gli aggiornamenti in sequenza.
In questo post, ti mostreremo come configurare un cluster Docker Swarm su CentOS 8.
Prerequisiti
- Due server che eseguono CentOS 8.
- Su ogni server è configurata una password di root.
Installa Docker su entrambi i nodi
Innanzitutto, dovrai installare Docker su entrambi i nodi. Per impostazione predefinita, l'ultima versione di Docker non è inclusa nel repository predefinito di CentOS 8. Quindi dovrai aggiungere un repository Docker nel tuo sistema.
Puoi aggiungerlo con il seguente comando:
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
Una volta creato il repository Docker, installa Docker con il seguente comando:
dnf install docker-ce --nobest
Dopo aver installato Docker, avvia il servizio Docker e abilitalo per l'avvio al riavvio del sistema con il seguente comando:
systemctl start docker
systemctl enable docker
Puoi anche verificare lo stato di Docker con il seguente comando:
systemctl status docker
Dovresti ottenere il seguente output:
? docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) Active: active (running) since Fri 2021-03-12 03:55:24 EST; 6s ago Docs: https://docs.docker.com Main PID: 2173 (dockerd) Tasks: 8 Memory: 44.7M CGroup: /system.slice/docker.service ??2173 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock Mar 12 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.570387991-05:00" level=error msg="Failed to built-in GetDriver graph btrfs> Mar 12 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.617049696-05:00" level=warning msg="Your kernel does not support cgroup bl> Mar 12 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.617096273-05:00" level=warning msg="Your kernel does not support cgroup bl> Mar 12 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.617278059-05:00" level=info msg="Loading containers: start." Mar 12 03:55:23 workernode dockerd[2173]: time="2021-03-12T03:55:23.884953789-05:00" level=info msg="Default bridge (docker0) is assigned with> Mar 12 03:55:24 workernode dockerd[2173]: time="2021-03-12T03:55:24.039811428-05:00" level=info msg="Loading containers: done." Mar 12 03:55:24 workernode dockerd[2173]: time="2021-03-12T03:55:24.066358016-05:00" level=info msg="Docker daemon" commit=363e9a8 graphdriver> Mar 12 03:55:24 workernode dockerd[2173]: time="2021-03-12T03:55:24.066498611-05:00" level=info msg="Daemon has completed initialization" Mar 12 03:55:24 workernode systemd[1]: Started Docker Application Container Engine. Mar 12 03:55:24 workernode dockerd[2173]: time="2021-03-12T03:55:24.119523516-05:00" level=info msg="API listen on /var/run/docker.sock"
Ora, verifica la versione installata di Docker utilizzando il seguente comando:
docker --version
Dovresti vedere il seguente output:
Docker version 20.10.5, build 55c4c88
Configura firewall
Successivamente, dovrai consentire le porte 2376, 2377, 7946 e 80 attraverso il firewall su entrambi i nodi. Puoi consentirli con il seguente comando:
firewall-cmd --permanent --add-port=2376/tcp
firewall-cmd --permanent --add-port=2377/tcp
firewall-cmd --permanent --add-port=7946/tcp
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=7946/udp
firewall-cmd --permanent --add-port=4789/udp
Successivamente, ricarica il firewalld per applicare le modifiche:
firewall-cmd --reload
Inizializza il Docker Swarm Cluster
Successivamente, dovrai inizializzare il cluster Docker Swarm sul nodo di gestione. Puoi farlo con il seguente comando:
docker swarm init --advertise-addr 45.58.32.185
Dovresti ottenere il seguente output:
Swarm initialized: current node (cq8xpscsls2ctqhdha8lhdrph) is now a manager. To add a worker to this swarm, run the following command: docker swarm join --token SWMTKN-1-24ciicg1knfh8htmvymnfw1igx64tcq6ah91n6amk18m2ek9qo-8sf9oysu08t5mf4ggd4ut7o3e 45.58.32.185:2377 To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
Puoi utilizzare il comando mostrato nell'output precedente nel nodo di lavoro Docker per unire il nodo al cluster.
Puoi controllare le informazioni del cluster Docker Swarm con il seguente comando:
docker info
Dovresti ottenere il seguente output:
Client: Context: default Debug Mode: false Plugins: app: Docker App (Docker Inc., v0.9.1-beta3) buildx: Build with BuildKit (Docker Inc., v0.5.1-docker) Server: Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 20.10.5 Storage Driver: overlay2 Backing Filesystem: xfs Supports d_type: true Native Overlay Diff: true Logging Driver: json-file Cgroup Driver: cgroupfs Cgroup Version: 1 Plugins: Volume: local Network: bridge host ipvlan macvlan null overlay Log: awslogs fluentd gcplogs gelf journald json-file local logentries splunk syslog Swarm: active NodeID: cq8xpscsls2ctqhdha8lhdrph Is Manager: true ClusterID: m7jrgvuw1k7pvfd1qyc3mffpl Managers: 1 Nodes: 1 Default Address Pool: 10.0.0.0/8 SubnetSize: 24 Data Path Port: 4789 Orchestration: Task History Retention Limit: 5 Raft: Snapshot Interval: 10000 Number of Old Snapshots to Retain: 0 Heartbeat Tick: 1 Election Tick: 10 Dispatcher: Heartbeat Period: 5 seconds CA Configuration: Expiry Duration: 3 months Force Rotate: 0 Autolock Managers: false Root Rotation In Progress: false Node Address: 45.58.32.185 Manager Addresses: 45.58.32.185:2377
Ora puoi verificare il nodo Docker Swarm con il seguente comando:
docker node ls
Dovresti ottenere il seguente output:
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION cq8xpscsls2ctqhdha8lhdrph * masternode Ready Active Leader 20.10.5
Aggiungi nodo di lavoro al cluster Docker Swarm
Successivamente, dovrai aggiungere il nodo di lavoro al nodo gestore Docker Swarm. Puoi farlo con il seguente comando sul nodo di lavoro:
docker swarm join --token SWMTKN-1-24ciicg1knfh8htmvymnfw1igx64tcq6ah91n6amk18m2ek9qo-8sf9oysu08t5mf4ggd4ut7o3e 45.58.32.185:2377
Dovresti ottenere il seguente output:
This node joined a swarm as a worker.
Sul nodo Docker Manager, verifica il nodo di lavoro con il seguente comando:
docker node ls
Dovresti vedere che il nodo di lavoro è stato aggiunto a Docker Swarm:
cq8xpscsls2ctqhdha8lhdrph * masternode Ready Active Leader 20.10.5 bipfv8sfm94a9po0uame5rd1n workernode Ready Active 20.10.5
Avvia un servizio in Docker Swarm
Qui creeremo un nuovo servizio web Nginx e lo ridimensioneremo con due contenitori. Puoi crearlo eseguendo il seguente comando sul nodo Manager:
docker service create -p 80:80 --name webservice --replicas 2 nginx
Dovresti ottenere il seguente output:
agyxlaswxakrbboakkyydsh0k overall progress: 2 out of 2 tasks 1/2: running [==================================================>] 2/2: running [==================================================>] verify: Service converged
Ora puoi controllare il servizio web con il seguente comando:
docker service ls
Dovresti vedere il seguente output:
ID NAME MODE REPLICAS IMAGE PORTS agyxlaswxakr webservice replicated 2/2 nginx:latest *:80->80/tcp
Puoi anche controllare il contenitore in esecuzione con il seguente comando:
docker ps
Dovresti vedere il seguente output:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c887cad1df2e nginx:latest "/docker-entrypoint.…" 32 seconds ago Up 30 seconds 80/tcp webservice.2.jelyj9gmeb7ikl2scg7mz8yg8
Per ottenere le informazioni dettagliate del webservice, eseguire il seguente comando:
docker service ps webservice
Dovresti vedere il seguente output:
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS eye9zukwwrkq webservice.1 nginx:latest workernode Running Running 3 minutes ago jelyj9gmeb7i webservice.2 nginx:latest masternode Running Running 3 minutes ago
Verifica lo sciame Docker
A questo punto, abbiamo distribuito un contenitore Nginx tra i nodi del cluster, incluso il nodo di gestione. Ora puoi accedere al tuo server web Nginx utilizzando uno qualsiasi degli indirizzi IP del nodo di lavoro o del nodo Manager:
Conclusione
Nella guida sopra, hai imparato come configurare il cluster Docker Swarm su CentOS 8. Ora puoi aggiungere qualsiasi numero di nodi di lavoro al cluster Docker Swarm e ridimensionare la tua applicazione.