GNU/Linux >> Linux の 問題 >  >> Cent OS

CentOS8にDockerSwarmクラスターをインストールして構成する方法

Dockerは、コンテナーを使用してアプリケーションを作成、デプロイ、実行するために使用できるオープンソースツールです。コンテナを使用すると、必要なすべての依存関係を含むアプリケーションをパッケージ化し、単一のパッケージとして出荷できます。

Docker Swarmは、Dockerホストの管理に使用されるクラスタリングツールです。これにより、Dockerホストのグループを単一の論理仮想サーバーにすることができます。このようにして、アプリケーションを水平方向にスケーリングし、コンテナーインスタンスの数を増やすことができます。 Docker swarmは、コンテナーの自己修復、負荷分散、コンテナーのスケールアップとスケールダウン、サービスディスカバリ、ローリング更新などの非常に便利な機能を提供します。

この投稿では、CentOS8でDockerSwarmクラスターをセットアップする方法を紹介します。

前提条件
  • CentOS8を実行している2台のサーバー。
  • ルートパスワードは各サーバーで構成されます。
両方のノードにDockerをインストールする

まず、両方のノードにDockerをインストールする必要があります。デフォルトでは、最新バージョンのDockerはCentOS8のデフォルトリポジトリに含まれていません。そのため、システムに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

次に、firewalldをリロードして変更を適用します:

firewall-cmd --reload

DockerSwarmクラスターを初期化します

次に、マネージャーノードでDockerSwarmクラスターを初期化する必要があります。次のコマンドで実行できます:

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ワーカーノードで上記の出力に示されているコマンドを使用して、ノードをクラスターに参加させることができます。

次のコマンドを使用して、DockerSwarmクラスターの情報を確認できます。

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

これで、次のコマンドを使用してDockerSwarmノードを確認できます。

docker node ls

次の出力が得られるはずです:

ID                            HOSTNAME     STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
cq8xpscsls2ctqhdha8lhdrph *   masternode   Ready     Active         Leader           20.10.5
ワーカーノードをDockerSwarmクラスターに追加

次に、ワーカーノードをDockerSwarmマネージャーノードに追加する必要があります。ワーカーノードで次のコマンドを使用して実行できます。

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

ワーカーノードがDockerSwarmに追加されていることを確認する必要があります:

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

DockerSwarmでサービスを起動します

ここでは、新しいNginx Webサービスを作成し、2つのコンテナーでスケーリングします。 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 

これで、次のコマンドを使用してWebサービスを確認できます。

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

Webサービスの詳細情報を取得するには、次のコマンドを実行します。

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   

DockerSwarmを確認する

この時点で、管理ノードを含むクラスターノード全体にNginxコンテナーをデプロイしました。これで、ワーカーノードまたはマネージャーノードのIPアドレスのいずれかを使用してNginxウェブサーバーにアクセスできます。

結論

上記のガイドでは、CentOS8でDockerSwarmクラスターをセットアップする方法を学習しました。これで、Docker Swarmクラスターに任意の数のワーカーノードを追加して、アプリケーションをスケーリングできます。


Cent OS
  1. CentOS7にNginxをインストールして構成する方法

  2. CentOS7にRedisをインストールして設定する方法

  3. Rocky Linux /Centos8でdockerをインストールして構成する方法

  1. CentOS7にGitLabをインストールして構成する方法

  2. CentOS7にRedmineをインストールして設定する方法

  3. CentOS8にRedisをインストールして設定する方法

  1. CentOS 7 /RHEL7にDockerSwarmモードをインストールして構成する方法

  2. CentOS8にSambaをインストールして設定する方法

  3. CentOS7にGitLabCEをインストールして構成する方法