摘要:在之前公眾號的數人云工程師手記基于的集群管理開發實踐對的服務發現及負載均衡有詳細的介紹。服務名稱為服務命名,必須為英文或數字。
引言本文是數人云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下的測試。
請確保Docker安裝版本 >=1.12, 并確保Docker正常運行.(如何安裝和配置Docker請參考https://docs.docker.com/engin...
按照如上說明,安裝的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中,方案正在論證,如果有好的思路可以給我們提建議。
SwarmKit的一些不完美作為Docker的大版本更新,1.12帶來了大幅的功能更新,但新功能總有那么一些不完美,建議現用Docker的小伙伴酌情更新。
原有的docker-compose文件需要轉換為bundle格式,如果有之前應用使用了docker-compose,考慮升級時,需要一點轉換的工作量, 另外bundle并不能完全支持所有的參數。
不能支持host模式,雖然可以做到一主機一個任務,但是無法使用主機網絡,如果您的應用需要暴露多個端口,需要一一映射。
網絡性能,overlay的網絡性能損耗較多,也是需要考量的一個點
服務發現還不是很完美,偶有不能正常發現的bug。
結語歡迎更多的小伙伴體驗、支持數人云的開源項目,開源項目地址:https://github.com/Dataman-Cl...。 目前建議的使用場景為開發測試環境。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26709.html
摘要:今天小數給大家帶來的是數人云工程師金燁的分享,有關于自動快速部署服務相關組件的一些實踐。當與相遇,雙劍合璧,一切變得如此簡單有趣。通過將服務注冊到來做健康檢查。 今天小數給大家帶來的是數人云工程師金燁的分享,有關于自動快速部署DCOS服務相關組件的一些實踐。當Ansible與Docker相遇,雙劍合璧,一切變得如此簡單有趣。 本次分享將包括以下內容: 云平臺部署使用的服務、組件 Do...
摘要:容器內文件日志平臺支持的文件存儲是,避免了許多復雜環境的處理。以上是數人云在實踐容器日志系統過程中遇到的問題,更高層次的應用包括容器日志分析等,還有待繼續挖掘和填坑,歡迎大家提出建議,一起交流。 業務平臺每天產生大量日志數據,為了實現數據分析,需要將生產服務器上的所有日志收集后進行大數據分析處理,Docker提供了日志驅動,然而并不能滿足不同場景需求,本次將結合實例分享日志采集、存儲以...
摘要:指導員明伯伯數人云工程師手記相關閱讀基于的集群管理開發實踐服務發現,負載均衡和 這是一個容器信息臃腫的時代。 Docker 鯨魚鼓著圓圓的肚子在西雅圖開了一場名為 DockerCon2016 的大會,全球 4000 人參加, 8 大看點留下對容器生態的更多暢想。 數人云一直專注于以企業級的 Mesos +容器技術棧,出于對容器新技術的熱愛,我們在社區版的工具上小試牛刀,距 Docker...
摘要:改進了安裝腳本,新的安裝腳本將會檢查集群的狀態,是否開啟。它根據的原生編排功能,采用輕量化架構,幫助開發者快速搭建環境,體驗的各種最新功能。 馬上就要投身到國慶節的美好假期中,小伙伴們是不是已經迫不及待了呢?為了歡度國慶, 小數這里也有一個好消息要告訴大家——我們的Cranev1.0.5 release 啦! 自從9月12日宣布開源以來,Crane受到很多開發者的關注,也收獲了很...
閱讀 785·2023-04-26 00:30
閱讀 2689·2021-11-23 09:51
閱讀 1045·2021-11-02 14:38
閱讀 2560·2021-09-07 10:23
閱讀 2243·2021-08-21 14:09
閱讀 1362·2019-08-30 10:57
閱讀 1603·2019-08-29 11:20
閱讀 1149·2019-08-26 13:53