新手快速入門Docker最新版管理工具
本文是數人云9月22日線上微信群分享的文章實錄。數人云容器管理面板Crane開源以來,很多小夥伴對它還不是非常瞭解,數人云工程師金鑫從Crane技術背景、環境準備和使用步驟等方面為大家做了詳細的介紹,並整理大家常見的問題逐一進行了解答。
金鑫
數人云工程師
引言
Docker1.12釋出已有一段時間了,像Swarm mode模式、應用編排、滾動更新、健康檢查、服務發現等等、這些功能給開發者們帶來了更多驚喜,之前在安裝 Docker之外,還要安裝其它的元件來配合完成,比如Mesos-Marathon,比如K8S,現在Docker決定大包大攬,將這些功能整合到了一起。安裝Docker1.12以後,通過命令列,幾條命令,Swarm叢集,overlay網路,服務發現等均可建立完成。
這裡再提一下Docker1.12的服務發現和負載均衡是結合在一起實現的,有兩種方式,一種是DNS輪詢,一種是IPVS;IPVS這種方式,Docker為每個服務都分配來一個虛擬ip,這個ip是為服務做保留,不是對外提供服務。在建立服務時,通過entrypoint-mode的引數來確定是基於dnsrr(輪詢)還是VIP(IPVS)的服務發現方式。
考慮到基於DNS的方式做負載均衡,會有時效性的問題,DNS生效的時間導致不能實時反映服務的變化情況。會有服務發現不準確的情況。而且,IPVS支援udp協議。稍有遺憾的是,不支援會話保持,我們在Crane釋出的服務預設的服務發現的方式是後一種,IPVS的方式也是Docker1.12預設的服務發現方式。
Docker1.12的功能很誘人,但是在使用上來講,一旦服務數量增加,單純靠命令列管理,畢竟不是很方便,所以,數人云開發了這樣一款工具,並且把它開源出來,供大家更方便的使用新版 Docker帶來的新特性。
Crane!!!
數人云容器管理面板Crane安裝使用指南
背景
Crane作為國內第一款基於SwarmKit的容器管理工具,開源之後,小夥伴們試用熱情高漲,也有小夥伴表示,體驗時會在使用的某一處卡住,無法進行進一步的體驗。這裡針對大家反饋比較多的使用問題,做一點說明,避免環境原因,影響到小夥伴們的Crane體驗。
環境準備
目前推薦的主機系統是CentOS7或者Ubuntu14.04,及以上版本,雖然Docker新版本已經可以在Mac上安裝,考慮不是主流,該版本未在Mac下的測試。
1、請確保Docker安裝版本 >=1.12, 並確保Docker正常執行.(如何安裝和配置Docker請參考https://docs.docker.com/engine/installation/)
按照如上說明,安裝的Docker版本因該是1.12.1。service docker restart,啟動Docker。
2、請確保docker-compose已經正確安裝.(如何安裝docker-compose請參考https://docs.docker.com/compose/install/)
注意,這裡安裝後的docker-compose版本是1.8.0,如果您已經按照過較早版本的docker-compose,需要按照上述的地址更新到新版本,因為程式啟動的語法是按照docker-compose的2.0語法。版本較早會影響程式的安裝。
3、請確保主機的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開機啟動
4、確保iptables對Docker沒有規則限制,通常來講,系統預設即可,如果您的環境內基於iptables的防火牆限制,建議刪除。因為Swarm mode的服務發現和負載均衡均利用到iptables的轉發規則。避免使用中遇到限制,需要將iptables的限制 規則清空。在之前公眾號的《數人云工程師手記 | 基於 Docker 1.12 Swarm 的叢集管理開發實踐》對Swarm的服務發現及負載均衡有詳細的介紹。有想深入瞭解的小夥伴可以在微信公眾號內查詢到該文章。
5、請確保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
6、確保開啟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 21812888 tcp 28883888 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 21822888 tcp 28893888 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 21832888 tcp 28903888 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/crane/content)