cloudpack大阪の佐々木です。
ECSでコンテナ用のボリュームを作ったらどこに保存されるか?という話です。
ECSで使うamazon-ecs-optimizedのAMIはデフォルトでは下記のディスク構成になっています。(2015.09.d 以降)
- /dev/xvda 8G
- /dev/xvdcz 22G
Amazon ECS に最適化された、2015.09.d 以降の AMI を使用している場合、インスタンスには 2 つのボリュームが設定されます。[Root] ボリュームはオペレーティングシステム用で、2 番目の Amazon EBS ボリューム (/dev/xvdcz にアタッチ) は Docker 用です。
永続化データを取り扱う場合、ボリュームを追加すると思います。/dev/xvdcz
はDocker用ボリュームってことなので、当然そちらに作られるのかと思ったのですが、違うようです。
/dev/xvdcz is dedicated to layer storage; since volumes are not layers, they're not stored there.
実際にやってみます。
タスク定義はこんな感じです。
"volumes": [
{
"name": "volume-0",
"host": {
"sourcePath": "/ecs/mysql"
}
}
]
dfではRootボリュームの/dev/xvda1
だけが見えています。
$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/xvda1 7.8G 1.7G 6.1G 22% /
devtmpfs 1.9G 96K 1.9G 1% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
コンテナにログインし、マウントしているボリュームに2Gのファイルを作成します。
$ docker exec -it 706e24a04caa /bin/bash
root@706e24a04caa:/# dd if=/dev/zero of=/var/lib/mysql/test.out bs=1024 count=2000000
root@706e24a04caa:/# ls -lh /var/lib/mysql/test.out
-rw-r--r-- 1 root root 2.0G Apr 25 04:47 /var/lib/mysql/test.out
ログアウトして、dfを実行してみます。
[ec2-user@ip-172-31-49-18 ~]$ df -h
ファイルシス サイズ 使用 残り 使用% マウント位置
/dev/xvda1 7.8G 3.6G 4.2G 47% /
devtmpfs 1.9G 96K 1.9G 1% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/xvda1
が増えています。
ではDocker用のボリューム /dev/xvdcz
はどんな感じで使われているのでしょうか?
ここに詳しく書いてました。
http://enakai00.hatenablog.com/entry/20140420/1397981156
ホストOSからはこんな感じで見えています。
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda 202:0 0 8G 0 disk
└─xvda1 202:1 0 8G 0 part /
xvdcz 202:26368 0 50G 0 disk
└─xvdcz1 202:26369 0 50G 0 part
├─docker-docker--pool_tmeta 253:0 0 52M 0 lvm
│ └─docker-docker--pool 253:2 0 49.5G 0 lvm
│ ├─docker-202:1-263192-5c6d48e2f8751428fe02afdadbd0cea776f6019d7ea6b84b3313a66d0c1f8ed7 253:3 0 10G 0 dm
│ ├─docker-202:1-263192-eca78b256bf5721af414556f0ab42f4436e5ddd2dfb060da1f0ccf843cdbe11a 253:4 0 10G 0 dm
│ ├─docker-202:1-263192-035491c621338eac035f0a3ee3894dc7c02c0f2989a33bce5e4628226edb1f10 253:5 0 10G 0 dm
│ ├─docker-202:1-263192-d27d60081d632b3cc0e5b7c7213f40b4eec77d445d0c445abdf69efc83535d54 253:6 0 10G 0 dm
│ └─docker-202:1-263192-60b1cb416a8ced69c0f6f5c71b842298427dfa406dd7ed6f5f44a56dc3d5f78f 253:7 0 10G 0 dm
└─docker-docker--pool_tdata 253:1 0 49.5G 0 lvm
└─docker-docker--pool 253:2 0 49.5G 0 lvm
├─docker-202:1-263192-5c6d48e2f8751428fe02afdadbd0cea776f6019d7ea6b84b3313a66d0c1f8ed7 253:3 0 10G 0 dm
├─docker-202:1-263192-eca78b256bf5721af414556f0ab42f4436e5ddd2dfb060da1f0ccf843cdbe11a 253:4 0 10G 0 dm
├─docker-202:1-263192-035491c621338eac035f0a3ee3894dc7c02c0f2989a33bce5e4628226edb1f10 253:5 0 10G 0 dm
├─docker-202:1-263192-d27d60081d632b3cc0e5b7c7213f40b4eec77d445d0c445abdf69efc83535d54 253:6 0 10G 0 dm
└─docker-202:1-263192-60b1cb416a8ced69c0f6f5c71b842298427dfa406dd7ed6f5f44a56dc3d5f78f 253:7 0 10G 0 dm
まとめ
ECSで永続化データ用のボリュームを使う場合は、Rootボリュームをあらかじめ大きくしておくか、別ボリュームをアタッチしてマウントしとく必要があるようです。