K 3 Sの上のEdgex鋳造所


This blog post is part 2 of a series of articles about how to deploy and operate EdgeX Foundry - an open source software framework for IoT Edge on K3s - a lightweight, highly available, and secured orchestrator.



このシリーズの最初の部分では、我々は手を進めるために必要なすべての事前の要件を見ている.私たちはEdgeX Foundry tutorial by Jonas Werner とK 3 S上でedgex鋳造サービスを展開します.我々はすでにK 3 SはEDGEXマイクロサービスを管理し、調整するための良い軽量ソリューションであることを学んだ.私たちはGeneva Edgex鋳造所のバージョン.
このポストの範囲は、センサーデータ(例えば周囲温度)を消費するエッジユースケースを示すことです.このセンサーデータは、K 3 S上でホストされているedgExpendryサービスによって処理されます.このセンサーデータはクラウドベースのMQTTブローカーにプッシュされますHiveMQ . ここから、クラウドでデータを保存し処理することができます.これらのポストで使用される構成とマニフェストは、これで利用できますrepository .

セットアップ
エンドツーエンドのセットアップは、図1のようです.


ラズベリーPiを用いたDHT‐22(エッジ装置)
周囲温度と湿度を取り込むDHT - 22センサーを使用します.センサーがブレッドボードまたは抵抗を必要としないことに注意してください、それはすべてSMD(表面実装装置)に取り付けられます.DHTセンサーは、ラズベリーパイのGPIO(汎用I/O)ピンに接続されます.
温度をキャプチャし、センサーデータをEDGEXに送信するスクリプトでは、次の変更が行われます.The EdgeX IP , DHT sensor type , GPIO ラズベリーパイのピンとedge-device-rest 以下に示すサービス.
import sys, time, requests, json, Adafruit_DHT

edgexip = "192.168.1.179"

while True:

    # Update to match DHT sensor type and GPIO pin
    rawHum, rawTmp = Adafruit_DHT.read_retry(22, 4)

    urlTemp = 'http://%s:32536/api/v1/resource/Temp_and_Humidity_sensor_cluster_01/temperature' % edgexip
    urlHum  = 'http://%s:32536/api/v1/resource/Temp_and_Humidity_sensor_cluster_01/humidity' % edgexip



どのように、あなたはK 3 Sにedgexを展開しますか?
まず、K 3 SクラスタとK 3 Sエージェントを3つの別々のVMSに対して、図3に示すようにK 3 Sクラスタを配備する.k 3 sのedgexサービスはゲートウェイのように動作しますpart-1 ). VMSでは、ubuntu - 20.04 osを使用します.VMSが作成されると、次の手順でK 3 sを展開します.
注意してください.

