Help us understand the problem. What is going on with this article?

Edgeworx ioFogを動かせた (◜◡◝)

More than 1 year has passed since last update.

注意事項

この記事の方法ではまだioFogの構築には成功していません。
現在調査中です。

=>動かせました。

導入

ioFogというエッジコンピューティング用のプラットフォームについて紹介します。
現状、日本語情報はほぼ皆無で下記のニュースがある程度です。
【OSS】Edgeworx、エッジコンピューティングアプリケーションプラットフォーム「ioFog Platform」をオープンソース化

忙しいから一言で

エッジデバイスにDocker入れておいて、サーバ側からエッジのDockerを制御してコンテナをデプロイしたり、エッジ間、またはサーバ-エッジ間でデータの送受信ができたりするプラットフォーム。
パートナー企業としてRedhat、Microsoft、Eclipseがついてるらしい。

ioFogとは

公式には下記説明があります。

By installing ioFog to any device (with minimal amount of compute) you create a distributed Edge Compute Network (ECN), enabling you to run any microservice on it dynamically, securely, and remotely.
ioFogを任意のデバイスに最小限のコンピューティングでインストールすることで、分散エッジコンピューティングネットワーク(ECN)を作成し、マイクロサービスを動的に、安全に、リモートで実行できます。

ioFogは下記の3つのSWコンポーネントから構成されています。

  • ioFog Agent
    Runs on each of your edge devices, giving you a microservice platform
    各エッジデバイスで実行され、マイクロサービスプラットフォームを提供します。

  • ioFog Controller
    Provides you remote control over the microservices
    マイクロサービスのリモートコントロールを提供します。

  • ioFog Connector
    Brokers communication between microservices, across complex networks
    複雑なネットワークにわたるマイクロサービス間のブローカー通信

インストール方法

ioFog Agent(Ubuntu 18.04)

エッジ側にするデバイスで以下のコマンドを実行します。
今回はUbuntu 18.04をエッジ側としました。
※JAVA8、Docker、ioFog Agentの3つがインストールされる。

   sudo apt-get install -y curl
   curl -sSf https://iofog.org/linux.sh | sh

起動及び自動起動化はsystemctlから行います。
今回はSSL通信をしない設定として起動します。

sudo iofog-agent config -dev on
sudo systemctl start iofog-agent 
sudo systemctl enable iofog-agent 

ioFog Controller(Ubuntu 16.04)

Node.jsのv8以上が必要です。
以下のコマンド等でNode.jsをインストールします。

curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs

npmでioFog Controllerをインストールします。

sudo npm install -g iofogcontroller --unsafe-perm

インストールが終わったら、下記コマンドでcontrollerを起動しましょう。
今回はSSL通信を使わない設定としてます。

iofog-controller config dev-mode --on
iofog-controller start

起動後、ユーザ登録を下記コマンドで行います。

iofog-controller user add --email hoge@mail.com --first-name taro --last-name tanaka --password password

ioFog Connector(Ubuntu 16.04)

JAVA8が必要なので、下記コマンドでインストールします。

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer

下記コマンドでioFog Connectorをインストールします。

curl -s https://packagecloud.io/install/repositories/iofog/iofog-connector/script.deb.sh | sudo bash
sudo apt-get install iofog-connector

使い方

ioFog agent 登録手順

ioFog agent側

  1. agentの自動起動&起動を設定
   sudo systemctl start iofog-agent
   sudo systemctl enable iofog-agent
  1. 状態の確認 以下のコマンドを使ってagentの状態を確認する。
   $ sudo iofog-agent info
   Iofog UUID                               : not provisioned
   IP Address                               : 192.168.11.19   <- IPが割り当てられている事を確認
   Network Interface                        : ens33
   Developer's Mode                         : on
   ioFog Controller                         : http://192.168.11.20:54421/api/v3/
   ioFog Certificate                        : /etc/iofog-agent/cert.crt
   Docker URL                               : unix:///var/run/docker.sock
   Disk Usage Limit                         : 50.00 GiB
   Message Storage Directory                : /var/lib/iofog-agent/
   Memory RAM Limit                         : 4096.00 MiB
   CPU Usage Limit                          : 80.00%
   Log Disk Limit                           : 10.00 GiB
   Log File Directory                       : /var/log/iofog-agent/
   Log Rolling File Count                   : 10
   Status Update Frequency                  : 30
   Get Changes Frequency                    : 60
   Scan Devices Frequency                   : 60
   Post Diagnostics Frequency               : 10
   Isolated Docker Containers Mode          : off
   GPS mode                                 : auto
   GPS coordinates(lat,lon)                 : 11.11,222.22
   Fog type                                 : intel_amd
   $ sudo iofog-agent status
   ioFog daemon                : RUNNING
   Memory Usage                : about 63.90 MiB
   Disk Usage                  : about 0.00 MiB
   CPU Usage                   : about 0.00%
   Running Microservices       : 0
   Connection to Controller    : not provisioned
   Messages Processed          : about 0
   System Time                 : 09/11/2018 11:40 PM
  1. NW IFを設定する sudo iofog-agent info* でipアドレスが振られていない場合、以下のコマンドでNW IFを指定する
    sudo iofog-agent config -n ens33(=IF名)
  1. iofog-controllerのIPを設定
    sudo iofog-agent config -a http://(controllerのIP):54421/api/v3/

