Docker Swarm:クラスタ管理

5985 ワード

前言
以前docker machineをまとめたとき、dockerに対する理解はまだ深くなく、docker machineとdocker swarmの違いさえ知らなかった.
資料や公式文書を調べた後、今日はほぼ徹底的に分かりました.実はdocker machineはdockerマルチノードの管理ツールにすぎず、他のノードにdockerをインストールしたり、dockerコンテナを実行したりするのに役立ちます.一方、docker swarmはdockerクラスタ管理ツールであり、クラスタ全体が協働して動作し、コンテナの観点からはopenstackのような感じで、クラスタ全体を直接管理することができ、分散の観点からはhadoopに似ているが、もちろん分布式のこの観点から考えるだけだ.
本稿では、docker swarmでのホスト間通信と、最も強力なdocker swarmクラスタ管理機能について簡単に説明します.
一、docker swarmインストール
1.1 docker machine作成ノード
ここでもdocker machineとdocker swarmの違いを体現することができ、簡単に言えばdocker machineはdocker swarmのためにサービスされている.
まずdocker-machineを使用して3つのdockerノードを作成します.
docker-machine create -d generic --generic-ip-address  

docker-machineプライマリノードでは、ipが作成するホストのipアドレスであり、nameが作成するホストに名前を変更するhost名である上記の操作を3回実行します.ここでは、swarm-manager、swarm-node 1、swarm-node 2と仮定し、swarm-managerをmanagerノードとして選択することは明らかである(以下詳細に説明する).
1.2 swarmクラスタの作成
docker swarmはmanagerノードとworkerノードに分かれており、managerノードはプライマリノードに相当し、すべてのworkerノードを管理できることは明らかです.
managerノードの作成
上記で作成した3つのdockerノードのうち1つをmanagerノードとして選択し(swarm-managerノードが上記で選択されている)、docker-machineノードで次の操作を行います.
docker-machine ssh swarm-manager "docker swarm init"

上記の操作を実行すると、作成に成功したことを示し、managerノードがサブノードを識別する識別子であるtokenなどの情報を含むworkerノードを作成するコマンドが表示されます.
workerノードの作成
同様にdocker-machineでは、次の操作を行います.
docker-machine ssh swarm-node1 "docker swarm join --token  :2377"

docker-machine ssh swarm-node2 "docker swarm join --token  :2377"

ここで、上記token、ipはmanagerノードipアドレスであり、これらは成功したmanagerノードが作成された後に与えられる.
すべてのクラスタ内のすべてのノードを表示するには、managerノードで次のコマンドを実行します.
docker node ls

このコマンドは、クラスタ内のすべてのノードをリストし、各ノードの役割を示します.もちろんここではdocker-machineでsshで実行することもできます.以下同じです.
二、docker swarmホスト間通信
swarmのホスト間通信にはoverlayネットワークも必要です(または、他のいくつかのオプションがありますが、まだテストされていません).しかし、前述とは異なり、swarmはconsulサービスを必要とせず、実際にはswarmがconsulの機能を提供し、ホスト間通信の操作を簡素化することに相当する.
managerノードで次のコマンドを実行してoverlayネットワークを作成します.
docker network create -d overlay --attachable my_net

