Docker Swarmについて Docker Swarm は次の 2 つの部分で構成されます。
公式情報: https://docs.docker.com/swarm/ ネットワーク図 次の図は、Docker 公式 Web サイトの典型的な Docker Swarm クラスターの展開図です。 次に、上の図に従って Docker Swarm クラスターを構築します。 準備 今回の実戦では合計 5 台のマシンが使用され、構成情報はすべて次のとおりです。
マシン情報は次の表に示されています。
なぜ管理ノードが 3 つあるのですか? 公式図からわかるように、管理ノード クラスター間の内部管理調整には Raft コンセンサス アルゴリズムが使用され、管理ノードの高可用性 (HA) が確保されます。一般的に、次の 2 つの原則が参照されます。
クラスターの展開手順の概要 展開プロセス全体は次のステップに分かれています。
それでは正式に始めましょう。 最初の管理ノード(m0)を初期化する m0 ノードの IP アドレスは 192.168.121.142 なので、m0 ノードで次のコマンドを実行します。 docker スウォーム初期化\ --アドバタイズアドレス 192.168.121.142:2377 --listen-addr 192.168.121.142:2377 2 つのパラメータ、advertise-addr と listen-addr については、前者は m0 に接続するときに他のノードのアドレスを指定するために使用され、後者は swarm トラフィックを伝送する IP とポートを指定します。より詳細で徹底した違いについては、次の記事を参照してください: https://boxboat.com/2016/08/17/whats-docker-swarm-advertise-addr/ 2. コンソールに次の情報が表示され、Swarm クラスターが正常に初期化されたことが示されます。 Swarm が初期化されました: 現在のノード (7585zt09o2sat82maef0ocf42) がマネージャーになりました。 この Swarm にワーカーを追加するには、次のコマンドを実行します。 docker swarm 参加 \ --トークン SWMTKN-1-5huefb5501cv7p8i2op1am2oevasoqu4te8vpvapndkudvszb4-e8l6755jstd7urpdo5smyi8fv \ 192.168.121.142:2377 この Swarm にマネージャーを追加するには、「docker swarm join-token manager」を実行し、指示に従います。 現在の Swarm クラスター内のすべてのノードを一覧表示すると、唯一のノード m0 のステータスと ID を確認できます。 [root@m0 ~]# docker ノード ls ID ホスト名 ステータス 可用性 マネージャ ステータス 7585zt09o2sat82maef0ocf42 * m0 準備完了アクティブリーダー クラスターが確立されたので、管理ノードとワーカーノードを追加する必要があります。 新しいノードを追加するにはどうすればいいですか? 新しいノードが Docker Swarm に参加するための戦略は、管理ノードから参加トークンと呼ばれる長いコマンド文字列を取得することです。クラスターに参加したいマシンは、この参加トークン自体を実行することで Swarm クラスターに参加できます。 新しい管理ノードを追加する必要がある場合は、以下に示すように、m0 でコマンド [root@m0 ~]# docker swarm join-token マネージャー この Swarm にマネージャーを追加するには、次のコマンドを実行します。 docker swarm 参加 \ --トークン SWMTKN-1-5huefb5501cv7p8i2op1am2oevasoqu4te8vpvapndkudvszb4-5tz9d4w7nwzu8r4ozd0ff2aiu \ 192.168.121.142:2377 新しいワーカー ノードを追加する必要がある場合は、次に示すように、コマンド docker swarm join-token worker in m0 を実行して、ワーカー ノードの参加トークンを取得します。 [root@m0 ~]# docker swarm join-token ワーカー この Swarm にワーカーを追加するには、次のコマンドを実行します。 docker swarm 参加 \ --トークン SWMTKN-1-5huefb5501cv7p8i2op1am2oevasoqu4te8vpvapndkudvszb4-e8l6755jstd7urpdo5smyi8fv \ 192.168.121.142:2377 両方の参加トークンの準備が整い、新しいノードの追加を開始します。 管理ノードm1とm2を追加する 先ほど取得した管理ノード参加トークンを m1 で実行します。 [root@m1 ~]# docker swarm に参加 \ > --token SWMTKN-1-5huefb5501cv7p8i2op1am2oevasoqu4te8vpvapndkudvszb4-5tz9d4w7nwzu8r4ozd0ff2aiu \ > 192.168.121.142:2377 このノードはマネージャーとして群れに参加しました。 m2 でも同じことを行います。 m0、m1、m2 のいずれかでコマンド docker node ls を実行し、Swarm クラスターの現在のステータスを表示します。次の図に示すように、3 つの管理ノードはすべて正常なステータスです。ID フィールドにはアスタリスク サフィックスが付いており、現在コマンドを実行しているマシンが m1 であることを示しています。 [root@m1 ~]# docker ノード ls ID ホスト名 ステータス 可用性 マネージャ ステータス 0isfyre69mdu1hm11esf1q3dk m2 準備完了 アクティブ 到達可能 7585zt09o2sat82maef0ocf42 m0 準備万端のアクティブリーダー slc0hjbs7jh2hdi8ai3wohy23 * m1 準備完了 アクティブ 到達可能 作業ノードw0とw1を結合する 先ほど取得した作業ノードの参加トークンを w0 で実行します。 [root@w0 ~]# docker swarm に参加\ > --token SWMTKN-1-5huefb5501cv7p8i2op1am2oevasoqu4te8vpvapndkudvszb4-e8l6755jstd7urpdo5smyi8fv \ > 192.168.121.142:2377 このノードはワーカーとして群れに参加しました。 w1に対しても同じ操作を実行します。 m0、m1、m2 のいずれかで docker node ls コマンドを実行して、Swarm クラスターの現在のステータスを表示します。すべての動作ノードが準備ができていることがわかります。 [root@m0 ~]# docker ノード ls ID ホスト名 ステータス 可用性 マネージャ ステータス 0isfyre69mdu1hm11esf1q3dk m2 準備完了 アクティブ 到達可能 7585zt09o2sat82maef0ocf42 * m0 準備完了アクティブリーダー i71bcxt1auc804syybroajtan w1 準備完了 アクティブ slc0hjbs7jh2hdi8ai3wohy23 m1 準備完了 アクティブ 到達可能 wqcwcccva3d3mxgi5p423d4fv w0 準備完了 アクティブ この時点で、Swarm クラスター環境が構築され、次に検証できるようになります。 Swarmクラスタ環境を確認する tomcat-net という名前のオーバーレイ ネットワークを作成します。これはレイヤー 2 ネットワークです。このネットワークの下にある Docker コンテナは、ホスト マシンが異なっていても相互にアクセスできます。 docker ネットワーク作成 -d オーバーレイ tomcat-net 作成したオーバーレイ ネットワークを使用して、tomcat というサービスを作成します。 docker サービス作成 --name tomcat \ --network tomcat-net \ -p 8080:8080 \ --レプリカ 3 \ トムキャット:7.0.96-jdk8-openjdk 現在のすべてのサービスを表示するには、docker service ls コマンドを実行します。 [root@m0 ~]# docker サービス ls ID 名前 モード レプリカ 画像 kguawc4b5th4 tomcat は 3/3 に複製されました tomcat:7.0.96-jdk8-openjdk コマンド docker service ps tomcat を実行して、tomcat という名前のサービスを表示します。3 つのコンテナがそれぞれ m0、m2、w1 マシンにデプロイされていることがわかります。 [root@m0 ~]# docker サービス ps tomcat ID 名前 イメージ ノード 望ましい状態 現在の状態 エラー ポート n1gs9f1plce2 tomcat.1 tomcat:7.0.96-jdk8-openjdk w1 実行中 実行中 19 分前 q8jyg088ci21 tomcat.2 tomcat:7.0.96-jdk8-openjdk m2 実行中 実行中 19 分前 h9ww33dpw56m tomcat.3 tomcat:7.0.96-jdk8-openjdk m0 実行中 実行中 19 分前 tomcat という名前のサービスに関する詳細情報を表示するには、コマンド docker service inspect --pretty tomcat を実行します (より完全なビューを表示するには、--pretty を削除します)。 [root@m0 ~]# docker service inspect --pretty tomcat ID: kguawc4b5th4qlwlsv183qtai 名前: トムキャット サービスモード: 複製 レプリカ: 3 配置: 更新構成: 並列処理: 1 失敗した場合: 一時停止 最大故障率: 0 コンテナ仕様: イメージ: tomcat:7.0.96-jdk8-openjdk@sha256:91eadffb59d9a35ada2d39fcd616a749ac580aa5e834499b7128f27be2e46623 リソース: ネットワーク: tomcat-net エンドポイントモード: vip ポート: 公開ポート 8080 プロトコル = tcp ターゲットポート = 8080 ブラウザを開き、5 台のマシン m0、m1、m2、w0、w1 のポート 8080 にアクセスしてみます。Tomcat ホームページに正常にアクセスできます。 サービスモデル
docker サービス作成 --name tomcat \ --network tomcat-net \ --publish 公開済み=8080、ターゲット=8080、モード=ホスト \ --レプリカ 3 \ トムキャット:7.0.96-jdk8-openjdk サービスのスケーリング コマンド docker service scale tomcat=5 を実行して、レプリカの数を 3 から 5 に調整します。 [root@m0 ~]# docker サービススケール tomcat=5 tomcat 5にスケールアップ コマンド docker service ps tomcat を実行して、tomcat という名前のサービスを表示します。各マシンにコンテナが分散されていることがわかります。 [root@m0 ~]# docker サービス ps tomcat ID 名前 イメージ ノード 望ましい状態 現在の状態 エラー ポート w32tjahze2fk tomcat.1 tomcat:7.0.96-jdk8-openjdk m2 実行中 実行中 42 分前 yj5czwwhrrsh tomcat.2 tomcat:7.0.96-jdk8-openjdk m0 実行中 実行中 42 分前 pq40995nbd0k tomcat.3 tomcat:7.0.96-jdk8-openjdk w1 実行中 実行中 42 分前 y1y6z1jczel1 tomcat.4 tomcat:7.0.96-jdk8-openjdk m1 実行中 約 1 分前に実行中 w0dcii8f79os tomcat.5 tomcat:7.0.96-jdk8-openjdk w0 実行中 約1分前に実行中 ローリングアップグレード 現在の tomcat サービスでは、tomcat イメージのタグは docker サービスの更新 \ --image tomcat:9.0.24-jdk11-openjdk \ --update-parallelism 1 \ --update-delay 10s tomcat 上記のコマンドに関して注意すべき点がいくつかあります。 2. アップグレード プロセス中に、コマンド [root@m0 ~]# docker サービス ps tomcat ID 名前 イメージ ノード 望ましい状態 現在の状態 エラー ポート w32tjahze2fk tomcat.1 tomcat:7.0.96-jdk8-openjdk m2 実行中 実行中 56 分前 yj5czwwhrrsh tomcat.2 tomcat:7.0.96-jdk8-openjdk m0 実行中 実行中 56 分前 semuna9awsn7 tomcat.3 tomcat:9.0.24-jdk11-openjdk w1 実行中 15 秒前 pq40995nbd0k \_ tomcat.3 tomcat:7.0.96-jdk8-openjdk w1 シャットダウン シャットダウン 約 1 分前 y1y6z1jczel1 tomcat.4 tomcat:7.0.96-jdk8-openjdk m1 実行中 実行中 15 分前 oot3yex74v4t tomcat.5 tomcat:9.0.24-jdk11-openjdk w0 実行中 準備中 5 秒前 w0dcii8f79os \_ tomcat.5 tomcat:7.0.96-jdk8-openjdk w0 シャットダウン シャットダウン 3秒前 アップグレードが完了したら、ブラウザを使用してサービスにアクセスすると、Tomcat のバージョンがアップグレードされたことがわかります。 サービスの削除 サービスを削除するには、コマンド docker service rm tomcat を実行します。 [root@m0 ~]# docker サービス rm tomcat トムキャット [root@m0 ~]# docker サービス ls ID 名前 モード レプリカ 画像 ここまで、Docker Swarmのデプロイから基本的な操作までを体験してきました。この記事が環境構築の際の参考になれば幸いです。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: PDO を使用して SQL インジェクションを防ぐ原理の分析
この記事では、HTML描画ユーザー登録ページの具体的な実装コードを参考までに共有します。具体的な内容...
序文特に bash 環境では、スクリプトの実行方法によって結果が異なります。スクリプトを実行する方法...
Raspberry Pi は ARM アーキテクチャをベースとしているため、Docker のインスト...
目次1. 問題の説明2. 問題解決1. 問題の説明Vue プロジェクトを開発する場合、作成時に誤って...
目次1. インストールの準備1. Linux関連情報の表示(Linuxコマンドライン操作) 2. M...
この記事の例では、Vue がデジタル 3 桁区切り形式をグローバルに実装するための具体的なコードを参...
序文クエリ情報が複数のテーブルから取得される場合、クエリのためにこれらのテーブルを結合する必要があり...
問題記録今日はプログレスバーに似た小さなコンポーネントを完成させるつもりでした。プロトタイプは次のよ...
目次1 SSHとは何か2 SSHパスワードフリーログインを設定する2.1 必要なソフトウェアのインス...
mysqldump コマンドはじめに: データベースバックアッププログラム形式: mysqldum...
最近、NestJs フレームワークを学び始めました。学習コストは他のフレームワークよりもはるかに高く...
今日は、すべてのブラウザ (主に IE 9 以上と Chrome) と互換性のある自分のホームページ...
Web 開発では、チェックボックスは小さく、ユーザーにとって操作があまり便利ではないため、ユーザーが...
目次マルチ環境構成とは何ですか? また、なぜそれが必要なのですか? .env ファイルはどこで設定さ...
1.ダウンロードして解凍する1. Zookeeperの紹介分散サービス フレームワークとして、Zoo...