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