Docker與Ceph集成

cmgk6331 8年前發布 | 50K 次閱讀 Docker

來自: http://chendihao.cn/post/use-docker-with-ceph/


Docker與Ceph集成

介紹

Ceph是流行的分布式存儲,同時提供塊設備、對象存儲和文件系統三種接口,能為物理機、虛擬機甚至是容器提供可靠的持久存儲。

Docker通過volume driver的方式可以對接Ceph,從而實現容器持久化數據卷的功能,也能輕易實現容器的遷移。

現狀

Docker抽象出volume driver后,社區立即提Issue希望實現Ceph的plugin,詳見地址 https://github.com/docker/docker/issues/10661 。而volume API實現的PR地址是 https://github.com/docker/docker/issues/10661

這個Issue很快就被close了,因為開源社區已經實現了功能代碼,在項目volplugin中,項目地址 https://github.com/contiv/volplugin 。但這個項目是master/slave架構,還有單獨的命令行工具來發送RESTful請求,還依賴etcd,顯然不是輕量級的首選方案。除了這個項目,還有 https://github.com/AcalephStorage/docker-volume-ceph-rbdhttps://github.com/yp-engineering/rbd-docker-plugin 實現了類似的功能,前者由于缺乏文檔沒有測試了,后者則有一篇比較詳細的體驗文檔 https://ceph.com/planet/getting-started-with-the-docker-rbd-volume-plugin/

其實Kubernetes也可以直接使用RBD持久卷,實現原理類似,這里有參考文章 https://ceph.com/planet/bring-persistent-storage-for-your-containers-with-krbd-on-kubernetes/

如果想手動在容器中map一個RBD image,通過已有的命令就可以實現,運行容器時需要提前把/dev/sys掛載到容器內,詳細教程可參考Ceph committer的文章 http://www.sebastien-han.fr/blog/2015/06/26/map-a-rbd-device-inside-a-docker-container/ 。而volume plugin只是通過API執行類似的操作,如果無須自動化也可以手動管理持久卷。

持久化容器

為了讓容器后端使用持久化的分布式存儲,可以參考這個文檔使用修改過的Docker http://hustcat.github.io/run-docker-on-ceph/ 。這個Patch是在這個PR上提的 https://github.com/docker/docker/pull/14800 ,最后是希望通過這個PR的合并來實現 https://github.com/docker/docker/pull/13777 ,目前Docker官方仍不支持直接使用RBD后端。

要實現持久化容器通過Kernel RBD直接mount到特定目錄也是可以實現了,我們能直接修改創建容器的腳本,這里以LXC容器為例 http://cephnotes.ksperis.com/blog/2014/11/17/ceph-rbd-with-lxc-containers 。當然在Docker官方支持之前我們也不建議手動把容器rootfs掛載到RBD上。

推薦

最后忍不住推薦在容器和分布式存儲都有深入研究的騰訊工程師和他的博客 http://hustcat.github.io

 本文由用戶 cmgk6331 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!