ここでは--attachableパラメータを追加する必要があります.そうしないと、コンテナには使用できません.
プライマリノード上にoverlayネットワークを作成する後、workerノードはconsulの方式を採用するように自動的にネットワークを認識することはできないが、--network my_netの方式でコンテナを作成する際にこのネットワークを使用することができ、workerノードが上述のようにコンデンサを実行してこのネットワークを使用した後、docker network lsを使用して、このworkerノードでネットワークを表示できます.
これにより、ネットワークを使用するすべてのノードが通信できるようになります.同様にbrctl showコマンドを使用すると、ノードがdocker_を生成していることがわかります.gwbridgeブリッジは、以前の解析と同様にoverlayネットワークの動作原理である対応するvethxxxをマウントしている.
三、docker swarmクラスタ管理——応用を配置する
これはdocker swarmの強みであり、負荷バランス、プライマリ・スペア、災害対応などの機能を直接実現することができます.アプリケーションを自動的に作成し、一連のサービスを含むアプリケーションを適用することができます.各サービスは簡単に言えば、ミラーがいくつかのコンテナを作成し、これらのコンテナが集合して特定の機能を実現し、ユーザーがこれらのコンテナがどのノードで実行されるかを指定する必要がなく、swarmが自動的に割り当てられ、異なるノードでジャンプすることもあります.ワークノードが削除されると、その上で実行されているすべてのコンテナも自動的に他のノードに移行します.
多くのメリットを説明しましたが、サービスを公開する方法について詳しく説明します.
3.1プロファイルの作成
まず、アプリケーションのすべての情報、必要なサービス、各サービスで使用されるミラー、作成されたコンテナ数、ポートマッピング、ストレージマッピング、ネットワークなどを含むプロファイルを作成します.基本的には、前述したコンテナ情報のセットです.
そのプロファイルはYAML形式で、YAMLはプロファイルを書くための言語で、非常に簡潔です.YAMLの基本ルールは次のとおりです.
  • 大文字と小文字が敏感です.
  • は、階層関係をインデントで表す.
  • 入力時にTabキーは使用できません.スペースのみ使用できます.
  • インデントされたスペースの数は重要ではありません.同じレベルの要素が左側に位置合わせされている限りです.
  • #はコメントを表し、この文字から行末まで解析器に無視されます.

  • YAML詳細ルールは参照できますhttp://www.ruanyifeng.com/blog/2016/07/yaml.html?f=tt
    swarmアプリケーションの基本テンプレートは次のとおりです.
    version: "3"
    services:
      web:
        # replace username/repo:tag with your name and image details
        image: username/repo:tag
        deploy:
          replicas: 5
          restart_policy:
            condition: on-failure
          resources:
            limits:
              cpus: "0.1"
              memory: 50M
        ports:
          - "80:80"
        networks:
          - webnet
      visualizer:
        image: dockersamples/visualizer:stable
        ports:
          - "8080:8080"
        volumes:
          - "/var/run/docker.sock:/var/run/docker.sock"
        deploy:
          placement:
            constraints: [node.role == manager]
        networks:
          - webnet
    networks:
      webnet:
        ipam:
          config:
            - subnet: 172.19.0.0/24
    

    ここでversion:「3」は、バージョンごとに構成ルールが異なり、サービス項目の下にwebとvisualizerの2つ(ここでは名前は任意で、自分が知っている限り)があり、アプリケーションには2つのサービスがあり、各サービスの下に使用されているミラーとポートマッピング、ストレージマッピング、ネットワークなどの情報があることを示します.重点的にdeploy項を見て、replicasは実行容器の実行個数を表して、restart_policyは再起動ポリシーを表し、resourcesの下にはコンテナの実行リソース、limitsは実行制限であり、cpu、メモリなどの制限を含み、cpus値が「0.1」はすべてのcpuの10パーセントを表し、constraints:[node.role==manager]はコンテナがmanagerノードにのみ配置されていることを示します.各サービスの下にあるnetworksは複数ありますが、トップレベルのnetworksに含める必要があります.トップレベルのnetworksには複数のネットワークも含まれます.各ネットワークは何も設定せずに上記のように設定できます.最終的にswarmはappname_を作成します.webnetのネットワークは、ここでwebnetの名前も任意に取ることができ、appnameは作成するサービスの名前で、以下で紹介します.
    上記のプロファイルをdocker-compose.ymlファイルに保存し、使用します.
    3.2アプリケーションの導入
    次のコマンドを実行してアプリケーションを配置します.
    docker stack deploy -c docker-compose.yml 
    

    appnameはアプリケーションの名前です.これにより、3つのサービスを含むアプリケーションの導入に成功しました.
    swarmクラスタの下のipアドレスの上記のポートにアクセスすると、swarmはstackの下のいずれかのcontainerにランダムに転送し、負荷の均衡、災害対応、プライマリ・スペアなどの機能を果たすことができます.
    3.3 docker stack共通コマンド
    docker stack ls
    配置されたすべてのアプリケーションを表示します.アプリケーション名と含まれるサービス数を表示できます.
    docker stack deploy
    docker stack deploy -c  
    

    上記の導入アプリケーションです.
    docker stack services
    docker stack services        
    

    アプリケーションのサービス詳細を表示します.
    docker stack ps
    docker stack ps 
    

    各コンテナの構成や、どのノードで実行されるかなど、アプリケーションの詳細を表示します.
    docker stack rm
    docker stack rm 
    

    アプリケーションを削除します.
    四、まとめ
    この文書では、docker swarmおよびそのインストール、導入アプリケーション、docker stackに関する操作について簡単に説明します.swarmの機能は非常に強く、基本的に小さなopenstackに等しく、その後も深く勉強し続けることがわかります.