22
Docker + Checkpoint/Restore Yuto Kawamura(kawamuray)

Docker + Checkpoint/Restore

Embed Size (px)

Citation preview

Page 1: Docker + Checkpoint/Restore

Docker + Checkpoint/RestoreYuto Kawamura(kawamuray)

Page 2: Docker + Checkpoint/Restore

● Yuto Kawamura(kawamuray)● 東京工科大学修士過程2年でした● Docker(Container)を用いた効率的なリソーススケジューリングについて研

究していました● http://cloud.watch.impress.co.jp/docs/case/20150224_689058.html

About me

Page 3: Docker + Checkpoint/Restore

● 修士でやっていた研究の一部を紹介します.● 一言で言うと,Checkpoint/Restore(CRIU)を用いてコンテナの起動を高

速化するという話です.

Today’s topic

Page 4: Docker + Checkpoint/Restore

● Using this tool, you can freeze a running application (or part of it) and checkpoint it to a hard drive as a collection of files. You can then use the files to restore and run the application from the point it was frozen at.

● http://criu.org/● (ほんとは全然違うけど)VMのスナップショットみたい

な動作イメージ

Checkpoint/Restore

Page 5: Docker + Checkpoint/Restore

Checkpoint/Restore

fdinfo-2.imgfifo.imgfilelocks.imgifaddr-8.imginetsk.imginotify.imgmm-1.imgmountpoints-11.imgnetdev-8.imgcgroup.img

Running environment

Checkpoint Image

Proc1

Proc2

Proc3

criu dump

criu restore

Page 6: Docker + Checkpoint/Restore

● Startup acceleration● Live migration

○ LXCでは複数の実装例http://www.slideshare.net/kawamuray/lxc-onganeti

○ 完全なLive migrationではない■ わずかなダウンタイム

● http://criu.org/Usage_scenarios

Checkpoint/Restoreの使い道

Page 7: Docker + Checkpoint/Restore

CRIUを使う目的

Page 8: Docker + Checkpoint/Restore

これ

Page 9: Docker + Checkpoint/Restore

● n台のサーバで構成されるPaaSクラスタのサービスキャパシティを最大化したい

● キャパシティを増やしたいならサーバ増やせば良いのでは?○ 金がない

● 稼働率の低いインスタンスはすぐ殺す● サービスの負荷が上がったときはものすごくオンデマンドにリソースを増

やす● inetd

リソース効率の最大化

Page 10: Docker + Checkpoint/Restore

● アプリケーションによっては起動がとても遅い○ Java(JVM)アプリは顕著(そして多い)○ アプリケーション(コンテナ)の中身に関わらず(外部から)起動を高速

化したい

(色々ある)問題点(の一つ)

Page 11: Docker + Checkpoint/Restore

Application startup time problem

Initialization Serving

Initialization Serving

Initialization Serving

Instance1

Instance2

Instance3

Overhead x Number of created instances

e.g, Tomcat8

Real time 3.715386 s

CPU time(according to cgroups) 17.13 ms

Page 12: Docker + Checkpoint/Restore

Solution

Initialization Serving

Serving

Serving

Instance1

Instance2

Instance3

Checkpoint image

Page 13: Docker + Checkpoint/Restore

● アプリケーションの起動が完了したタイミングで作成する必要がある● どうやって判定する?

○ TCPソケットを経由してサービス提供するアプリを想定○ 指定portにlistenを始めた時点で起動+初期化が終わったということ

にしよう● 他の方法

○ アプリケーション側から通知してもらうなど○ 計測対象にしたいくつかのサーブレットアプリ(tomcat)は↑の方法で

十分だった

Create Checkpoint Image

Page 14: Docker + Checkpoint/Restore

● Checkpoint/Restore機能をDocker daemonに実装した○ docker checkpoint CONTAINER_ID○ docker restore CONTAINER_ID CHECKPOINT_ID

● 外部からcriuコマンドを実行するのはだめ?○ CRIU_REPOS/contrib/docker_cr.sh

■ docker daemonのchild processとしてリストアできない■ docker daemonが復元したコンテナを認識できない■ restoreしたcontainerが迷子になります

● Patches are available at https://github.com/kawamuray/docker/commits/master

Native support of CR on Docker

Page 15: Docker + Checkpoint/Restore

Docker run process

Page 16: Docker + Checkpoint/Restore

Docker restore process

Page 17: Docker + Checkpoint/Restore

Implementation

Docker daemon

Checkpoint Image

Containertype ContainerCheckpoint struct { ID string ImageID string NetworkSettings *NetworkSettings CreatedAt time.Time}

Checkpoint Image/var/lib/docker/containers/{ID}

/checkpoints/{CHECKPOINT_ID}

Image(AUFS layer)

Checkpoint

criu dump

Containercriu restore

Restore

Page 18: Docker + Checkpoint/Restore

DEMO

Page 19: Docker + Checkpoint/Restore

● 一つのチェックポイントから複数のコンテナをリストアするために,Checkpoint imageを書き換える

Patched checkpoint image

Patch

eth0 IP address 192.168.123.111

eth0 MAC address 52:54:00:4a:0b:6e

Cgroups hierarchy /system.slice/fuga

eth0 IP address 192.168.123.110

eth0 MAC address 52:54:00:4a:0b:6d

Cgroups hierarchy /system.slice/hoge

ContainerA

Restore

ContainerB

Restore

No conflicts

Page 20: Docker + Checkpoint/Restore

Startup time benchmark

HDD SSDTomcat8

Page 21: Docker + Checkpoint/Restore

● Patches from Saied Kazemi○ Googler○ CRIU contributor○ https://speakerdeck.com/saied/experimental-docker-checkpoint-and-

restore-with-criu○ https://github.com/filbranden/docker/pull/1○ https://github.com/SaiedKazemi/libcontainer-criu/pull/1

Similar works

Page 22: Docker + Checkpoint/Restore

● Checkpoint/Restoreは,アプリケーションコンテナの起動高速化に使えます.

● Checkpoint/Restoreの注目度と可能性は無限大です.● CoreOS最高!

まとめ