搭建企業私有Docker Registry實戰分享
實戰聊天運維ChatOps
什么是ChatOps
ChatOps這個概念最初是由Github團隊提出,簡單來說,是基于對話驅動的開發方式。實際做法是:把你的工具帶到您的溝通過程中,并使用一個聊天機器人編寫定制化的腳本,使團隊可以自動執行相應任務和協同工作,使運維工作更透明更高效。因此,實施ChatOps需要兩個重要組成部分:聊天室和機器人。聊天室也就是我們常說的團隊協作平臺,比較知名的有:
- Flowdock,知名團隊協作平臺,目前我們在使用它。
- Slack,國外著名的團隊協作平臺,界面美觀。
- HipChat,國外著名的團隊協作平臺,界面簡潔。
- Zulip,Dropbox旗下的group chat平臺,已開源。
- Teambition,國內知名的團隊協作工具,具有文檔管理功能。 </ul>
- lita,Ruby寫的robot。
- Errbot,Python寫的robot。 </ul>
- 把過去團隊成員在各自工具中輸入命令的這個黑匣子過程前端化、透明化了。團隊每個成員都能隨時了解其他成員的一舉一動,打造真正的無死角透明團隊。
- 非常有利于新人的培養。顯然,能夠直觀看到團隊的微觀運作,對于剛入職的新手來說,比任何培訓的效果都更好。 </ul>
- 通過Hubot監控Registry是否正常運行。主要使用了Sensu來做Registry的health check。一旦發現Registry沒有正常運行,hubot就會發送一條信息到flowdock里,使用@team來通知團隊。然后團隊的成員可以使 用hubot指令hubot fetch registry error cause,讓hubot幫我們調查并返回出錯的原因。根據出錯原因,再使用hubot指令進行應急處理。
- 通過Hubot定時發Registry運行情況到Flowdock Inbox里。通過Sensu作為服務監控,收集Registry本身一些運行數據,包括CPU,內存等,發送到Graphite,生成時序統計圖,發布到flowdock上。
- 通 過Hubot實時獲取Registry的使用情況。首先Registry進行了notification配置,Registry使用元信息會被發送到定制 的收集服務(Notification analysis service)中去。通過分析這些使用元信息,獲取不同Registry鏡像的pull/push數量,由Notification analysis service提供相應的聚合搜索API。調用這些API,可以獲取每小時、每天的Registry使用情況(json),將這些信息發送給相應的 GraphOps平臺,就能生成相應的圖像,發布到flowdock上。我們目前比較常用的指令,就是hubot graph me registry usage since 24 hours,hubot立刻會返回最近24小時內Registry的使用情況,包括pull/push的數量等。 </ul>
- 目前hubot對于我們的Registry的運維還比較基礎,將來我們希望通過增 強hubot的運維能力(添加自動化腳本),來提高Registry的負載能力。例如通過hubot監測到Registry運行負載劇增,然后使用 hubot實施auto scaling來保證Registry運行穩定。
- hubot可以作為連接和協同眾多獨立的微服務的一種橋梁, 擴展的便利性尤為重要,而目前手動編寫自定義的腳本不是特別方便。我們計劃在企業內開發一套圖形化擴展hubot的平臺,集成企業內常用的各種服務,包括 代碼管理服務(SVN、Git)、通知服務(郵件、Flowdock)和部署服務(企業私有云)。對于特有應用的服務,可以提供自定義腳本擴展。 </ul>
- 安裝Rancher的Server,其名為rancher/server的docker image,主要用于提供用戶界面、追蹤集群中容器狀態、meta data和容器的調度、處理API請求等。
- 給 Rancher添加host,即在host上運行rancher/agent 這個docker image。Rancher的environment對應一個overlay network,把多個主機加入到一個environment中,Rancher根據資源和端口,自主調配容器在哪個主機上運行,每個容器將獲得一個 IP(10.42.0.0/16),容器之間是網絡聯通的。 </ul>
- Rancher根據docker-compose.yml來部署容器,一個 docker-compose.yml定義的container cluster,在Rancher里,被稱為Stack。一個environment可以起多個Stack。對于docker compose中的link, Rancher有自己的Distributed DNS Service discovery的功能,根據link,生成service name對應IP的DNS record。Rancher也支持Docker volume, 并且提供其快照和備份的功能。我們通常還配有一個私有Registry,這樣部署的時候Rancher可以從私有Registry去pull image.
- 與docker-compse.yml一起工作的有rancher-compose.yml,在rancher-compose.yml中定義service scale,即一個service的container數量。例如
db: scale: 2
</li> - Rancher內置的load balancer,我們用來做流量的路由。例如,在docker-compose.yml中,有如下定義
lb: image: rancher/load-balancer-service labels: io.rancher.loadbalancer.target.service1: example.com:443/service1=3000 io.rancher.loadbalancer.target.service2: example.com:80/service2=5000 service1: ... service2: ...
意思是我們定義了一個lb的service,是rancher/load-balancer-service的image,labels中的內容則配置 lb的路由規則,即訪問example.com:443/service1,流量會被分發到service1,而example.com:80 /service2,流量被分發到service2。我們常常在一個envrionment中,指定一臺host,專門用于運行lb。然后,云服務上配置 DNS,使域名綁定到這個主機的IP。這樣無論如何部署,總可以很順利地通過域名來訪問這些服務。 </li> - 容器編排scheduling的功 能。Rancher允許用戶給每個host定義label,比如我們常常給專門來運行load balance的主機定義一個label是for=lb,如果要lb這個service一定在此主機上運行,那么可以在docker- compose.yml中這樣定義:
lb: labels: io.rancher.scheduler.affinity:host_label: for=lb
</li> </ul>
Rancher有更多高級的scheduling規則編寫的功能,包括否定,軟指定等。
io.rancher.scheduler.affinity:host_label_ne: for=lb指service一定不能在for=lb的host上運行。
io.rancher.scheduler.affinity:host_label_soft: for=lb指service在條件允許的情況下盡量在for=lb的host上運行。
- 可以從用戶界面上部署容器,Rancher自動生成docker-compose.yml,并且提供Service之間相互link的拓撲圖,如圖
</li> - Rancher有rancher-compose命令行工具,方便容器部署自動化,與其他流程進行整合。 </ul>
- 發布新的image,可以用Rancher upgrade的功能,實現無縫更新。本質上Rancher啟動新的service,然后切換link到新的service。如果需要回滾,則可以很方便的切換回之前的service。
- Rancher對于主機和容器進行實時監控,通過用戶界面可以查看cpu和memory的使用情況。
- Service Health Check,是基于HAProxy開發的對于service狀態的監控。 </ul>
- 缺乏自主修復的功能。如果有些host無法和Rancher Server連接,Rancher無法重新調配container。 </ul>
- 惠普企業RnD部門,從事DevOps及Docker的研究和相關工具的研發,開源社區貢獻者。
- 成員:李文權、林箐、王春陽。 </ul>
生產環境使用Rancher
目前發現的缺點
團隊
Q&A
Q:目前有沒有嘗到監控Register運行和使用情況的好處,或者在維護私有Register有沒有遇到過什么問題?
A:能夠實時監控Registry,就能觀察用戶的行為,當我們在負載量很大的時候,能夠有效保持Registry穩定運行。維護私有的Registry的問題,就是要跟進官方的更新,看看是否也需要同步。
Q:Rancher 實際上是基于Docker的開源PaaS,基于容器技術的開源PaaS很多,比如Deis、Flynn等,但是Rancher跟這些項目不同的地方是,它 盡可能的和Docker生態圈工具兼容。請問當初為什么會選擇Rancher,在你看來,Rancher最吸引你的地方是什么?
A:Rancher的UI比較方便于上手和使用。而且Rancher的概念也更接近Docker compose,目前官方的文檔也比較齊全。
Q:Flowdock+Hubot這種方式下的監控是否必須用Sensu,是否支持采用zabbix作監控,Zabbix的遠程腳本可以實現一些自動重啟等等操作?
A:Sensu不是必須的,你可以使用你熟悉的監控服務,比如Zabbix。
Q:Flowdock+Hubot在一些安全性要求比較高的生產環境上是否可用,其發布的命令采用什么方式連接到容器\虛擬機或者主機上?要不要建立SSH免密碼連接之類的操作?
A:Hubot是拉取Flowdock的信息,所以Hubot可以部署在公司防火墻內。目前Hubot使用docker remote API來控制虛擬機上的容器。
Q:請教一下,Rancher可以理解為Compose的增強版嗎,特別是可視化部分?
Rancher自己有一套rancher-compose,提供load balance和auto scaling,可以算是Compose的增強版。可視化部分,是Rancher的一個Feature。
Q:Rancher的lb是用的HAProxy么?
A:是的。
Q:有沒有做過橫向比較,Kubernetes和Swarm+Compose,Rancher+Compose,在這幾種選擇間做過比較,或者說為什么最終選擇了Rancher?
A:最初是選擇Swarm+Compose,但是由于那個時候的Swarm不太穩定,有bug,集群管理工作不起來。Rancher部署方便,操作簡單,所以就用了它。
Q:Rancher的網絡具體是怎么做的呢?
A:據目前了解,是overlay模式。各主機之間采用IPsec Tunneling來實現通信,使用udp的500和4500端口。啟動時在各個主機部署容器之前啟動一個Network Agent管理容器網絡。具體可以參看文檔:docs.rancher.com
Q:rancher master如何實現的高可用?之前看了文檔搭建之后,cpu等監控圖無法顯示了
A:通過rancher-compose提供load balance和auto scaling實現高可用。監控圖無法顯示也是我們遇到的問題,目前正在解決。
Q:從描述看Rancher的網絡類似于weave吧,給每個容器分配固定IP,對集群規模比較大的或者IP地址段受限的似乎不太夠用?
A:從我們目前的經驗來看,的確有這樣的限制,如果有大規模集群的需求下,需要重新評估Rancher來管理和部署。
Q: Hubot是不是也支持非容器方式的部署,比如部署在虛擬機上?
A:可以,可以參照 https://hubot.github.com。
Q:Hubot使用docker remote API是否采用了安全策略,另外Docker Registry采用了何種安全策略?
A:Remote API使用了TLS驗證。目前我們的private registry使用了LDAP+token作為安全認證。
Q:在部署方面很重要的是動態伸縮和灰度發布,在這兩方面你們是怎么考慮的?Rancher在這兩個方面有支持嗎?
A:通過rancher-compose提供load balance和auto scaling實現動態伸縮。其他方面,還沒有考慮過。
Q:Rancher的管理數據是不是都放在了MySQL里面?MySQL需要搭建在物理機上嗎?
A:MySQL是rancher server自己提供的,無需手工部署。
Q:Rancher能支持云存儲嗎?
A:最新版本的Rancher對Docker volume插件有了支持,可以通過它來實現Container的數據存儲管理。
Q:請問你們實踐或了解到的基于Rancher的集群規模有多大?
A:目前我們的使用規模比較小,還沒有這方面的準確數據。
Q:從介紹看整個系統是搭建在OpenStack上的,采用Swift作為存儲,那Docker的部署是不是采用的nova-docker呢?容器是部署在物理機上還是虛機上的,如果是虛擬機采用的是哪種hypervisor,性能方面如何,有沒有做過相關的壓測?
A:Docker是部署在KVM的虛擬機上,使用的企業私有云平臺,目前沒有做過性能測試。
Q:Rancher 實際應用中有哪些要特別注意的問題,麻煩分享下?
A:Rancher版本更新快,較低的版本會有很多bug。
Q:有考慮過升級問題么?比如Registry從v1升級到v2?或者docker 升級到1.9?
A:目前我們使用的就是v2,使用rancher upgrade來升級。 升級Docker的成本較大,目前還沒有相關最佳實踐。
Q: Rancher中文資料多嘛,有推薦嘛?
A:目前我們看的都是官方英文文檔,這樣能看到最新的信息,中文文檔沒有關注。
===========================================================
以上內容根據2015年11月24日晚微信群分享內容整理。 分享人: 李文權,去年開始參與關于OpenStack的項目forj,這是一個持續集成和分發的開源平臺。負責搭建公司內部使用的Docker Registry,跟Docker社區成員一起貢獻了OpenStack Swift作為Registry V2的代碼。 DockOne每周都會組織定向的技術分享,歡迎感興趣的同學加微信: liyingjiesx,進群參與,您有想聽的話題可以給我們留言。
來自:http://dockone.io/article/852 - 可以從用戶界面上部署容器,Rancher自動生成docker-compose.yml,并且提供Service之間相互link的拓撲圖,如圖
這里是一篇比較Slack、Flowdock和HipChat的文章:
http://www.slant.co/topics/135 ... wdock。
機器人選取了由Github團隊開發的,當下最廣泛使用 Hubot。它是基于Node.js+CoffeeScript編寫的,支持眾多協作平臺,如果沒有你在用的,自己寫adapter也很簡單。除此之外,還有一些機器人:
團隊中的任何一個人,只要在Flowdock這樣的協作平臺上,像聊天一樣,輸入相應指令,比如hubot show registry status,收到這條指令的Hubot就會根據后臺定制的腳本,自動把相應信息通過一條聊天信息返回給你。
為什么要使用ChatOps
ChatOps的實施使運維工作更加透明,更加簡潔。這樣的好處很多:目前是如何利用ChatOps
我們公司目前內部署了私有Docker Registry,我們希望監控它的運行和使用情況,并且能夠快速地對一些可預知的問題進行處理。通過Flowdock+Hubot(Hubot運行在Docker容器里)就能實現這點:對于ChatOps未來計劃
使用Rancher實現Docker容器集群環境的部署和管理
為什么使用Rancher
我們需要一個平臺來 管理生產環境中的容器,Rancher是一個開源項目,使用起來非常簡單,容易上手,一方面Rancher提供UI,可視化創建開關容器,另一方面,當時 我們對docker-compose已有一定的了解,Rancher是支持標準化docker-compose.yml的。除此以外,Rancher實現 了跨主機的overlay network。基于以上考慮,我們采用Rancher,基本上滿足我們對于容器部署管理的需求。準備環境
Rancher進行部署
本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!