DockerをRaspberry Piのクラスター全体に群がらせます



翻訳者からこの記事へのリンクは、最新の公式Dockerニュースレターに掲載されました。 Raspberry PiとDocker(Swarm)の両方に興味があるのは私だけではないので、翻訳に注目します。

この投稿では、Raspberry PiにSwarmをインストールし、Dockerマシンを使用してSwarmクラスターを構成することがいかに簡単かを示します。

3つのRaspberry Pi 2 Model Bの小さなPiタワーを構築し、それらをDocker Swarmクラスターに組み立てました。

写真でわかるように、5ポートD-Linkスイッチに3つのRaspberry Piを配置します。 4つのデバイスはすべて、4 USBポート充電器から電力を供給されます。 これにより、タワーを非常に安定させることができますが、同時に持ち運び可能です。外部ワイヤからは、1本の電源ワイヤと1本のネットワークケーブルしかありません。

便宜上、使用済みのコンポーネントをAmazonの1つの買い物リストにまとめました。 (翻訳者のメモ:リスト全体から2つのアイテムしか残っていませんが、残りはAmazonからすぐに消えてしまいました。)

必要な材料
このチュートリアルでは、3つのステップすべてがMacで実行されます。 これを行うには、3つのユーティリティが必要です。

すべてのRaspberry PiのSDカード画像を記録するためのフラッシュユーティリティ。
単一のbrewインストール内にあるDockerクライアント。
hypriotドライバーを備えたDocker Machineバイナリ。


カードを書き留めます


まず、Dockerがプリインストールされたカードをインストールする必要があります。 MacまたはLinuxを搭載したコンピューターでは、小さなフラッシュコマンドラインユーティリティを使用して、簡単なコマンドを使用して3つのカードすべてを準備できます。

$ flash --hostname pi1 http://downloads.hypriot.com/hypriot-rpi-20150416-201537.img.zip $ flash --hostname pi2 http://downloads.hypriot.com/hypriot-rpi-20150416-201537.img.zip $ flash --hostname pi3 http://downloads.hypriot.com/hypriot-rpi-20150416-201537.img.zip 

次に、すべてのRaspberry Piデバイスにカードを挿入し、それらから起動します。 しばらくすると、異なるホスト名で表示されます。


IPアドレスを取得する


SDイメージもavahi-deamonを実行して、mDNS経由でホスト名を宣言します。 したがって、各ラズベリーはpi1.localpi2.local 、およびpi3.local介して利用できます。 Docker Machineは現在これらのホスト名を解決できないため、ラズベリーのIPアドレスを手動で取得する必要があります。

 $ ping -c 1 pi1.local $ ping -c 1 pi2.local $ ping -c 1 pi3.local 

この例では、3つのアドレスが92.168.1.101, 102および103 92.168.1.101, 102と想像してください。


SSH公開キーを入力してください


Docker Machineは、SSHを介して各Raspberry Piに接続します。 rootパスワードを入力しないために、SSH公開鍵を入力する必要がありrootssh-copy-idと呼ばれるリモートマシンのSSH公開キーを入力するための特別なユーティリティがありssh-copy-id 。 最初にインストールする必要がある場合があります。

 $ ssh-copy-id root@192.168.1.101 $ ssh-copy-id root@192.168.1.102 $ ssh-copy-id root@192.168.1.103 

上記の各コマンドについて、rootユーザーのhypriotパスワードを入力する必要があります。


Dockerマシンを作成する


次のステップでは、Docker Machineドライバーを使用してRaspberry Pi Hypriotデバイスに接続します。 私たちのhypriotドライバーは、公式のDocker Machineバイナリにまだ統合されていません。 したがって、hypriotドライバーを使用してdocker docker-machineバイナリをダウンロードする必要があります。

 $ curl -o docker-machine http://downloads.hypriot.com/docker-machine_0.4.0-dev_darwin-amd64 $ chmod +x ./docker-machine 

ファイルを現在のディレクトリにダウンロードし、実行可能にします。 他のディレクトリから使用するために、 PATH別のディレクトリに移動する必要がある場合があります。


Swarmトークンを作成する


Docker Swarmクラスターは、個々のswarmエージェントが相互に検出できるようにする一意のクラスター識別子を使用します。 Docker Swarmを作成するには、このような識別子が必要です。
これはシェルから実行できます。

 $ export TOKEN=$(for i in $(seq 1 32); do echo -n $(echo "obase=16; $(($RANDOM % 16))" | bc); done; echo) $ echo $TOKEN 

