數人云工程師手記 | 新手快速入門Docker最新版管理工具

本文是數人云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安裝使用指南

背景

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使用

安裝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...

問題答疑:

  1. Q:應用商店裏怎麼添加第三方應用?第三方應用須要怎麼去作?
    A:以前咱們的內測版本,自行設定編排模版的接口沒有開放,如今已經增長,有兩種方式,一種是在鏡像--新建項目模版處,直接建立項目模版。項目名稱爲英文或數字。由於這個模版事基於bandle來發布,須要準備符合格式dab文件項目描述,圖片不是必要選項。

圖片描述
另外一種方式:經過已經發布的服務,直接轉換爲模版。
點擊建立好的項目名稱,右上角會看到添加至模版,點擊該按鈕,操做與上一方式相似,dab文件默認爲現有項目的設置。
圖片描述

  1. Q:容器資源配置時,不能手動輸入大小, 鼠標滑鼠很麻煩。
    A:這個設計瀏覽器規約,怪咱們以前沒有說明,咱們建議使用瀏覽器是Chrome和Firefox,優先建議使用新版本Chrome。

  2. Q:拉取rolex_db鏡像時,響應較慢。
    A:以前的鏡像倉庫出現了一點點問題,現已經修復。

  3. Q:DAB方式很超前很強大。只是配置文件有學習曲線,若是作成可視化界面能幫助用戶生成DAB配置文件就行了。
    A:這個功能其實已經作了的,多是方式不太直觀,咱們能夠在建立好服務以後,將json文件導出,這樣就會生出一個DAB的文件,默認的導出會帶有參數的空置,若是您和我同樣,有點點強迫症,能夠修改文件,刪除多餘的空值信息,另外,推薦一個json.cn的網站,能夠將混在一塊兒的json文件格式化。

  4. Q:可否增長持續集成功能。gitlab/github項目代碼變動觸發本系統的鉤子,構建鏡像,發佈鏡像,更新應用。
    A:持續集成相對於docker現有功能來說,算是一個比較重的配套功能,目前考慮到方案選型和整合會帶來更大的複雜性,暫時不會加到這個項目中。不過更新功能已經集成。能夠參考持續部署功能。

  5. 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:測試環境內沒有復現這個問題,須要提供更多的參考信息。

  6. Q:單節點部署完畢後嘗試登陸,提示"服務忙,請稍後重試"。
    A:建議檢查起的容器狀態,若是方便,能夠微信羣發消息,遠程查看。

咱們列舉了幾個比較典型的反饋問題,若是您的反饋沒有及時獲得回覆,能夠在微信羣裏交流或者在GitHub上提交issue,反饋的處理優先級較高。

改進建議

咱們的Crane開源以後,許多熱情的小夥伴在試用以後,也給咱們提了許多很好的功能建議,咱們也內部討論準備在後續的版本中將部分功能整合到Crane之中。感謝全部支持Crane同窗的建議!

易用性

  • 好比有同窗建議在應用部署完成以後經過一個link能夠直接打開應用的界面,這個功能目前的位置不明顯,後續咱們會增強操做便捷性的改進。

  • 還有你們說起的安裝建議,按照如上的環境準備說明操做以後,部署會減小重複的操做。若是直接修改本機配置顯得又點霸道。咱們考慮仍是將修改的內容在環境準備時說明。

  • 部署時按照應用嚮導建立時,選擇相應參數可是未填寫值,若是剛好點了摺疊,應用沒法部署,提示不夠明顯,這部分的用戶提醒,咱們正在改進。

高可用

目前的部署方式爲單點,在咱們的roadmap中,未來會支持高可用的多節點部署。
更多系統的兼容,好比在Mac上部署。

自動擴縮

自動伸縮策略功能已經在咱們的roadmap中,方案正在論證,若是有好的思路能夠給咱們提建議。

SwarmKit的一些不完美

做爲Docker的大版本更新,1.12帶來了大幅的功能更新,但新功能總有那麼一些不完美,建議現用Docker的小夥伴酌情更新。

  • 原有的docker-compose文件須要轉換爲bundle格式,若是有以前應用使用了docker-compose,考慮升級時,須要一點轉換的工做量, 另外bundle並不能徹底支持全部的參數。

  • 不能支持host模式,雖然能夠作到一主機一個任務,可是沒法使用主機網絡,若是您的應用須要暴露多個端口,須要一一映射。

  • 網絡性能,overlay的網絡性能損耗較多,也是須要考量的一個點

  • 服務發現還不是很完美,偶有不能正常發現的bug。

結語

歡迎更多的小夥伴體驗、支持數人云的開源項目,開源項目地址:https://github.com/Dataman-Cl...。 目前建議的使用場景爲開發測試環境。

相關文章
相關標籤/搜索