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

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

# 【ご注意】
- 画像撮影用アプリは、永遠に撮影を続けます
- 前回の記事で稼働させた Subscriber アプリは永遠に画像を保存し続けます
- 当然、ストレージ容量は無限ではありません
- **タイミングを見計らって、今回の一連記事で稼働させるアプリは停止してください**

# 今回の記事の概要
- k8s ノード(Raspberry PI:arm) へのラベル付け
- k8s ノード(同上)上にて、画像撮影用 ROS アプリ(Publisher)を稼働させる
- k8s ノード(同上)上にて、multimaster_fkie を稼働させる
- 今回の記事に該当するソースファイルは、以下のアドレスから参照可能です
  - https://github.com/higuchi-toshio-intec/example-picam/blob/master/kubernetes/picam-app-pub-photo.sh

# 構築手順

## k8sラベル付け
- k8s master に ssh
- アプリを配置する k8s ノード(今回は Raspberry PI)を確認(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 YourRaperryNode01 node.rdbox.com/type=picam
```


## マニフェスト(yaml)作成
- 画像撮影用 ROS アプリ(Publisher)コンテナの稼働設定
- 以下(↓)は具体的な手順

```
$ ./picam-app-pub-photo.sh | tee picam-app-pub-photo.yaml
#### ここにマニフェスト(yaml)が表示されます(ファイルにも保存される) ###
```

## マニフェスト(yaml) Upload
1. RDBOX(k8s)のダッシュボードに接続
   - https://YourRdboxKubeMasterAddress:30443/
2. [+ CREATE] をクリックし、picam-app-pub-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-pub.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427107/0f07e078-9f75-57ed-4985-f7d6c9036dc4.png)
4. 蓄積画像の確認
   - さらにしばらく待ち、ブラウザで http://YourRdboxKubeMasterAddress:30080 に接続し [Update] ボタンをクリック
     ![rdbox-hajimete-images.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/427107/37388536-e183-dff1-741d-27e44db155c4.png)


### マニフェスト(yaml)の要点
- [template]-[spec]-[volumes] にて、デバイスファイル /dev/vchiq をコンテナから利用(mount)可能に設定
  - 画像撮影用 ROS アプリ(Publisher)コンテナから、カメラを操作するため
- 画像撮影用 ROS アプリ(Publisher)コンテナにて、上記デバイスファイルをマウント

   ```
        volumeMounts:
        - mountPath: *var_path_vchiq
          name: picam-dev-photo
   ```
- 画像撮影用 ROS アプリ(Publisher)コンテナにて、特権アクセス(privileged)を許可する
  - デバイスファイル /dev/vchiq が使用可能となる

   ```
        securityContext:
          privileged: true
   ```

---
# 記事リスト
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)