この例では、使用します
  $ export TOKEN=babb1eb00bdecadedec0debabb1eb00b 

既にDocker Swarmで実行されているコンテナーがある場合は、 docker run --rm hypriot/rpi-swarm create使用して新しいクラスター識別子を作成することもできます。 上記のコマンドを使用して、鶏と卵の問題に陥らないようにしました。


Swarm Masterを作成する


生成されたクラスターIDを使用して、最初のRaspberry PiでDocker Swarm Masterを作成します
 $ ./docker-machine create -d hypriot --swarm --swarm-master --swarm-discovery token://$TOKEN --hypriot-ip-address 192.168.1.101 pi1 

このコマンドはpi1ラズベリーに接続し、TLSを使用してdockerデーモンを制御し、DockerハブからDocker hypriot/rpi-swarm:latestイメージをダウンロードします。 彼女は、コンテナ内のSwarm MasterとSwarmエージェントの両方を起動します。

すべてが正常に機能するかどうかを確認するために、次のコマンドを使用して、新しく作成されたSwarm Masterに接続できます。 彼女は、クライアントDockerがSwarmと通信するために必要なすべての環境変数を受け取ります。

 $ eval $(./docker-machine env --swarm pi1) $ docker info Containers: 2 Strategy: spread Filters: affinity, health, constraint, port, dependency Nodes: 1 pi1: 192.168.1.202:2376 └ Containers: 2 └ Reserved CPUs: 0 / 4 └ Reserved Memory: 0 B / 971.3 MiB 

単独のSwarmマネージャーのセットアップに成功しました。 彼が孤独にならないように、もっとマリオックを発射しましょう。


Swarmエージェントを作成する


残りのRaspberry Piについても、同じクラスターIDでDocker Machine接続を作成する必要があります。 今回は、 --swarm-masterオプションなしで--swarm-master -machineを起動し、各ラズベリーでSwarmエージェントコンテナを起動します。

 $ ./docker-machine create -d hypriot --swarm --swarm-discovery token://$TOKEN --hypriot-ip-address 192.168.1.102 pi2 $ ./docker-machine create -d hypriot --swarm --swarm-discovery token://$TOKEN --hypriot-ip-address 192.168.1.103 pi3 

Swarmがどのように見えるか見てみましょう。

 $ docker info Containers: 4 Strategy: spread Filters: affinity, health, constraint, port, dependency Nodes: 3 pi1: 192.168.1.101:2376 └ Containers: 2 └ Reserved CPUs: 0 / 4 └ Reserved Memory: 0 B / 971.3 MiB pi2: 192.168.1.102:2376 └ Containers: 1 └ Reserved CPUs: 0 / 4 └ Reserved Memory: 0 B / 971.3 MiB pi3: 192.168.1.103:2376 └ Containers: 1 └ Reserved CPUs: 0 / 4 └ Reserved Memory: 0 B / 971.3 MiB 

通常のコマンドでスウォーム全体のすべてのコンテナを表示できます

 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5effaa7de4a3 hypriot/rpi-swarm:latest "/swarm join --addr 2 minutes ago Up About a minute 2375/tcp pi3/swarm-agent 6b73003b7246 hypriot/rpi-swarm:latest "/swarm join --addr 4 minutes ago Up 3 minutes 2375/tcp pi2/swarm-agent 5e00fbf7b9f6 hypriot/rpi-swarm:latest "/swarm join --addr 7 minutes ago Up 7 minutes 2375/tcp pi1/swarm-agent 02c905ec25a0 hypriot/rpi-swarm:latest "/swarm manage --tls 7 minutes ago Up 7 minutes 2375/tcp, 192.168.1.101:3376->3376/tcp pi1/swarm-agent-master 

Docker Swarmの構成後、ポート3376を介して通常のDockerコマンドを使用できるようになりました。詳細については、 公式のDocker Swarmドキュメントを参照してください。

Swarm Masterとの正しい通信のために、Dockerクライアントを使用する前に、環境を構成することを忘れないでください

 $ eval $(docker-machine env --swarm pi1) 

MacからRaspberry Piのフィードをリモートで制御できるようになりました。 ほら、それはまったく難しくありませんでした!

[...]

Source: https://habr.com/ru/post/J262509/


All Articles