本文是數人云9月22日線上微信羣分享的文章實錄。數人云容器管理面板Crane開源以來,不少小夥伴對它還不是很是瞭解,數人云工程師金鑫從Crane技術背景、環境準備和使用步驟等方面爲你們作了詳細的介紹,並整理你們常見的問題逐一進行了解答。node
Docker1.12發佈已有一段時間了,像Swarm mode模式、應用編排、滾動更新、健康檢查、服務發現等等、這些功能給開發者們帶來了更多驚喜,以前在安裝 Docker以外,還要安裝其它的組件來配合完成,好比Mesos-Marathon,好比K8S,如今Docker決定大包大攬,將這些功能整合到了一塊兒。安裝Docker1.12之後,經過命令行,幾條命令,Swarm集羣,overlay網絡,服務發現等都可建立完成。linux
這裏再提一下Docker1.12的服務發現和負載均衡是結合在一塊兒實現的,有兩種方式,一種是DNS輪詢,一種是IPVS;IPVS這種方式,Docker爲每一個服務都分配來一個虛擬ip,這個ip是爲服務作保留,不是對外提供服務。在建立服務時,經過entrypoint-mode的參數來肯定是基於dnsrr(輪詢)仍是VIP(IPVS)的服務發現方式。git
考慮到基於DNS的方式作負載均衡,會有時效性的問題,DNS生效的時間致使不能實時反映服務的變化狀況。會有服務發現不許確的狀況。並且,IPVS支持udp協議。稍有遺憾的是,不支持會話保持,咱們在Crane發佈的服務默認的服務發現的方式是後一種,IPVS的方式也是Docker1.12默認的服務發現方式。github
Docker1.12的功能很誘人,可是在使用上來說,一旦服務數量增長,單純靠命令行管理,畢竟不是很方便,因此,數人云開發了這樣一款工具,而且把它開源出來,供你們更方便的使用新版 Docker帶來的新特性。docker
Crane!!!json
Crane做爲國內第一款基於SwarmKit的容器管理工具,開源以後,小夥伴們試用熱情高漲,也有小夥伴表示,體驗時會在使用的某一處卡住,沒法進行進一步的體驗。這裏針對你們反饋比較多的使用問題,作一點說明,避免環境緣由,影響到小夥伴們的Crane體驗。ubuntu
目前推薦的主機系統是CentOS7或者Ubuntu14.04,及以上版本,雖然Docker新版本已經能夠在Mac上安裝,考慮不是主流,該版本未在Mac下的測試。vim
請確保Docker安裝版本 >=1.12, 並確保Docker正常運行.(如何安裝和配置Docker請參考https://docs.docker.com/engin...centos
按照如上說明,安裝的Docker版本因該是1.12.1。service docker restart,啓動Docker。瀏覽器
請確保docker-compose已經正確安裝.(如何安裝docker-compose請參考https://docs.docker.com/compo...
注意,這裏安裝後的docker-compose版本是1.8.0,若是您已經按照過較早版本的docker-compose,須要按照上述的地址更新到新版本,由於程序啓動的語法是按照docker-compose的2.0語法。版本較早會影響程序的安裝。
請確保主機的selinux和firewalld爲關閉狀態,若是不關閉,會影響Docker的一些功能使用。
關閉selinux 方法:vim /etc/sysconfig/selinux 設置 SELINUX=disabled 並重啓系統
關閉firewalld方法:CentOS 7.0默認使用的是firewall做爲防火牆,若是是Ubuntu,能夠跳過這步。
systemctl status firewalld.service#查看firewall狀態 systemctl start firewalld.service#啓動firewall systemctl stop firewalld.service#中止firewall systemctl disable firewalld.service#禁止firewall開機啓動
確保iptables對Docker沒有規則限制,一般來說,系統默認便可,若是您的環境內基於iptables的防火牆限制,建議刪除。由於Swarm mode的服務發現和負載均衡均利用到iptables的轉發規則。避免使用中遇到限制,須要將iptables的限制 規則清空。在以前公衆號的《數人云工程師手記 | 基於 Docker 1.12 Swarm 的集羣管理開發實踐》對Swarm的服務發現及負載均衡有詳細的介紹。有想深刻了解的小夥伴能夠在微信公衆號內查找到該文章。
請確保NTP服務開啓,收到的反饋比較多的是安裝腳本執行過程當中提示:
NTP is unsynchronised, Please confirm your ntp status before continue.
解決方式:以CentOS7爲例,安裝NTP服務,
yum install -y ntp && systemctl start ntpd && systemctl enable ntpd && systemctl disable chronyd ntpdate time.nist.gov
ntpsat 查看,顯示以下正常,
synchronised to NTP server (59.46.44.253) at stratum 3 time correct to within 62 ms polling server every 1024 s
若仍出現unsynchronised字樣,須要重啓ntpd服務
service ntpd restart
確保開啓Docker的TCP鏈接端口。
centos:
vim /lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
systemctl daemon-reload && service docker restart
ubuntu:
vim /etc/default/docker
OCKER_OPTS="-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock"
service docker restart
2375爲Docker默認的tcp通信端口,稍後在使用主機鏈接時須要用到。
至此,基礎環境準備完畢!
安裝Crane的主機默認會做爲集羣的管理節點,能夠直接發佈服務。
做爲剛開始接觸1.12的同窗能夠先按嚮導模式來發布,這樣更便於瞭解新增的Docker運行參數,選擇嚮導模式建立。這裏對參數作一下介紹。而後咱們發佈一個ZooKeeper的集羣做爲演示的demo。
服務名稱: 爲服務命名,必須爲英文或數字。
鏡像名稱: 服務使用的鏡像,主機已存在的鏡像或者爲集羣能夠pull的鏡像。
服務模式: 設定服務模式類型,分爲固定實例數和一節點一任務模式。
選擇網絡: 服務使用的網絡,須要在網絡裏預先建立。
認證標識: 預先設置的倉庫認證信息,若是使用的鏡像倉庫須要登陸驗證,能夠預先在倉庫認證處設置登陸信息的用戶名、密碼,設置不一樣的標籤;此處選擇相應的認證標籤。
端口映射:創建宿主機的端口與容器端口的映射關係,支持TCP和UDP協議。
環境變量:設置容器啓動時的環境變量。
啓動參數:
容器工做目錄:容器內工做路徑,如設置/root,容器內工做路徑在/root,如需執行/root/test.sh,此處設置/root,命令行設置sh test.sh便可;
命令行:容器啓動的運行命令。須要說明的是,此處的命令行更至關於dockerfile中的entrypoint。
參數:爲命令行提供參數。
示例: 本地docker run命令爲:
docker run centos bash -c "while [ true ]; do echo 'this is a test'; sleep 10; done;"
命令行輸入
bash
參數輸入兩項
-c while [ true ]; do echo 'this is a test'; sleep 10; done;
標籤: 能夠分別爲服務和服務添加標籤。
資源限制:設定服務每一個容器的限制資源及預留資源。
容錯策略:針對容器健康狀態設置的重啓策略,分別爲退出、失敗,退出指只要容器退出了,重啓策略即生效,失敗指容器非正常退出,重啓策略才生效,若不設置重啓策略,能夠選擇從不。
評估間隔:設定的時間用來評估重啓政策。
重啓間隔:容器重啓的時間間隔。
嘗試次數:嘗試次數後,再也不重啓。
更新策略:服務更新時執行的策略
間隔:更新間隔,一般指更新的並行數<現有實例數;二次更新時的間隔時間。
並行數:一次更新的最大實例數
失敗後策略,若是更新失敗執行的策略,分繼續嘗試和當即中止兩種。
調度策略:指服務發佈的容器的調度分佈,能夠將服務的容器發佈到指定的node* 節點或者指定label的節點,label須要預先編輯,label爲key:value格式,
限定label輸入方式node.labels.yourkey:yourvalue
限定節點id輸入方式node.id:yournodeid
限定hostname的輸入方式node.hostname:yourhostname
文件掛載:掛載宿主機路徑到容器內,能夠選擇該路徑到屬性,如只讀,讀寫。source爲主機路徑,taget爲容器內路徑。
發佈ZooKeeper集羣。由於表單較長,這裏摘取了主要參數。
建立項目:zookeeper
服務1 node1
鏡像:zookeeper
網絡默認選擇ingress
端口映射
`2181 tcp 2181
2888 tcp 2888
3888 tcp 3888 `
環境變量:
ZOO_SERVERS=server.1=node1:2888:2888 server.2=node2:2889:3889 server.3=node3:2890:3890
ZOOMYID=1 點擊繼續添加
服務2 node2
鏡像:zookeeper
網絡默認選擇ingress
端口映射
2181 tcp 2182
2888 tcp 2889
3888 tcp 3889
環境變量:
ZOO_SERVERS=server.1=node1:2888:2888 server.2=node2:2889:3889 server.3=node3:2890:3890
ZOOMYID=2 點擊繼續添加
服務3 node3
鏡像:zookeeper
網絡默認選擇 ingress
端口映射
2181 tcp 2183
2888 tcp 2890
3888 tcp 3890
環境變量:
ZOO_SERVERS=server.1=node1:2888:2888 server.2=node2:2889:3889 * server.3=node3:2890:3890
ZOOMYID=3
點擊部署,等待鏡像拉取成功後,(點擊容器id--終端)執行./bin/zsServer.sh status 查看該容器的節點屬性leaderorfollow
發佈好的服務能夠直接保存爲模版。保存好的模版能夠經過快捷建立,直接使用。也能夠經過bundle的文件來快速部署應用。
點擊項目-建立項目-DAB建立-輸入項目名稱-試試看中選擇wordpress-部署。(也能夠直接讀取已有的DAB文件來發布。)
鏡像拉取會有一小段時間,等待服務運行,訪問主機的8000的端口,便可訪問剛剛建立的應用。
Crane提供更直觀的方式建立網絡、添加主機、管理已發佈的服務。詳細的操做手冊能夠參考咱們的線上的使用手冊(https://dataman.gitbooks.io/c...
Q:應用商店裏怎麼添加第三方應用?第三方應用須要怎麼去作?
A:以前咱們的內測版本,自行設定編排模版的接口沒有開放,如今已經增長,有兩種方式,一種是在鏡像--新建項目模版處,直接建立項目模版。項目名稱爲英文或數字。由於這個模版事基於bandle來發布,須要準備符合格式dab文件項目描述,圖片不是必要選項。
另外一種方式:經過已經發布的服務,直接轉換爲模版。
點擊建立好的項目名稱,右上角會看到添加至模版
,點擊該按鈕,操做與上一方式相似,dab文件默認爲現有項目的設置。
Q:容器資源配置時,不能手動輸入大小, 鼠標滑鼠很麻煩。
A:這個設計瀏覽器規約,怪咱們以前沒有說明,咱們建議使用瀏覽器是Chrome和Firefox,優先建議使用新版本Chrome。
Q:拉取rolex_db鏡像時,響應較慢。
A:以前的鏡像倉庫出現了一點點問題,現已經修復。
Q:DAB方式很超前很強大。只是配置文件有學習曲線,若是作成可視化界面能幫助用戶生成DAB配置文件就行了。
A:這個功能其實已經作了的,多是方式不太直觀,咱們能夠在建立好服務以後,將json文件導出,這樣就會生出一個DAB的文件,默認的導出會帶有參數的空置,若是您和我同樣,有點點強迫症,能夠修改文件,刪除多餘的空值信息,另外,推薦一個json.cn的網站,能夠將混在一塊兒的json文件格式化。
Q:可否增長持續集成功能。gitlab/github項目代碼變動觸發本系統的鉤子,構建鏡像,發佈鏡像,更新應用。
A:持續集成相對於docker現有功能來說,算是一個比較重的配套功能,目前考慮到方案選型和整合會帶來更大的複雜性,暫時不會加到這個項目中。不過更新功能已經集成。能夠參考持續部署功能。
Q:起初上傳鏡像時 docker login 172.18.24.69:5000/ -uadmin@admin.com -padminadmin 報錯 Error response from daemon: Get https://172.18.24.69:5000/v1/... http: server gave HTTP response to HTTPS client。
A:測試環境內沒有復現這個問題,須要提供更多的參考信息。
Q:單節點部署完畢後嘗試登陸,提示"服務忙,請稍後重試"。
A:建議檢查起的容器狀態,若是方便,能夠微信羣發消息,遠程查看。
咱們列舉了幾個比較典型的反饋問題,若是您的反饋沒有及時獲得回覆,能夠在微信羣裏交流或者在GitHub上提交issue,反饋的處理優先級較高。
咱們的Crane開源以後,許多熱情的小夥伴在試用以後,也給咱們提了許多很好的功能建議,咱們也內部討論準備在後續的版本中將部分功能整合到Crane之中。感謝全部支持Crane同窗的建議!
好比有同窗建議在應用部署完成以後經過一個link能夠直接打開應用的界面,這個功能目前的位置不明顯,後續咱們會增強操做便捷性的改進。
還有你們說起的安裝建議,按照如上的環境準備說明操做以後,部署會減小重複的操做。若是直接修改本機配置顯得又點霸道。咱們考慮仍是將修改的內容在環境準備時說明。
部署時按照應用嚮導建立時,選擇相應參數可是未填寫值,若是剛好點了摺疊,應用沒法部署,提示不夠明顯,這部分的用戶提醒,咱們正在改進。
目前的部署方式爲單點,在咱們的roadmap中,未來會支持高可用的多節點部署。
更多系統的兼容,好比在Mac上部署。
自動伸縮策略功能已經在咱們的roadmap中,方案正在論證,若是有好的思路能夠給咱們提建議。
做爲Docker的大版本更新,1.12帶來了大幅的功能更新,但新功能總有那麼一些不完美,建議現用Docker的小夥伴酌情更新。
原有的docker-compose文件須要轉換爲bundle格式,若是有以前應用使用了docker-compose,考慮升級時,須要一點轉換的工做量, 另外bundle並不能徹底支持全部的參數。
不能支持host模式,雖然能夠作到一主機一個任務,可是沒法使用主機網絡,若是您的應用須要暴露多個端口,須要一一映射。
網絡性能,overlay的網絡性能損耗較多,也是須要考量的一個點
服務發現還不是很完美,偶有不能正常發現的bug。
歡迎更多的小夥伴體驗、支持數人云的開源項目,開源項目地址:https://github.com/Dataman-Cl...。 目前建議的使用場景爲開發測試環境。