ICP上にKomposeを使ってデプロイを試行した（メモ）

## 概要
コンテナ上でアプリケーションが動作するようなPodをデプロイする際の考慮事項を学びたく、Docker Compose環境で動作しているNode.js，MongoDBのアプリケーションをk8s環境に移行する検証を実施。
k8sの実行環境としてはIBM Cloud Private（ICP）を使った。
学んだ考慮事項などを備忘録として記載。


## 環境
k8s実行環境は以下。

- ICP 2.1.0.3 Cloud Native Edition
- Ubuntu 16.04 LTS
- Docker CE 17.09.0

検証に利用したサンプル・アプリは以下。（Manjiiiさんに感謝。）

- [GitHub（ソースコード）](https://github.com/manjiii/Vagrant-samples)
- [Docker ComposeでVM上にNodejsの開発(nginx-Nodejs-Mongodb)用の雛形を作成する](https://qiita.com/Manjiii/items/d8c2f53c9f1a964936a6)

検証は2018年5～7月に実施。（最新のKomposeでは仕様や動作が変わっている可能性もある。）

## 図にしてみる
#### 移行前

- 3つのコンテナから構成
- 外部からはNginxとNode経由で接続
- 永続データ有り（全コンテナ）




![kompose1.png](https://qiita-image-store.s3.amazonaws.com/0/270508/34f8bd57-f807-f0fd-f222-3472a027de32.png)


####移行後

- 3つのservice（Node Portが2つとCluster IPが1つ）
- 3つのPod （1Podに1コンテナ）
- Persistent Volume有り（全コンテナ）
- **注意**：Ingress や ConfigMapの採用は別途検討する余地あり！


![kompose2.png](https://qiita-image-store.s3.amazonaws.com/0/270508/34246601-6fea-b32a-3255-209f175d1deb.png)




## 学んだ考慮事項

- ICP上でもkompose up/downは正常に使用できる（当然ですね）
- kompose up 実行時にはdocker-compose.ymlも参照されている
    - deployment、service、pvcなどのyamlファイルを編集した場合は、整合性がとれるようにdocker-compose.ymlにも修正が必要
- kompose upのあと、手動で、kubectl apply -f service.ymlが必要
* docker-compose.ymlでファイルをアタッチしている場合に、PVC用のyamlが生成されるが、そのまま適用すると正常に動作しないケースがある
    - k8sのボリュームのマウントの場合は、空のファイルシステムがマウントされることになる（上書きされる）ため、コンテナの起動で必要なファイル類はConfigMapを使うなどの考慮が必要

## その他の便利だったこと

### kompose downは便利
kompose downを実行するとServiceもDeploymentもPVCも一気に削除してくれる。

```cmd:
$ kompose down
WARN Volume mount on the host "/home/kompose/gitwork/Skeleton-nginx-nodejs-mongodb/Skeleton-nginx-nodejs-mongodb/dockers/mongodb/tmp" isn't supported - ignoring path on the host
WARN Volume mount on the host "/home/kompose/gitwork/Skeleton-nginx-nodejs-mongodb/Skeleton-nginx-nodejs-mongodb/dockers/mongodb/log" isn't supported - ignoring path on the host
WARN Volume mount on the host "/home/kompose/gitwork/Skeleton-nginx-nodejs-mongodb/Skeleton-nginx-nodejs-mongodb/dockers/nginx/conf.d" isn't supported - ignoring path on the host
WARN Volume mount on the host "/home/kompose/gitwork/Skeleton-nginx-nodejs-mongodb/Skeleton-nginx-nodejs-mongodb/dockers/nginx/www" isn't supported - ignoring path on the host
WARN Volume mount on the host "/home/kompose/gitwork/Skeleton-nginx-nodejs-mongodb/Skeleton-nginx-nodejs-mongodb/dockers/nginx/log" isn't supported - ignoring path on the host
WARN Volume mount on the host "/home/kompose/gitwork/Skeleton-nginx-nodejs-mongodb/Skeleton-nginx-nodejs-mongodb/dockers/node/src" isn't supported - ignoring path on the host
WARN Volume mount on the host "/home/kompose/gitwork/Skeleton-nginx-nodejs-mongodb/Skeleton-nginx-nodejs-mongodb/dockers/node/log" isn't supported - ignoring path on the host
INFO Deleting application in "default" namespace
INFO Successfully deleted Service: mongodb
INFO Successfully deleted Service: nginx
INFO Successfully deleted Service: node-app
INFO Successfully deleted Deployment: mongodb
INFO Successfully deleted PersistentVolumeClaim: datastrage
INFO Successfully deleted PersistentVolumeClaim: mongodb-claim1
INFO Successfully deleted PersistentVolumeClaim: mongodb-claim2
INFO Successfully deleted Deployment: nginx
INFO Successfully deleted PersistentVolumeClaim: nginx-claim0
INFO Successfully deleted PersistentVolumeClaim: nginx-claim1
INFO Successfully deleted PersistentVolumeClaim: nginx-claim2
INFO Successfully deleted Deployment: node-app
INFO Successfully deleted PersistentVolumeClaim: node-app-claim0
INFO Successfully deleted PersistentVolumeClaim: node-app-claim1
$
```

### ICPでのPV/PVCの編集
類似のPVを作成する際にjsonモードを使うと編集しやすかった