ioFog controller側

  1. ユーザ登録を行う
   $ iofog-controller user add   --email hogehoge@gmail.com   --first-name firstName   --last-name lastName   --password password
   {"firstName":"firstName","lastName":"lastName","email":"hogehoge@gmail.com","password":"f3cd03f582c2e7fc"}
   (node:1660) [DEP0106] DeprecationWarning: crypto.createCipher is deprecated.
   (node:1660) Warning: Use Cipheriv for counter mode of aes-256-ctr
   User created successfully.
   $ iofog-controller user list
   [
     {
       "id": 1,
       "firstName": "firstName",
       "lastName": "lastName",
       "email": "hogehoge@gmail.com",
       "password": "f3cd03f582c2e7fc",
       "tempPassword": null,
       "emailActivated": true
     }
   ]
   All users have been retrieved successfully.
  1. controllerにagentを追加してprovision keyを得る。
   $ iofog-controller iofog add --name "my-fog-node" --fog-type 0 -u 1
   getting user by id: 1
   {"name":"my-fog-node","fogType":0}
   {"uuid":"mVmCG9FbKk27qJVbMPqwN4qRmdwb79H2"}
   Fog has been created successfully.
   $ iofog-controller iofog list
   {
     "fogs": [
       {
         "uuid": "mVmCG9FbKk27qJVbMPqwN4qRmdwb79H2",
         "name": "my-fog-node",
         "location": null,
         "gpsMode": null,
         "latitude": null,
         "longitude": null,
         "description": null,
         "lastActive": null,
         "daemonStatus": "UNKNOWN",
         "daemonOperatingDuration": 0,
         "daemonLastStart": null,
         "memoryUsage": 0,
         "diskUsage": 0,
         "cpuUsage": 0,
         "memoryViolation": null,
         "diskViolation": null,
         "cpuViolation": null,
         "catalogItemStatus": null,
         "repositoryCount": null,
         "repositoryStatus": null,
         "systemTime": null,
         "lastStatusTime": null,
         "ipAddress": "0.0.0.0",
         "processedMessages": 0,
         "catalogItemMessageCounts": null,
         "messageSpeed": null,
         "lastCommandTime": null,
         "networkInterface": "eth0",
         "dockerUrl": "unix:///var/run/docker.sock",
         "diskLimit": 50,
         "diskDirectory": "/var/lib/iofog/",
         "memoryLimit": 4096,
         "cpuLimit": 80,
         "logLimit": 10,
         "logDirectory": "/var/log/iofog/",
         "bluetoothEnabled": false,
         "abstractedHardwareEnabled": false,
         "logFileCount": 10,
         "version": null,
         "isReadyToUpgrade": true,
         "isReadyToRollback": false,
         "statusFrequency": 10,
         "changeFrequency": 20,
         "deviceScanFrequency": 20,
         "tunnel": "",
         "watchdogEnabled": true,
         "created_at": "2018-12-09T14:56:04.206Z",
         "updated_at": "2018-12-09T14:56:04.206Z",
         "fogTypeId": 0,
         "userId": 1
       }
     ]
   }
   Fog list has been gotten successfully.

   $ iofog-controller iofog provisioning-key --node-id mVmCG9FbKk27qJVbMPqwN4qRmdwb79H2
   {"uuid":"mVmCG9FbKk27qJVbMPqwN4qRmdwb79H2"}
   Provisioning key: {
     "key": "MN2C9TmD",
     "expirationTime": 1544368813918
   }
   Fog provisioning key has been generated successfully.
  1. agentにprovision keyを登録する
   ~$ sudo iofog-agent provision MN2C9TmD
   Provisioning with key "MN2C9TmD" ... Result: Provision success - Iofog UUID is mVmCG9FbKk27qJVbMPqwN4qRmdwb79H2
   $ sudo iofog-agent info
   Iofog UUID                               : mVmCG9FbKk27qJVbMPqwN4qRmdwb79H2 <- 成功してるとcontrollerのuuidが見える
   IP Address                               : 192.168.11.19
   Network Interface                        : ens33
   Developer's Mode                         : on
   ioFog Controller                         : http://192.168.11.20:54421/api/v3/
   ioFog Certificate                        : /etc/iofog-agent/cert.crt
   Docker URL                               : unix:///var/run/docker.sock
   Disk Usage Limit                         : 50.00 GiB
   Message Storage Directory                : /var/lib/iofog-agent/
   Memory RAM Limit                         : 4096.00 MiB
   CPU Usage Limit                          : 80.00%
   Log Disk Limit                           : 10.00 GiB
   Log File Directory                       : /var/log/iofog-agent/
   Log Rolling File Count                   : 10
   Status Update Frequency                  : 30
   Get Changes Frequency                    : 60
   Scan Devices Frequency                   : 60
   Post Diagnostics Frequency               : 10
   Isolated Docker Containers Mode          : off
   GPS mode                                 : auto
   GPS coordinates(lat,lon)                 : 11.11,222.22
   Fog type                                 : intel_amd

