swarm 拡張機能

ここでは、hive のコンテナ収容サーバにインストールされる swarm 拡張機能について 説明します。swarm 拡張機能では、ノードでサービスのコンテナがデプロイされるのを観測することによって 以下の2つの機能を提供します。

  • 仮想IP付与機能

  • ラベル付与機能

仮想IP付与機能

仮想IP付与機能では、サービスのコンテナがノードにデプロイされると、そのラベルにしたがって ノードに仮想IPを付与する機能を提供します。この機能を利用する場合にはサービスの 複製数は1に設定してください。これにより、複数のコンテナ収容サーバのうち当該 サービスのコンテナがデプロイされた1台だけに仮想IPを付与することができます。 また、障害が発生してコンテナが別のサーバに移動した場合に仮想IPも同じサーバに 移動するため、仮想IPのフェイルオーバが実現され、高可用性を確保することができます。

この機能を利用するたには、サービス定義の labels 属性に以下のラベルを設定する必要があります。

ラベル名

値の例

説明

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 属性に以下のラベルを設定する必要があります。

ラベル名

値の例

説明

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