[はじめてのRDBOX(8)]rdbox使ってみました：RDBOX(k8s) Subscriber アプリ編

# はじめに
ROS の初心者が、とっても簡単なROSアプリを作ってみました。（連載記事です）

# 今回の記事の概要
- 画像蓄積用 ROS アプリ(Subscriber)と画像参照 Flask アプリを稼働させる k8s ノード(amd64)の設定
  - k8s ノード(amd64)へのラベル付けと共有ディレクトリの作成
  - k8s ノード(amd64)上にて、[multimaster_fkie](http://wiki.ros.org/multimaster_fkie) を稼働させる
- 今回の記事に該当するソースファイルは、以下のアドレスから参照可能です
  - https://github.com/higuchi-toshio-intec/example-picam/blob/master/kubernetes/picam-app-sub-photo.sh

# 構築手順

## k8sラベル付けと共有ディレクトリ作成
- k8s master に ssh
- アプリを配置する k8s ノード(今回は RDBOX-HQ 側 amd64)を確認(get nodes)
- アプリを配置する k8s ノードを制御するため、k8sノードにラベル付け(label node 'LABEL')
- 同ノードに、画像ファイルを共有するためのディレクトリを作成
- 以下(↓)は具体的な手順

```
$ ssh -i YourKeyFile -l ubuntu YourKubeMaster
Enter passphrase for key 'YourKeyFile':
$ sudo kubectl --kubeconfig /etc/kubernetes/admin.conf get nodes
$ sudo kubectl --kubeconfig /etc/kubernetes/admin.conf label node YourKubeNode01 node.rdbox.com/type=picam-data
$ ssh -i YourKeyFile ubuntu@YourKubeNode01 "sudo mkdir -p /opt/picam_data/photo ; sudo chmod 775 /opt/picam_data/photo ; ls -la /opt/picam_data/photo"
```


## マニフェスト(yaml)作成
- 画像蓄積用 ROS アプリ(Subscriber)コンテナと画像参照 Flask アプリコンテナの稼働設定
- 以下(↓)は具体的な手順

```
$ export PICAM_DATA=/opt/picam_data
$ export PICAM_PORT=8080
$ cd ${HOME}/git/example-picam/kubernetes
$ ./picam-app-sub-photo.sh | tee picam-app-sub-photo.yaml
#### ここにマニフェスト(yaml)が表示されます(ファイルにも保存される) ###
```

## マニフェスト(yaml) Upload
1. RDBOX(k8s)のダッシュボードに接続
   - https://YourRdboxKubeMasterAddress:30443/
2. [+ CREATE] をクリックし、picam-app-sub-photo.yaml を Upload（先ほど表示された YAML データを Copy&Paste しても可）
   ![rdbox-k8s-create.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427107/b5266130-9e40-aa69-53ec-61fe1339dab4.png)
3. Pod が配備されるまで、しばらく待つ
   ![rdbox-k8s-pod-sub.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427107/fd81b1fa-d7a3-05e0-5e98-7e59970b2bfa.png)


### マニフェスト(yaml)の要点
1. [template]-[spec]-[volumes] にて、ノード(amd64)上のディレクトリをコンテナから利用(mount)可能に設定
   - 画像蓄積用 ROS アプリ(Subscriber)コンテナと画像参照 Flask アプリコンテナにて、このディレクトリをマウントして共用
2. ROSアプリが稼働する k8s ノード(amd64)上にて、[multimaster_fkie](http://wiki.ros.org/multimaster_fkie) も稼働させる
   - この結果、ROS アプリからは localhost で ROS MASTER が稼働しているかのように利用できる
   - ほとんど設定することなく multimaster_fkie が ROS MASTER との通信を処理してくれる
2. k8s の node にて、画像蓄積用 ROS アプリ(Subscriber)と画像参照 Flask アプリを、**同居稼働**させる
   - この結果、共有Volume(NFSなど)の設定を省略できた（本サービスの場合は必要だし、きちんと構成を検討する必要あり）

---
# 記事リスト
1. [概要編](https://qiita.com/higuchi-toshio-intec/items/5d5499447d667e339b87)
2. [画像参照アプリの構築編](https://qiita.com/higuchi-toshio-intec/items/1deae0d03a74bafec8af)
3. [ROSパッケージ作成編](https://qiita.com/higuchi-toshio-intec/items/44f1377c171738d9b49b)
4. [ROS Subscriber編](https://qiita.com/higuchi-toshio-intec/items/3d62bbfc5e520de9dce1)
5. [ROS Publisher編](https://qiita.com/higuchi-toshio-intec/items/0c136f4d90e70983a8a3)
6. [DockerImage 作成編](https://qiita.com/higuchi-toshio-intec/items/826b4c5407b05372b78c)
7. [RDBOX(k8s) ポート転送編](https://qiita.com/higuchi-toshio-intec/items/b3b79da5ca160ee418b0)
8. [RDBOX(k8s) Subscriber アプリ編](https://qiita.com/higuchi-toshio-intec/items/765d7ef1b6baf85d9f02)（← 今回の記事）
9. [RDBOX(k8s) Publisher アプリ編](https://qiita.com/higuchi-toshio-intec/items/9c43e001d8098a6c7a40)
10. [雑記](https://qiita.com/higuchi-toshio-intec/items/5d80fd647514dfbd2938)