Microservice デプロイ手順

  1. デプロイするDockerコンテナは下記の コマンドから確認できるDockerレジストリの中から選ぶ。
   $ iofog-controller registry list
   {
     "registries": [
       {
         "id": 1,
         "url": "registry.hub.docker.com",
         "isPublic": true,
         "isSecure": true,
         "certificate": "",
         "requiresCert": false,
         "username": "",
         "password": "",
         "userEmail": "",
         "userId": null
       },
       {
         "id": 2,
         "url": "from_cache",
         "isPublic": true,
         "isSecure": true,
         "certificate": "",
         "requiresCert": false,
         "username": "",
         "password": "",
         "userEmail": "",
         "userId": null
       }
     ]
   }
   List of Registries has been received successfully.

今回は下記のコマンドから確認できるデフォルトの登録済みコンテナの中から選ぶ。

   $ iofog-controller catalog list
   {
     "catalogItems": [
       {
         "id": 1,
         "name": "Networking Tool",
         "description": "The built-in networking tool for Eclipse ioFog.",
         "category": "SYSTEM",
         "configExample": null,
         "publisher": "Eclipse ioFog",
         "diskRequired": 0,
         "ramRequired": 0,
         "picture": "none.png",
         "isPublic": false,
         "registryId": 1,
         "userId": null,
         "images": [
           {
             "containerImage": "iofog/core-networking",
             "fogTypeId": 1
           },
           {
             "containerImage": "iofog/core-networking-arm",
             "fogTypeId": 2
           }
         ],
         "inputType": null,
         "outputType": null
       },
       ~~~~
       {
         "id": 5,
         "name": "Hello Web Demo",
         "description": "A simple web server to test Eclipse ioFog.",
         "category": "UTILITIES",
         "configExample": null,
         "publisher": "Eclipse ioFog",
         "diskRequired": 0,
         "ramRequired": 0,
         "picture": "images/build/4.png",
         "isPublic": true,
         "registryId": 1,
         "userId": null,
         "images": [
           {
             "containerImage": "iofog/hello-web",
             "fogTypeId": 1
           },
           {
             "containerImage": "iofog/hello-web-arm",
             "fogTypeId": 2
           }
         ],
         "inputType": null,
         "outputType": null
       },
       ~~~
     ]
   }
   Catalog items have been successfully retrieved.

  1. Flowを作成する
   $ iofog-controller flow add -a -u 1 -n sample_flow -d flow_desc
   getting user by id: 1
   {"name":"sample_flow","description":"flow_desc","isActivated":true}
   Flow created successfully.
   $ iofog-controller flow list
   {
     "flows": [
       {
         "id": 1,
         "name": "sample_flow",
         "description": "flow_desc",
         "isActivated": true,
         "created_at": "2018-12-09T15:29:59.406Z",
         "updated_at": "2018-12-09T15:29:59.406Z",
         "userId": 1
       }
     ]
   }
   All flows have been retrieved successfully.
  1. agentへコンテナ(microservice)をデプロイする。 今回は1の手順で確認した登録済みコンテナの内、id:5のものをデプロイする。
   $ iofog-controller microservice add   --name "test_msF"   --catalog-id 5  --config '{ "custom_param": 10 }' -u 1 --flow-id 1 --iofog-id mVmCG9FbKk27qJVbMPqwN4qRmdwb79H2
   getting user by id: 1
   {"name":"test_msF","config":"{ \"custom_param\": 10 }","catalogItemId":5,"flowId":1,"iofogUuid":"mVmCG9FbKk27qJVbMPqwN4qRmdwb79H2"}
   {"uuid":"K37kx7rw7pqgc343fYR3qkXLtmx8YDgJ"}
   Microservice has been created successfully.
   $ iofog-controller microservice list
   {
     "microservices": [
       {
         "uuid": "K37kx7rw7pqgc343fYR3qkXLtmx8YDgJ",
         "config": "{ \"custom_param\": 10 }",
         "name": "test_msF",
         "rootHostAccess": false,
         "logSize": 0,
         "delete": false,
         "deleteWithCleanup": false,
         "flowId": 1,
         "catalogItemId": 5,
         "iofogUuid": "mVmCG9FbKk27qJVbMPqwN4qRmdwb79H2",
         "userId": 1
       }
     ]
   }
   Microservices have been retrieved successfully.
  1. agentにコンテナ(microservice)がデプロイされているかdocker psコマンドで確認する。
   $ docker ps
   CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
   03dbabab50dd        iofog/hello-web     "node /src/element.js"   2 minutes ago       Up 2 minutes 

感想

なんとか動かせた。
公式リファレンスに誤記があったり、チュートリアルに無い手順が必要だったりして苦労した。

SDKを使う事でcontroller側に登録した設定値をagentで取得したりできる模様。
ツールが目指してるとこは、AWS Green GlassやAzure IoT Edgeのオンプレ版といったところな気がする。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away