Dockerクラスターとは何ですか?
Swarmは、ユーザーがクラスター内でそれらを管理できるように、1つ以上のDocker [ノード]を編成します。
- これらのノードは、物理サーバー、仮想マシン、Raspberry Pi、またはクラウドインスタンスです。
- ノードはマネージャーまたはワーカーとして構成されます。
- 管理ノードは、クラスターコントロールプレーン(コントロールプレーン)を担当し、クラスターステータスの監視や作業ノードへのタスクの分散などの操作を実行します。
- 作業ノードは、管理ノードからタスクを受け取り、それを実行します。
【クラスター構築時の注意事項】
- セキュリティ:すべてのノードは信頼できるネットワークを介して接続する必要があります。TLS(Secure Transport Layer Protocol)は、Swarmによって緊密に統合されているため、Swarmクラスターを構築するときに必然的に使用されます。今日のセキュリティ意識の日では、そのようなツールは積極的な宣伝に値します。Swarmは、通信の暗号化、ノード認証、および役割の承認にTLSを使用します。自動キーローテーションはケーキのアイシングです!バックグラウンドでサイレントに動作し、ユーザーはこの機能の存在さえ認識しません。
Dockerクラスターを使用する理由
Dockerは、単一のマシン(単一ノード)リンクの下に、nginxとnetcoreの2つのコンテナーをデプロイします。Dockerホストがダウンすると、そのコンテナーサービスも利用できなくなります。クライアントの観点からは、クライアントがアクセスする数は不確実であり、いつでも増加する可能性があります。シングルノードのDockerホストと比較すると、サービスの負荷容量も制限されているため、高い同時実行シナリオに対応できず、最終的にはコンテナサービスが利用できなくなります。次の2つのポイントとして:
- シングルノードのDockerホストは、高可用性のサービスを提供できません。
- 単一ノードのDockerホストは、高い同時サービスアクセスを満たすことができません。
上記の問題を考慮すると、シングルノードのDockerホストをクラスター化する必要があります。クラスターの表示は次のとおりです。
Dockerクラスターによって解決される問題(サービスの高可用性を提供する):
- 並行性の量を増やします。
- 単一障害点の問題を解決します。
[swarmがdockerクラスターを管理する方法]
上記のリンクでは、docker swarmは、役割(manager-worker)構成を介してdocker hostクラスターを実装し、同じ管理ノード(manager)を複数のノードでクラスター化することもできます。
- マネージャー:
- クラスター構成;
- コンテナサービス管理;
- 負荷分散;
- その他のクラスター構成。
- ワーカー:
- コンテナサービスを提供する
redisのマスター(mastere)とスレーブ(slaver)の構成に似ています。
DockerSwarmクラスターツール
- Swarmは、Dcokerによって公式に提供されているクラスター管理ツールです。その主な機能は、複数のDockerホストを全体に抽象化し、これらのDockerホスト上のさまざまなDockerリソースを単一のエントリで管理することです。
- SwarmはKubernetesに似ていますが、kubernetesよりも軽量で、機能が少なくなっています。
- Docker Swarmには、次の2つの側面があります。1。エンタープライズレベルのDockerセキュアクラスターと2.マイクロサービスアプリケーションオーケストレーションエンジン。
- Swarmの構成およびステータス情報は、すべての管理ノードにある分散型etcdデータベースのセットに保存されます。データベースはメモリ内で実行され、データの最新の状態を保持します。このデータベースの最も優れている点は、構成がほとんど不要で、Swarmの一部としてインストールされ、管理が不要なことです。
- Swarmは、暗号化された分散クラスターストア(暗号化された分散クラスターストア)、暗号化されたネットワーク(暗号化されたネットワーク)、パブリックTLS(相互TLS)、セキュアクラスターアクセストークンセキュアクラスター参加トークン)、および一連の簡略化されたデジタル証明書管理にデフォルトで組み込まれていますPKI(公開鍵インフラストラクチャ)。ノードは自由に追加または削除できます。
- Swarmは、複雑なマイクロサービスアプリケーションのデプロイと管理を容易にするための豊富なAPIセットを提供します。宣言型構成ファイルでアプリケーションを定義することにより、ネイティブのDockerコマンドを使用してデプロイメントを完了することができます。ローリングアップグレード、ロールバック、およびスケーリング操作を実行することもできます。
アプリケーションオーケストレーションに関して、Swarmの最小のスケジューリングユニットはサービスです。これはSwarmで導入され、APIの新しいオブジェクト要素です。コンテナに基づいていくつかの高度な機能をカプセル化し、より高いレベルの概念です。コンテナーがサービスにカプセル化されている場合、それをタスクまたはコピーと呼びます。スケーリング、ローリングアップグレード、単純なロールバックなどの機能がサービスに追加されます。
Dockerクラスターを構築する方法は?
サービス、タスク、およびスタックを介してコンテナーを構成します。
- service = "docker異なるホスト(作業ノード)上のコンテナーのコレクション。
- task = "サービスがクラスター環境コンテナーを開始するため;
- stack = "複数のサービスのコレクション。
Dockerクラスターの準備:
- Dockerを2つのクラウドホストまたはVMにインストールします。
- docker-swarm;
備考:操作する場所は管理ノードであり、すべての操作は管理ノードで処理するだけでよく、作業ノードは心配する必要はありません。
上記では、Dockerクラスターの原理を簡単に紹介した後、[docker-swarm]クラスター構築プロセスの操作を練習します。
【群れクラスター構築過程】
- クラスターワーカーノードを初期化します= "docker swarm init --advertise-addr [localhost]デフォルトは管理ノードです。
- ノードがすでに存在する場合は、ノードを削除します=》 docker swarm Leave -f
- 別のDockerホストがクラスターノード(作業ノード)に参加します
- 詳細なノードリスト情報を表示= "docker --info
[クラスター環境でサービス(コンテナー)コレクションを構成する方法]
- ミラーウェアハウスは、nginxやnetcoreなどの必要なデプロイメントミラーを準備します
- Create service = "docker service create --replicas 1 --name netcoreserviceパラメーター--replicasはクラスターの数を指定し、-nameはサービスの名前です。
- Dockerホストノードが実行されている[rmcoreservice]を確認してください= "docker service ps rmcoreservice
-
コンテナリスト情報の表示=》 docker container ls -a
- rmcoreserviceservice =》を削除します。dockerservicermrmcoreservice
備考:すべてのサービス操作は管理ノードで実行され、管理ノードはサービスクラスターのワーカーノードを削除します。証明:ワーカーワーカーノードでサービスリストを表示する=》 docker serice lsワーカーノードには操作する権限がありません、表示は次のとおりです。
- ミラーrmcoreからサービスを作成し、2つの作業ノードを指定して、サービスポートを公開します(マッピング)= "docker service create --replicas 2 --name rmcoreservice --publish 6066:80 rmcore
[スタックはクラスター内に2つのサービスを作成します]
[デプロイオプションのパラメーター構成の詳細な説明]
endpoint_mode:访问集群服务的方式。
endpoint_mode: vip
# Docker 集群服务一个对外的虚拟 ip。所有的请求都会通过这个虚拟 ip 到达集群服务内部的机器。
endpoint_mode: dnsrr
# DNS 轮询(DNSRR)。所有的请求会自动轮询获取到集群 ip 列表中的一个 ip 地址。
labels:在服务上设置标签。可以用容器上的 labels(跟 deploy 同级的配置) 覆盖 deploy 下的 labels。
mode:指定服务提供的模式。
replicated:复制服务,复制指定服务到集群的机器上。
global:全局服务,服务将部署至集群的每个节点。
replicas:mode 为 replicated 时,需要使用此参数配置具体运行的节点数量。
resources:配置服务器资源使用的限制,例如上例子,配置 redis 集群运行需要的 cpu 的百分比 和 内存的占用。避免占用资源过高出现异常。
restart_policy:配置如何在退出容器时重新启动容器。
condition:可选 none,on-failure 或者 any(默认值:any)。
delay:设置多久之后重启(默认值:0)。
max_attempts:尝试重新启动容器的次数,超出次数,则不再尝试(默认值:一直重试)。
window:设置容器重启超时时间(默认值:0)。
rollback_config:配置在更新失败的情况下应如何回滚服务。
parallelism:一次要回滚的容器数。如果设置为0,则所有容器将同时回滚。
delay:每个容器组回滚之间等待的时间(默认为0s)。
failure_action:如果回滚失败,该怎么办。其中一个 continue 或者 pause(默认pause)。
monitor:每个容器更新后,持续观察是否失败了的时间 (ns|us|ms|s|m|h)(默认为0s)。
max_failure_ratio:在回滚期间可以容忍的故障率(默认为0)。
order:回滚期间的操作顺序。其中一个 stop-first(串行回滚),或者 start-first(并行回滚)(默认 stop-first )。
update_config:配置应如何更新服务,对于配置滚动更新很有用。
parallelism:一次更新的容器数。
delay:在更新一组容器之间等待的时间。
failure_action:如果更新失败,该怎么办。其中一个 continue,rollback 或者pause (默认:pause)。
monitor:每个容器更新后,持续观察是否失败了的时间 (ns|us|ms|s|m|h)(默认为0s)。
max_failure_ratio:在更新过程中可以容忍的故障率。
order:回滚期间的操作顺序。其中一个 stop-first(串行回滚),或者 start-first(并行回滚)(默认stop-first)
- 管理ノードはスタックディレクトリを作成します=》 mkdirスタック
- 現在のディレクトリリストを表示し、作成に切り替えます
- docker-compose.ymlファイルが管理ノードに存在しない場合は、ファイルを作成します=> vi docker-compose.ymlファイルを作成し、編集を入力します
- 管理ノードのスタックディレクトリに作成されたdocker-compose.ymlファイルの設定および編集情報は次のとおりです。
- スタックコマンド=》 docker stack --help
- docker-compose.ymlのデプロイ構成情報を使用して、スタック管理コマンドで開始します=》 docker stack deploy -c docker-compose.yml rmstack rmstackによって作成されたスタックは、rmstackとして識別されます。
- stack =》 docker stacklsによって作成されたディレクトリ情報のリストを表示します
- スタックに作成されたサービスを表示= "docker service ls rmstack_nginx、rmstack_rmcoreによって作成されたサービス
- コンテナリストディレクトリをもう一度確認してください=》 docker container ls
上記のプロセスにより、スタックのクラスター構成が完了します。
- スタック構成の削除=》 docker stack rm rmstack
注:管理ノードがクラスターを作成および削除すると、ワーカーノードも削除されます。
[Docker-swarmコマンドコレクション]
- スウォームツール管理コマンドの表示= "docker swarm --help
命令 | 説明 |
それ | CA証明書を表示する |
初期化 | スウォームクラスターを初期化し、管理ノードを作成します |
参加する | 他のDockerノードをクラスターに追加し、作業ノードを作成し、管理ノードによって管理されます |
参加トークン | 他のDockerノードをクラスターに追加し、作業ノードを作成して、管理ノードによって管理されます[これは管理ノードトークンです] |
去る | クラスターを離れる |
ロックを解除する | クラスターを開く |
ロック解除キー | ロック解除キーキーを管理する |
更新 | グループクラスターを更新する |
【群れ欠陥】
- 特定のDockerノード(ホスト)を監視できません=》ソリューションk8s
- Dockerホストのインストールには時間がかかります。OS環境をインストールするたびに、それに応じてDockerホストを構成する必要があります。たとえば、10個のLinuxシステム、10個のDockerホストをインストールする必要があります= "docker-machine(key)、refer宛先:https://www。cnblogs.com/sparkdev/p/7066789.html
- クラスタコンテナはどのようにデータの永続性を実行しますか?= "ボリュームデータボリューム(キー)
- サービスのワークノードコンテナがダウンしている場合、それを監視および検知することはできません。
上記の[群れの欠陥]の解決策= "[k8s / Kubermetes]