サーバー/マスター
K 3 Sサーバーを設定するには、次の手順を使用します
export K3s_NODE_NAME=${HOSTNAME//_/-}
export K3s_EXTERNAL_IP=<host-ip>
curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh |  sh -
生成されたノードトークンをコピーする
cat /var/lib/rancher/k3s/server/node-token
K 3 Sサーバが稼働しているかどうかをチェックする
systemctl status k3s

エージェント
K 3 Sエージェントを構成するには、次の手順を使用します
export K3S_TOKEN=<node-token of K3s server>
export K3s_URL=https://<ip of k3s server>:6443
export INSTALL_K3S_EXEC="--docker --token $K3S_TOKEN --server $K3S_URL"
export K3S_NODE_NAME=${HOSTNAME//_/-}
curl -sfL https://docs.rancher.cn/k3s/k3s-install.sh | sh -
K 3 Sサーバが稼働しているかどうかをチェックする
systemctl status k3s-agent
CLIツールをインストールしたことを確認してくださいkubectl and helm . また、同じように正しいパーミッションを設定していることを確認します.kubeconfig K 3 S用のファイルは/etc/rancher/k3s/k3s.yaml . さらに進む前にKubeconfig環境変数を設定します.
export KUBECONFIG=/etc/rancher/k3s/k3s.yaml

Edgex鋳造所をK 3 Sに配備する方法?
k 3 sが稼働中であるならば、クローンrepository Edgex鋳造所を展開するために.
git clone https://github.com/rutu-k/edgex-k3s.git
注意してください、EDGEX鋳造所は、そのサービスを試してみてテストするために、Dockerの構成マニフェストを持っています.使用kompose Dockerの作成マニフェストをKubernetesマニフェストに変換できます.
また、Kubernetesマニフェストに変換した後、ボリュームを使用していたアプリケーションを適切に構成することができず、最終的にKubernetesで動作しません.このため、それぞれのマニフェストを適切に修正しなければならない.簡単に.emptyDir ボリュームが設定されます.
まず最初に、我々はconsulから始めます.Consulはedgex鋳造所によってレジストリとして使用されます.
helm --kubeconfig /etc/rancher/k3s/k3s.yaml upgrade --install consul ./consul-helm
一度領事が実行している場合は、ダッシュボードを訪問することができますhttp://[K3s server ip]:[NodePort of service]キー値ストアを訪れた場合、空になります.edgex鋳造サービスのためにそれぞれのコンフィギュレーションを提供する必要があります.このため、キー値をインポートしてconsulに保存します.
私は、私がチュートリアルのDocker構成展開を経験していたとき、Consulからキー/価値JSONファイルを輸出しました.
consul kv import --http-addr=http://[K3s server ip]@edgex-kv.json
これで、キー値ストアにコンフィグが表示されます.
アプリケーションの配備
kubectl apply -f /k3s/.
すべてのアプリケーションサービスが稼働していることに注意してください.
$ kubectl get svc
NAME                                   TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)                                                                   AGE
kubernetes                             ClusterIP   10.43.0.1       <none>        443/TCP                                                                   4d1h
edgex-redis                            ClusterIP   10.43.56.89     <none>        6379/TCP                                                                  3d23h
edgex-core-consul                      ClusterIP   None            <none>        8500/TCP,8301/TCP,8301/UDP,8302/TCP,8302/UDP,8300/TCP,8600/TCP,8600/UDP   25h
consul                                 NodePort    10.43.193.246   <none>        80:32688/TCP                                                              25h
edgex-app-service-configurable-mqtt    NodePort    10.43.102.126   <none>        48101:32294/TCP                                                           4h26m
edgex-app-service-configurable-rules   NodePort    10.43.138.76    <none>        48100:30136/TCP                                                           4h26m
edgex-core-command                     NodePort    10.43.52.70     <none>        48082:32400/TCP                                                           4h26m
edgex-device-rest                      NodePort    10.43.167.127   <none>        49986:32536/TCP                                                           4h26m
edgex-core-metadata                    NodePort    10.43.132.29    <none>        48081:30220/TCP                                                           4h26m
edgex-support-notifications            NodePort    10.43.39.183    <none>        48060:32680/TCP                                                           4h26m
edgex-kuiper                           NodePort    10.43.231.24    <none>        48075:30082/TCP,20498:31868/TCP                                           4h26m
edgex-support-scheduler                NodePort    10.43.6.49      <none>        48085:31497/TCP                                                           4h26m
edgex-sys-mgmt-agent                   NodePort    10.43.250.114   <none>        48090:31736/TCP                                                           4h25m
edgex-core-data                        NodePort    10.43.251.191   <none>        5563:32220/TCP,48080:31931/TCP
$ kubectl get pods
NAME                                                    READY   STATUS    RESTARTS   AGE
edgex-redis-54fb576f64-bdv9x                            1/1     Running   1          3d12h
consul-0                                                1/1     Running   0          25h
edgex-core-metadata-5bd45879cf-h9tbs                    1/1     Running   0          4h25m
edgex-kuiper-bbc6cf47-trkdl                             1/1     Running   0          4h25m
edgex-sys-mgmt-agent-7fb78c6fc5-qmqc2                   1/1     Running   0          4h25m
edgex-support-notifications-7b45446cbc-bqhvb            1/1     Running   0          4h25m
edgex-app-service-configurable-mqtt-59b5c7b6c8-8zhfc    1/1     Running   1          4h25m
edgex-app-service-configurable-rules-58c6846d54-s29hp   1/1     Running   1          4h25m
edgex-core-command-78b5ff9864-hb6wr                     1/1     Running   0          4h25m
edgex-core-data-86f5864db6-cvbl7                        1/1     Running   0          4h25m
edgex-support-scheduler-755b5779dc-br2d8                1/1     Running   0          4h25m
edgex-device-rest-599c579bf5-zbrg8                      1/1     Running   0          4h25m


Edgex鋳造工場ワークフロー
edgexワークフローは3つの主要な部分に分けることができます;デバイス、コアデータサービス、アプリケーションサービス.センサーデータを分析することによって行動を取ることができる作動のためのもう一つの部分があります、しかし、これはこのポストの範囲外です.
  • デバイスワークフロー:特定のセンサーデバイス、そのプロファイルを追加し、適切なデバイスプロトコルを選択し、イベントオブジェクトを作成し、コアデータサービスに送信するプロセスです.edgexファウンドリーにデバイスを追加したい場合は、図3に示すように3つの構成が必要です.
  • ValueDescriptor :次に、デバイスサービスは、デバイスの代わりに送信されるデータの型についてedgexに通知する必要があります.あなたがナンバー5を与えられるならば、それはあなたに意味しますか?何も、いくつかのコンテキストと測定単位のない.たとえば、私は5フィートは今カメラの深さをスキャンすると言うならば、あなたは数5が表すもののより良い理解を持っている.edgexにおいて、値ディスクリプタは、デバイスに送られて、デバイスから送られるどんなデータ(または値)のためにでも、文脈と単位の単位を提供します.名前が暗示するように、値記述子は値-単位、その最小値と最大値(何かあれば)、画面に表示するときに値を表示する方法などを記述します.デバイスから取得されたデータ(これをデバイスから取得する)、または動作のためにデバイスに送信されるデータ(このセットを呼び出したり、デバイスに出力する)は、そのデータに関連付けられた値ディスクリプタを必要とする.
  • デバイスプロファイル:デバイスプロファイル内のデバイスの種類を説明します.デバイス・サービスによって管理される各々のデバイスはデバイス・プロファイルとの関連を有する.
  • デバイス定義:メーカーのようなデバイス情報、それが使用するプロトコル、デバイスプロファイルなど.
  • データフローサービスをコアデータに送信するEvent オブジェクト.イベントは、特定の時点でデバイス(そのIDまたは名前によってデバイスに関連付けられている)からのセンサー測定値のコレクションです.エーReading オブジェクトをEvent オブジェクトは、デバイスによって、検出されて、読取りにコンテクストを提供するために値ディスクリプタと関連する事項値である.
  • アプリケーションサービスワークフロー:アプリケーションサービスは、EDGEXファウンドリから外部システムとプロセスにデータを取得するための手段です.アプリケーションサービスは、準備されるデータ(変換されて、濃縮されて、フィルターをかけられる)などの手段を提供して、選択の終点に送り出される前に、(フォーマットされて、圧縮されて、暗号化された、その他)を手入れしました.ボックスの今日サポートされているエンドポイントは、HTTPとMQTTエンドポイントが含まれていますが、将来的に追加の製品が含まれ、カスタムエンドポイントを含めることができます.

  • 行動しましょう
    スクリプトは、DHTセンサーをアクティブにし、Edgexファウンドリーに温度値を送信するスクリプトをトリガします.
    $ python rpiPutTempHum.py 
    Temp: 27.7999992371C, humidity: 77.5%
    Temp: 28.2000007629C, humidity: 75.5999984741%
    Temp: 28.1000003815C, humidity: 75.5%
    Temp: 28.1000003815C, humidity: 75.4000015259%
    Temp: 28.2000007629C, humidity: 75.3000030518%
    Temp: 28.2000007629C, humidity: 75.3000030518%
    Temp: 28.2000007629C, humidity: 75.3000030518%
    
    
    センサー測定値が増加すると、edgex鋳造所のイベントカウントも増加する.
    └─ $ ▶ curl http://192.168.1.179:31931/api/v1/event/count
    2043
    
    また、最新の温度値を得ることができます.
    └─ $ ▶ curl http://192.168.1.179:31931/api/v1/reading | json_pp -json_opt pretty,canonical | tail -n 10
    
      % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
    100  396k    0  396k    0     0  9660k      0 --:--:-- --:--:-- --:--:-- 9660k
       {
          "created" : 1632159295863,
          "device" : "Temp_and_Humidity_sensor_cluster_01",
          "id" : "ffcf2a3b-6ecc-4476-9ab6-e17ae983886f",
          "name" : "temperature",
          "origin" : 1632159295861600937,
          "value" : "28",
          "valueType" : "Int64"
       }
    ]
    
    アプリケーションサービスのデモを行うには、MQTTブローカに温度値を送信するアプリケーションMQTTサービスを構成します.The edgex-app-service-configurable-mqtt サービス(セクション3のedgexファウンドリーにおける展開されたサービスをチェックしてください)は、EDGEXセンサーデータをhivemqによって主催される公共のMQTTブローカーに送るコミュニティに提供された輸出者ですhttp://broker.mqttdashboard.com ) 1883年港.次に、このセンサーデータは、HiVemq提供MQTTブラウザクライアントを介して、公開して、特定の購読で可視化することができますtopic .
    トピック名は、edgex-app-service-configurable-mqtt 展開refer here ).
    - name: WRITABLE_PIPELINE_FUNCTIONS_MQTTSEND_ADDRESSABLE_TOPIC
        value: DHT-SENSOR
    
    移動するHiveMQ MQTT browser client . クリックConnect デフォルトの設定で.次に、クリックAdd New Topic Subscription , トピック名を入力するDHT-SENSOR をクリックしてSubscribe . メッセージにセンサーデータを表示します.


    結論
    この投稿では、次のようになりました.
  • どのようにK 3 Sを展開する?
  • DockerをマニフェストをKubernetesマニフェストに変える方法?
  • Edgex鋳造所をK 3 Sに配備する方法?
  • どのようにEdgexファウンドリーにラズベリーパイからセンサーデータを送信するには?
  • これまでのところ、センサーから受信したデータの処理方法を見てきました.また、データをさらに分析することによって、あらかじめ定義された動作を取ることもできます.Edgex鋳造機は組込みによるエッジ解析のサポートを提供するeKuiper ルールエンジン.我々は、次の部分でそれをカバーしようとします.
    私は、あなたがこのポスト有益で魅力的であるとわかりました.このようなより多くのポストのために、我々の毎週の会報を購読してください.私はこのポストに関するあなたの考えを聞きたいです、それで、上で会話を始めますか?

    参考文献
  • Value Descriptors
  • Device Profile
  • EdgeX Foundry definitions
  • K3s