웹사이트 검색

CentOS 8에서 Docker Swarm 클러스터를 설치 및 구성하는 방법


이 페이지에서

  1. 전제 조건
  2. 두 노드 모두에 Docker 설치
  3. 방화벽 구성\n
  4. Docker Swarm 클러스터 초기화\n
  5. Docker Swarm 클러스터에 작업자 노드 추가
  6. Docker Swarm에서 서비스 시작
  7. Docker Swarm 확인\n
  8. 결론

Docker는 컨테이너를 사용하여 애플리케이션을 생성, 배포 및 실행하는 데 사용할 수 있는 오픈 소스 도구입니다. 컨테이너를 사용하면 필요한 모든 종속성과 함께 애플리케이션을 패키징하고 단일 패키지로 배송할 수 있습니다.

Docker Swarm은 Docker 호스트를 관리하는 데 사용되는 클러스터링 도구입니다. Docker 호스트 그룹을 단일 논리적 가상 서버로 만들 수 있습니다. 이렇게 하면 애플리케이션을 수평으로 확장하고 컨테이너 인스턴스의 수를 늘릴 수 있습니다. Docker Swarm은 컨테이너 자가 복구, 로드 밸런싱, 컨테이너 확장 및 축소, 서비스 검색, 롤링 업데이트를 비롯한 매우 유용한 기능을 제공합니다.

이 게시물에서는 CentOS 8에서 Docker Swarm 클러스터를 설정하는 방법을 보여줍니다.

전제 조건

  • CentOS 8을 실행하는 두 대의 서버.\n
  • 루트 암호는 각 서버에 구성됩니다.\n

두 노드 모두에 Docker 설치

먼저 두 노드 모두에 Docker를 설치해야 합니다. 기본적으로 최신 버전의 Docker는 CentOS 8 기본 리포지토리에 포함되어 있지 않습니다. 따라서 시스템에 Docker 저장소를 추가해야 합니다.

다음 명령으로 추가할 수 있습니다.

dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo

Docker 저장소가 생성되면 다음 명령을 사용하여 Docker를 설치합니다.

dnf install docker-ce --nobest

Docker를 설치한 후 Docker 서비스를 시작하고 다음 명령을 사용하여 시스템 재부팅 시 시작되도록 활성화합니다.

systemctl start docker
systemctl enable docker

다음 명령을 사용하여 Docker의 상태를 확인할 수도 있습니다.

systemctl status docker

다음과 같은 결과가 표시되어야 합니다.

? 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"

이제 다음 명령을 사용하여 설치된 Docker 버전을 확인합니다.

docker --version

다음 출력이 표시되어야 합니다.

Docker version 20.10.5, build 55c4c88

방화벽 구성

다음으로 두 노드의 방화벽을 통해 포트 2376, 2377, 7946 및 80을 허용해야 합니다. 다음 명령으로 허용할 수 있습니다.

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

다음으로 방화벽을 다시 로드하여 변경 사항을 적용합니다.

firewall-cmd --reload

Docker Swarm 클러스터 초기화

다음으로 관리자 노드에서 Docker Swarm 클러스터를 초기화해야 합니다. 다음 명령으로 수행할 수 있습니다.

docker swarm init --advertise-addr 45.58.32.185

다음과 같은 결과가 표시되어야 합니다.

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.

Docker 작업자 노드에서 위 출력에 표시된 명령을 사용하여 노드를 클러스터에 조인할 수 있습니다.

다음 명령을 사용하여 Docker Swarm 클러스터의 정보를 확인할 수 있습니다.

docker info

다음과 같은 결과가 표시되어야 합니다.

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

이제 다음 명령을 사용하여 Docker Swarm 노드를 확인할 수 있습니다.

docker node ls

다음과 같은 결과가 표시되어야 합니다.

ID                            HOSTNAME     STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
cq8xpscsls2ctqhdha8lhdrph *   masternode   Ready     Active         Leader           20.10.5

Docker Swarm 클러스터에 작업자 노드 추가

다음으로 작업자 노드를 Docker Swarm 관리자 노드에 추가해야 합니다. 작업자 노드에서 다음 명령을 사용하여 이를 수행할 수 있습니다.

docker swarm join --token SWMTKN-1-24ciicg1knfh8htmvymnfw1igx64tcq6ah91n6amk18m2ek9qo-8sf9oysu08t5mf4ggd4ut7o3e 45.58.32.185:2377

다음과 같은 결과가 표시되어야 합니다.

This node joined a swarm as a worker.

Docker Manager 노드에서 다음 명령을 사용하여 작업자 노드를 확인합니다.

docker node ls

작업자 노드가 Docker Swarm에 추가되었는지 확인해야 합니다.

cq8xpscsls2ctqhdha8lhdrph *   masternode   Ready     Active         Leader           20.10.5
bipfv8sfm94a9po0uame5rd1n     workernode   Ready     Active                          20.10.5

Docker Swarm에서 서비스 시작

여기에서는 새로운 Nginx 웹 서비스를 만들고 두 개의 컨테이너로 확장합니다. Manager 노드에서 다음 명령을 실행하여 생성할 수 있습니다.

docker service create -p 80:80 --name webservice --replicas 2 nginx

다음과 같은 결과가 표시되어야 합니다.

agyxlaswxakrbboakkyydsh0k
overall progress: 2 out of 2 tasks 
1/2: running   [==================================================>] 
2/2: running   [==================================================>] 
verify: Service converged 

이제 다음 명령을 사용하여 웹 서비스를 확인할 수 있습니다.

docker service ls

다음 출력이 표시되어야 합니다.

ID             NAME         MODE         REPLICAS   IMAGE          PORTS
agyxlaswxakr   webservice   replicated   2/2        nginx:latest   *:80->80/tcp

다음 명령을 사용하여 실행 중인 컨테이너를 확인할 수도 있습니다.

docker ps

다음 출력이 표시되어야 합니다.

CONTAINER ID   IMAGE          COMMAND                  CREATED          STATUS          PORTS     NAMES
c887cad1df2e   nginx:latest   "/docker-entrypoint.…"   32 seconds ago   Up 30 seconds   80/tcp    webservice.2.jelyj9gmeb7ikl2scg7mz8yg8

웹 서비스의 세부 정보를 얻으려면 다음 명령을 실행하십시오.

docker service ps webservice

다음 출력이 표시되어야 합니다.

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   

Docker Swarm 확인

이 시점에서 우리는 관리 노드를 포함한 클러스터 노드 전체에 Nginx 컨테이너를 배포했습니다. 이제 작업자 노드 또는 관리자 노드 IP 주소를 사용하여 Nginx 웹 서버에 액세스할 수 있습니다.

결론

위 가이드에서는 CentOS 8에서 Docker Swarm 클러스터를 설정하는 방법을 배웠습니다. 이제 Docker Swarm 클러스터에 작업자 노드를 원하는 수만큼 추가하고 애플리케이션을 확장할 수 있습니다.