========================= swarm 拡張機能 ========================= ここでは、hive のコンテナ収容サーバにインストールされる swarm 拡張機能について 説明します。swarm 拡張機能では、ノードでサービスのコンテナがデプロイされるのを観測することによって 以下の2つの機能を提供します。 - 仮想IP付与機能 - ラベル付与機能 仮想IP付与機能 =============================== 仮想IP付与機能では、サービスのコンテナがノードにデプロイされると、そのラベルにしたがって ノードに仮想IPを付与する機能を提供します。この機能を利用する場合にはサービスの 複製数は1に設定してください。これにより、複数のコンテナ収容サーバのうち当該 サービスのコンテナがデプロイされた1台だけに仮想IPを付与することができます。 また、障害が発生してコンテナが別のサーバに移動した場合に仮想IPも同じサーバに 移動するため、仮想IPのフェイルオーバが実現され、高可用性を確保することができます。 この機能を利用するたには、サービス定義の labels 属性に以下のラベルを設定する必要があります。 .. list-table:: :widths: 18 8 50 :header-rows: 1 * - ラベル名 - 値の例 - 説明 * - HIVE_VIP - 192.168.0.101 - 仮想IPアドレス * - HIVE_ROUTER - 192.168.0.1 - 仮想IPアドレスを付与するインタフェースのルータのアドレス(省略可能) 仮想IP付与機能では、 HIVE_VIP ラベルが付いたサービスのコンテナがノードに デプロイされると、そのサーバが持っているインタフェースを調べ、 指定された仮想IPアドレスが付与可能なのインタフェースを探します。 インタフェースが見つかった場合、そこに仮想IPアドレスを付与します。 仮想IPアドレスが付与可能かどうかはそのインタフェースが持っているIPアドレスの ネットワークアドレスに仮想IPが含まれるかどうかで判断します。 付与しようとする仮想IPアドレスを含むネットワークのIPアドレスが事前にサーバに付与されていなければ、 仮想IPアドレスを付与することはできませんので、注意してください。 仮想IP付与後に Gratuitous ARP を送信して、隣接するデバイスのARPテーブルを 更新します。 HIVE_ROUTERが指定されている場合は、ARPテーブルの更新を確認するために HIVE_ROUTERで指定されたアドレスにping を送ります。ping に失敗した場合は Gratuitous ARP を送信を再実行します。5回以上失敗すると処理を中止します。 ラベル付与機能 =============================== ラベル付与機能では、サービスのコンテナがノードにデプロイされると、そのラベルにしたがって ノードにラベルを付与する機能を提供します。この機能を利用することで特定のサービス (以降、リーダサービスと呼ぶ)に依存するサービス(以降、メンバサービスと呼ぶ)の グループを構成することができます。 リーダサービスの複製数は1に設定してください。これにより、複数のコンテナ収容サーバのうち当該 サービスのコンテナがデプロイされた1台のノードのみにラベルを付与することができます。 また、障害が発生してリーダサービスのコンテナが別のサーバに移動した場合にメンバサービスも 同じノードに移動するため、フェイルオーバが実現され、高可用性を確保することができます。 この機能を利用するたには、サービス定義の labels 属性に以下のラベルを設定する必要があります。 .. list-table:: :widths: 18 8 50 :header-rows: 1 * - ラベル名 - 値の例 - 説明 * - HIVE_MARK - zabbix - ノードに付与するラベル名でラベルの値は "true" になります(例えば、zabbix を指定すると zabbix=true というラベルが付与されます) リーダサービスのサービス定義で zabbix のラベル付与を行う場合、以下のように定義します。 :: labels: HIVE_MARK: zabbix メンバサービス側にはラベルが付与されているノードにだけデプロイされるように placement.constraints 属性を指定します。例えば、 zabbix のラベルが付与されている ノードにのみデプロイされるようにする場合は、以下のようにサービス定義に指定します。 :: placement: constraints: - node.labels.zabbix == true follow-swarm-service デーモン ============================= swarm 拡張機能はfollow-swarm-service デーモンにより実装されています。 コンテナ収容サーバで journalctl コマンドを利用することでそのログを見ることが できます。たとえば、ページャを使用して直近のログを見る場合は、以下のコマンドを 実行します。 :: journalctl -e -u follow-swarm-service