Flocker初探(2)

來源:互聯網
上載者:User

標籤:flocker   docker   plugin   volume   

..
聲明:
本部落格歡迎轉寄,但請保留原作者資訊!
部落格地址:http://blog.csdn.net/halcyonbaby
新浪微博:@尋覓神跡

內容系本人學習、研究和總結,如有雷同,實屬榮幸!

====================================

Docker的Plugin機制

Flocker目前採用了Docker的plugin機制,從而與Docker對接。這裡先總結下Docker的Plugin
機制。
Docker1.7開始以experiment特性的方式提供了volume/network外掛程式機制。
volume外掛程式機制,主要便於第三方的儲存管理能夠與docker對接,從而為有狀態的應用提供
(比如database、key-value store)資料卷。

使用者使用方法如下:

$ docker run -v volume_name:/data --volume-driver=flocker your_stateful_container

Driver需要實現以下介面:

/VolumeDriver.Create/VolumeDriver.Remove/VolumeDriver.Mount/VolumeDriver.Path/VolumeDriver.Unmount

Plugin還需要一個handshake API。在Docker daemon初次使用時,會通過該API啟用Plugin。

/Plugin.Activate

Plugin發現:
Plugin目錄下會有如下三種檔案:

.sock  unix socket file.spec  文字檔,包含一個URL,例如“unix:///other.sock".json  文字檔,包含一個json定義。

.sock檔案通常在/run/docker/plugins下放置,spec、json檔案則在/etc/docker/plugins或者
/usr/lib/docker/plugins下。
Docker會先嘗試在/run/docker/plugins下尋找sock檔案,如果找不到則會在/etd/docker/plugins
或者/usr/lib/docker/plugins下找spec、json檔案。

json檔案的例子:

{  "Name": "plugin-example",  "Addr": "https://example.com/docker/plugin",  "TLSConfig": {    "InsecureSkipVerify": false,    "CAFile": "/usr/shared/docker/certs/example-ca.pem",    "CertFile": "/usr/shared/docker/certs/example-cert.pem",    "KeyFile": "/usr/shared/docker/certs/example-key.pem",  }}

參考:
https://github.com/docker/docker/tree/master/docs/extend

Flocker的Docker plugin實現


是與容器配合的Flocker架構。Flocker volume manager由Control service和Flocker agent組成,由Docker觸發進行控制。

Docker使用者可以這樣使用:

docker run -v name:path --volume-driver=flocker

Flocker的外掛程式也很簡單,總共不過200行。
https://github.com/ClusterHQ/flocker-docker-plugin/blob/master/flockerdockerplugin

def getAdapter():    root = resource.Resource()    root.putChild("Plugin.Activate", HandshakeResource())    root.putChild("VolumeDriver.Create", CreateResource())    root.putChild("VolumeDriver.Remove", RemoveResource())    root.putChild("VolumeDriver.Path", PathResource())    root.putChild("VolumeDriver.Mount", MountResource())    root.putChild("VolumeDriver.Unmount", UnmountResource())    site = server.Site(root)    return site
其他

看完之後,感覺nova-docker未來也可以考慮使用類似於Flocker的方式與Cinder對接。
從而為Docker提供豐富的儲存能力。
唯一欠缺的是,目前Docker不支援運行時掛卷、卸卷操作。

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Flocker初探(2)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.