2016-12-07 8 views
2

私のラップトップ(x86_64)とラズベリーPis(armhf)のクラスターの両方で、分散アルゴリズムを新しいdocker swarm modeでテストしたい。いくつかのシステムアーキテクチャーを持つswarmでdockerサービスを実行する

設定が完了したら、1つのマネージャノード(ラップトップ)とN + 1ワーカーノード(N個のラスププラスラップトップ)で構成されたswarmクラスタを作成できます。それはそのようになっていますx86_64版の1(my_project:x86_64)、およびarmhf 1(my_project:armhf):

laptop$ docker swarm init --advertise-addr 192.168.10.1 
raspi1$ docker swarm join --token <TOKEN> 192.168.10.1:2377 
# [...] 
raspiN$ docker swarm join --token <TOKEN> 192.168.10.1:2377 

、私は私のプロジェクトのための2枚の画像を構築しました。私は実際にはM(準)独立ノードを作成することが私の望むものであるので、この新しい群モードからノード/サービスアーキテクチャが大好きです。docker service create ...コマンドを使って正しいノードに正しいイメージを与えるにはどうしたらいいですか?

私が見るところでは、docker service createはパラメータとして1つの画像しか取りません! I saw here私は各ノードにラベルを付けることができ、この特定のラベルを持つノードだけを使用するようにサービスに依頼することができますが、それは私が望むものではありません。私は、アーキテクチャによって分割されたタスクの2つのクラスターを管理することになり、swarmモードのスケジューラーとディスパッチャーを利用したいとの私の望みが崩れてしまいます。

私は携帯性の彼の探求に悲しいオタクです、それは私です!

PS:docker swarmdocker swarm modeは2つの異なるものであるため、これは 'docker-swarm-mode'というタグを持っています。

答えて

2

アドリアン、ドッカーキャプテンはこちら。

この時点では、コンテナがスケジュールされているノードによって異なるイメージを取得するサービスを作成することはできません。

しかし、どちらのアーキテクチャーでも、ドッキング・イメージに静的バイナリーをバンドルし、entrypoint.shを決定するというハッキングがあります。

一方、アーキテクチャごとに2つのサービスを作成できるということは、実際には悪いことではありません。 ARMおよびx86_64バージョンのアプリケーションでは、ハードウェアの仕様によって異なるスケールを必要とする場合があります。また、基礎となるハードウェアに基づいて異なるメモリ/ CPUの制限を適用することもできます。

これらのサービスは、--networkオプションを使用して同じネットワークに配置すると、相互に通信することができ、相互の相互作用の仕方を制御できます。

これは、現在の問題を回避するのに役立ちます。まだ代替案を評価している場合は、私に連絡してください。

+0

答えてくれてありがとう@marcosnils、私はそれを待っていました! :)私のプロジェクトのバイナリを静的にリンクすると、あなたのハックは正当だと思われます。 [このチュートリアル](https://eyskens.me/multiarch-docker-images/)は、それが正しいとすれば、そのようなハッキングの王を達成しているようです。それ以外は、[マルチarchイメージ](https://hub.docker.com/r/multiarch/goxc/)について知っていますか?私は彼らが達成していることを正確に理解していませんでした。例は見つけられませんでしたが、これはコンテナ内にアーキテクチャごとのビンを構築するのに役立つでしょうか?とにかくおかげさまで、あなたはあなたの恩恵を受けました! –

+0

ちょっと@AdrienLuxey !.あなたが共有したチュートリアルのようなものは、別の目的のためです。基本的には、qemuをローカルに依存する複数のアーチを構築することができます。レジストリに異なるタグを付けることもできます。私は複数のレポについて知っています。基本的には、マルチアーチ画像を作成する簡単な方法を提供していますが、各画像はレジストリ内の異なるタグになります。 もちろん、これらのツールのいくつかを使用して、内部に複数のアーチのバイナリを持つイメージを構築することはできますが、多少の作業が必要になることがあります。 – marcosnils

+0

@AdrienLuxeyには良いニュースがあります。ドッカーのCLIが公式にビルドをサポートするまで、サードパーティ製の外部ツールを使用してマルチアーチイメージを作成できるようになりました。 https://integratedcode.us/2016/04/22/a-step-towards-multi-platform-docker-images/を確認してください。 ドッキングエンジンとレジストリは現在この形式をサポートしています。したがって、マルチアーチのイメージをレジストリにプッシュしてswarmで実行すると、それが動作するはずです。 – marcosnils

0

これについて考えてみると、いくつかのパフォーマンスとオーバーヘッドのペナルティで、armhfイメージをどこでも実行し、エミュレートされたいくつかを実行することで、必要なことを行う方法があると思います。

画像hypriot/qemu-registerを見てください - それのソースはhttps://github.com/hypriot/qemu-registerです - それが何をしているのかを理解しているところまで読んでください。基本的には、x86マシン上でarmhfおよびaarch64バイナリをエミュレートすることができます。次に、クラスタ全体で単一のイメージを実行できます。

私が知っているのは、これがあなたが求めているものではなく、他のソリューションを使って作業しているということですが、これは役に立つかもしれません。

関連する問題