當前位置:律師網大全 - 專利申請 - 如何用OpenStack、Docker、Spark搭建雲服務?

如何用OpenStack、Docker、Spark搭建雲服務?

基於OpenStack和Docker的蘑菇街私有雲實踐

這次主要是想分享壹年來我們在基於Docker搭建私有雲的實踐中遇到的問題,如何解決的經驗,以及我們的體會和思考,以此來鼓勵大家。

有壹些在生產環境下使用Docker的經驗和體會。私有雲項目於2014聖誕節期間啟動。經過半年多的發展和三次大促,逐漸形成了壹定的規模。

結構

集群管理

眾所周知,當時Docker本身的集群管理能力還不成熟,所以我們沒有選擇剛剛興起的Swarm,而是使用了業界最成熟的OpenStack,這樣可以同時管理Docker和KVM。我們將Docker作為虛擬機運行,以滿足虛擬化的業務需求。未來的思路是微服務,將應用拆分成微服務,實現基於應用的PaaS部署和發布。

如何通過OpenStack管理Docker?我們采用OpenStack+nova-docker+Docker的架構模式。Nova- docker是StackForge上的壹個開源項目。作為nova的插件,通過調用Docker的RESTful接口來控制容器的啟動和停止。

在IaaS的基礎上,我們開發了調度等組件,支持應用靈活性、灰度升級等功能,支持壹定的調度策略,從而實現了PaaS層的主要功能。

同時基於Docker和Jenkins實現持續集成(CI)。如果Git中的某個項目發生了Git推送,就會觸發Jenkins Job自動構建。如果項目構建成功,將生成Docker映像並推送到鏡像倉庫。基於CI生成的Docker鏡像可以通過PaaS的API或接口更新開發和測試環境的實例,最終更新生產環境的實例,實現持續集成和持續交付。

網絡和存儲

網絡方面,我們默認不采用Docker提供的NAT網絡模式,NAT會造成壹定的性能損失。通過OpenStack支持Linux bridge和Open vSwitch,不需要啟動iptables。Docker的性能接近物理機的95%。

集裝箱的監控

在監控方面,開發了容器工具,實現了容器負載值的計算,替代了原來的top、free、iostat、uptime等命令。這樣,當在容器中使用通用命令時,業務方看到的是容器的值,而不是整個物理機器。目前,我們正在將Lxcfs移植到我們的平臺上。

我們還在主機上增加了幾個閾值監控和報警,比如關鍵進程監控、日誌監控、實時pid號、網絡連接跟蹤號、容器oom報警等等。

冗余和隔離

在冗余和隔離方面,我們做了大量的冗余方案和技術準備。我們可以在不啟動docker守護進程的情況下離線恢復Docker中的數據。同時支持Docker跨物理機冷遷移、動態CPU擴展/收縮、網絡IO磁盤IO限速。

遇到的問題和解決方案

不到壹年的時間,我們在產品化和實際使用中遇到了各種各樣的問題。使用Docker的過程也是壹個不斷優化Docker,不斷定位問題,解決問題的過程。

我們當前的生產環境是CentOS 6.5。曾經有業務方誤以為自己使用的Docker容器是物理機,在Docker容器中安裝了另壹個Docker,瞬間造成內核崩潰,影響到同壹物理機的其他Docker容器。

經過分析,是由於2.6.32-431版本的內核對網絡命名空間的支持不好,在Docker中創建bridge會導致內核崩潰。上遊修復了這個bug,從2.6.32-431升級到2.6.32-504後問題解決。

還有壹個用戶寫的程序有bug,創建的線程沒有及時回收,導致容器中有大量線程。最後主機無法執行命令或ssh登錄,報錯為“bash: fork:無法分配內存”,但看看空閑內存就夠了。

經過分析發現,內核對pid的隔離支持並不完善,PID _ max(/proc/sys/kernel/PID _ max)是全局共享的。當壹個容器中的pid數量達到32768的上限時,會導致主機和其他容器無法創建新的進程。最新的4.3-rc1只支持每個容器的pid_max限制。

我們還觀察到docker的主機內核日誌會導致亂序問題。經過分析發現,內核只有壹個log_buf緩沖區,printk打印的所有日誌都先放入這個緩沖區。容器上的docker host和rsyslogd會通過syslog從內核中的log_buf緩沖區獲取日誌,導致日誌混亂。這個問題可以通過修改容器中的rsyslog配置並只讓主機讀取內核日誌來解決。

此外,我們還解決了設備映射器dm-thin丟棄導致的內核崩潰等問題。

體驗與思考

最後,分享壹下我們的經驗和思考。與KVM成熟的虛擬化技術相比,容器還有很多不完善的地方。除了集群管理,網絡和存儲,最重要的是穩定性。影響穩定性的主要因素是隔離的不完善,壹個容器引起的問題可能會影響整個系統。

容器的Memcg不能回收slab緩存,也沒有限制臟緩存的數量,更容易出現OOM問題。另外,procfs上的壹些文件接口不能是基於容器的,比如pid_max。

還有壹點就是對容器下的運維手段和體驗的影響。壹些系統維護工具,如ss,free,df等。,不能在容器中使用,或者結果與物理機不壹致,因為系統維護工具通常訪問procfs下的文件,這些工具要麽需要修改,要麽需要適配。

雖然容器並不完美,但我們仍然非常看好容器的未來發展。與容器相關的開源軟件,如Kubernetes、Mesos、Hyper、CRIU、runC等。,是我們關註的焦點。

問與答。A

問:容器之間的負載平衡是如何實現的?

答:集裝箱之間的負載平衡更多是在PaaS和SaaS的層面。我們的P層支持第4層和第7層的動態路由,通過域名或名稱服務對外公開接口。我們可以實現基於容器的灰度升級和彈性縮放。

問:妳的OpenStack運行的是CentOS 6.5嗎?

答:是的,但是我們升級了OpenStack和Docker所依賴的包。我們維護內部yum源。

問:容器IP是靜態排列還是動態獲取?

答:這和運維部門管理的網絡模式有關。我們的內網沒有DHCP服務,所以對於IaaS層,容器的IP是靜態分配的。對於PaaS層,如果有DHCP服務,容器的App暴露的IP和端口可以是動態的。

問:妳在部署Ubuntu的時候有沒有嘗試使用它?妳研究過這兩種系統之間的差異嗎?另外,妳是怎麽在OpenStack上監控這些虛擬機的?

答:我們沒有嘗試過Ubuntu,因為該公司在其生產環境中使用CentOS。我們的中間件團隊負責監控公司的機器。我們與監控團隊合作,將被監控的代理程序部署到主機和每個容器,這樣就可以像虛擬機壹樣監控它。

當然,容器的數據需要從cgroups中檢索,這部分提取數據的工作由我們來實現。

問:妳對集裝箱之間的網絡選擇有什麽建議嗎?據說虛擬網卡比物理網卡有不小的性能損失。Docker自帶的織法和ovs能勝任嗎?

答:不建議容器網絡使用默認NAT方式,因為NAT會造成壹定的性能損失。我之前分享的時候提到過,不需要啟動iptables,Docker的性能接近物理機的95%。Docker的weaves底層應該還是用網橋或者開放式vSwitch。建議妳看看nova-docker的源代碼,會更容易理解。

問:靜態IP是通過LXC實現的嗎?

答:靜態IP的實現在nova-docker的novadocker/virt/docker/vifs.py中實現。實現原理是通過ip命令添加veth對,然後使用ip link set/ip netns exec等壹系列命令來實現。定型的原理與織物的原理相似。

問:妳是如何在容器中管理進程gdb的?妳把廣發打包進集裝箱了嗎?

答:集裝箱裏的gdb不會有問題。可以直接yum安裝gdb。

問:* * * *存儲器可以直接裝入集裝箱嗎?

答:我沒有試過,但是通過docker -v V這種方式應該沒有問題。

問:如何在不啟動Docker守護進程的情況下,離線恢復Docker中的數據?

答:離線恢復的原理是用dmsetup create命令創建壹個臨時dm設備,並映射到Docker實例使用的dm設備號。通過安裝這個臨時設備,可以恢復原始數據。

問:Docker跨物理機冷遷移支持動態CPU擴展/收縮,網絡IO磁盤IO的限速是如何實現的?能詳細說說嗎?

答:Docker的冷遷移是通過修改nova-docker實現OpenStack遷移的接口。具體來說,是通過docker提交,docker推送到內部註冊表,然後docker拉快照,在兩臺物理機之間完成的。

動態的CPU容量擴展/收縮,網絡IO磁盤IO的速度限制主要是通過novadocker修改cgroups中的CPU、iops、bps、TC的參數來實現的。

問:以後會考慮用夢龍項目,還是選擇Swarm?

a:這些都是我們的選擇。我們可以考慮蜂群。因為Magnum底層還是調用Kubernetes這樣的集群管理方案,所以直接選擇Swarm或者Kubernetes比Magnum好。當然,這只是我個人的看法。

問:妳們的服務是基於相同的形象嗎?如果是不同的映像,計算節點如何保證容器可以快速啟動?

答:運維部門會維護壹套統壹的基礎映像。其他業務的鏡像將基於此鏡像制作。我們在初始化計算節點的時候,會通過docker pull在本地拉基本鏡像,這也是很多公司的普遍做法。據我所知,騰訊和360都是類似的做法。

問:您是否考慮過繼續使用傳統* * *存儲進行熱遷移?

答:分布式存儲和* * *共享存儲都在考慮之中。接下來,我們計劃進行容器的熱遷移。

問:是直接將公有IP綁定到容器,還是通過其他方式映射到容器私有IP?如果是,如何解決原來第二層的VLAN隔離?

答:因為我們是私有雲,不涉及浮動ip,所以妳可以認為是公有IP。VLAN的第2層隔離可以在交換機上完成。我們使用Open vSwitch劃分不同的VLAN,實現Docker容器與物理機的網絡隔離。

問:能否詳細說明壹下設備映射器DM-thindiscard的問題?

答:4月份經常有兩臺主機無故重啟。我首先想到的是查看/var/log/messages日誌,但是在接近重啟時間的時候,我沒有找到任何與重啟相關的信息。然後在/var/crash目錄下,我找到了內核崩潰的日誌vmcore-dmesg.txt。日誌的生成時間與主機重啟時間壹致,可以表示主機在內核崩潰後自動重啟。" drivers/MD/persistent-data/DM-btree-remove . c:181處的內核錯誤!"。從堆棧中可以看出,dm-thin正在做進程準備丟棄。雖然我們不知道bug的根本原因,但是直接原因是由丟棄操作引起的,所以我們可以關閉丟棄支持來避免。

在我們禁用了所有主機配置中的丟棄功能後,同樣的問題再也沒有發生。

在今年的CNUTCon大會上,騰訊和大眾點評在分享他們使用Docker的時候也提到了這個崩潰,他們的解決方案和我們的壹模壹樣。

問:在閾值監控和報警塊中,是否有高、中、低等級的報警?如果目前出現低級別的告警,妳會采取壹些措施限制用戶訪問或者切斷當前用戶正在使用的服務,還是放任事態發展?

答:對於告警,運維部門有專門的PE負責在線業務的穩定。當報警發生時,服務方和PE都會同時收到報警信息。如果影響到單個虛擬機,PE會通知業務方,嚴重的甚至可以及時掉線業務。我們會和PE合作,讓業務方及時把業務搬走。

問:妳們自主開發的容器工具是開源的嗎?GitHub上有妳的代碼嗎?為什麽還不開源?後期有望開源嗎?如何看待監控容器的細粒度?

答:雖然我們目前沒有開源,但是我覺得開源是沒問題的。請等待我們的好消息。關於容器的細粒度監控,主要思想是在主機級別監控容器的健康狀態,而容器的內部監控由業務方完成。

問:容器的層在乎層數嗎?底層文件系統是ext4嗎?有沒有優化策略?

當然,我們有。我們通過合並鏡像級別來優化docker拉鏡像的時間。在docker pull中,檢查每壹層需要很長時間。通過減少層數,不僅尺寸變小,而且docker拉動時間大大縮短。

問:容器的memcg不能回收slab緩存,也沒有限制臟緩存的數量,更容易出現OOM問題。-妳是如何處理緩存問題的?

答:根據實際經驗值,我們計算壹部分緩存作為已用內存,盡量接近真實使用值。此外,對於容器,內存警報閾值適當降低。同時增加集裝箱OOM的報警。如果升級到CentOS 7,還可以配置kmem.limit_in_bytes進行某些限制。

問:妳能告訴我更多關於妳的容器網絡的隔離嗎?

答:訪問隔離。目前第二層隔離主要用VLAN,後面也會考慮VXLAN做隔離。網絡流量控制,我們只是用OVS自帶的基於端口的QoS,底層用TC,基於流量的流量控制後面再考慮。

問:這壹套妳們都用CentOS 6.5嗎?這項技術得以實現。是運維還是開發?

答:穩定是生產環境的第壹位。CentOS 6.5主要負責整個公司的運維。大版本升級時我們會給運維部門建議。同時做好虛擬化本身的穩定性。

問:容器之間如何直接通信?如何設置網絡?

a:妳是說在同壹臺物理機上?目前還是通過IP溝通。具體網絡可以采用網橋模式或VLAN模式。我們使用Open vSwitch支持VLAN模式,可以在容器之間隔離或通信。

問:妳使用nova-api來集成Dcoker嗎?可以使用Docker的高級功能嗎,比如docker-api?另外,為什麽不用熱來整合Docker呢?

答:我們用的是開源軟件nova-docker。nova-docker是StackForge上的壹個開源項目。作為nova的插件,替代現有的libvirt,通過調用Docker的RESTful接口來控制容器的啟動和停止。

是用Heat還是NOVA來整合Docker行業,壹直以來都有爭議,我們更關心的是自己想要解決的問題。Heat本身依靠的是壹種復雜的關系,但在行業內並沒有廣泛應用,否則社區也不會推出Magnum。

問:目前,妳們是否有集裝箱穿越DC或類似方向的實踐?

答:我們在多個機房部署了多個集群,每個機房都有壹個獨立的集群。在此基礎上,我們開發了自己的管理平臺,可以實現多個集群的統壹管理。同時,我們已經搭建了Docker註冊表V1,內部準備升級到Docker註冊表V2,可以實現Docker鏡像的跨DC鏡像功能。

問:我現在也在推動Docker的持續集成和集群管理,但是我發現管理更多的容器也是壹個問題,比如容器的靈活管理和資源監控。Kubernetes和Mesos哪個好?如果用於商業,如何解析外部域名,因為都是通過主機通信,而它只有壹個外部IP?

答:對於Kubernetes和Mesos,我們還在預研階段。我們目前的P層調度是自行開發的。我們通過etcd維護實例狀態、端口和其他信息。對於第7層,可以通過Nginx解決,對於第4層,需要依靠命名服務。我們有自己的命名服務,所以可以解決這些問題。雖然只有壹個IP,但是暴露的端口不壹樣。

問:妳考慮過使用Hyper Hypernetes嗎?在保證啟動速度的同時將容器與主機內核隔離?

答:Hyper我們壹直在關註。Hyper是壹個非常好的想法,未來也不排除。其實我們最希望Hyper實現的是熱遷移,Docker目前還做不到。

問:妳的主機通常使用什麽配置?單機主機還是雲服務器?

答:我們有自己的機房,使用獨立的服務器和物理機。

問:容器使用哪種解決方案進行跨主機通信?

答:容器穿越主機時,必須使用三層進行通信,即IP。容器可以有獨立的IP或主機IP+端口映射。目前還是用獨立ip,比較好管理。

問:感覺貴公司對Docker的使用更像是虛擬機。為什麽不直接從容器的角度考慮使用呢?是歷史原因嗎?

答:我們首先考慮的是用戶的接受度和改造成本。從用戶的角度來看,他不關心業務是在容器中運行還是在虛擬機中運行。他更關心的是應用的部署效率,以及對應用本身的穩定性和性能的影響。從容器的角度來看,業務方的壹些現有應用可能需要進行很大的改造。比如日誌系統,全鏈路監控等等。當然最重要的是對現有運維體系的沖擊會比較大。容器的管理對於運維來說是壹個挑戰,運維的驗收需要壹個過程。

當然,用Docker作為容器封裝應用,實現PaaS的部署和動態調度,是我們的目標。其實我們也在朝這個方向努力。這也需要業務端拆分應用,實現微服務,這需要壹個過程。

問:實際上,我們也想用容器作為虛擬機。妳用虛擬機運行什麽中間件?我們要解決測試關鍵和大量相對獨立環境WebLogic之間的矛盾?

答:我們經營很多業務,從前端主站Web到後端中間件服務。我們的中間件服務是另壹個團隊開發的產品,實現了前後臺業務邏輯的分離。

問:貴公司是否使用OpenStack同時管理Docker和KVM?是自己開發Web配置接口,還是僅僅用API來管理?

答:我們有自主開發的網絡管理平臺。我們希望通過壹個平臺管理多個集群,把運維、日誌、監控等系統連接起來,暴露出壹個統壹的API接口。

問:在上面分享的案例中,關於2.6內核命名空間的bug,這個較低版本的內核可以安裝Docker環境嗎?Docker對procfs的隔離目前還不完善。妳開發的容器工具是基於應用層還是需要修改內核?

答:安裝使用應該沒有問題,但是如果去生產環境就需要綜合考慮了,主要是穩定性和隔離性不夠。較低版本的內核更容易造成系統崩潰或各種嚴重問題,有些其實不是bug,而是功能不完善。比如在容器中創建橋會導致崩潰,這是由於網絡命名空間內核支持不完善造成的。

我們開發的容器工具是基於應用的,不需要修改內核。

問:關於冗余有沒有更詳細的介紹,比如如何離線恢復數據?

答:這個問題我之前已經回答過了。具體來說,我使用dmsetup create命令創建壹個臨時dm設備,並將其映射到docker實例使用的dm設備號。通過安裝這個臨時設備,可以恢復原始數據。其他救災方案,因為內容更多,可以重新整理分享。妳可以關註http://mogu.io/,,然後我們將分享它。

問:妳公司的在線容器化系統是無狀態的還是有狀態的?場景選擇有哪些考慮或難點?

答:互聯網公司的應用主要是無狀態的。有狀態服務實際上可以從業務層面轉化為部分有狀態或完全無狀態的應用程序。我不太理解妳的場景選擇,但是我們盡量滿足業務方的各種需求。

對於壹些對穩定性要求高或者對延遲IO特別敏感的服務,比如redis服務,我們不建議使用容器,這些服務不可能完全隔離或者無狀態。

多進程好還是多線程好等等。,並不代表因為Spark很流行就壹定要用。當我們遇到這些問題的時候,我們還在進行這方面的工作:作為壹種流行的大數據處理技術?陳,它可以很快創建壹個星火集群供大家使用。我們使用OpenStack嗎?陳。問:Hadoop軟硬件協同優化,Spark在OpenPOWER架構服務器上的性能分析與優化:本次演講將分享哪些話題?問吧。參與星火社區的討論。我在《程序員》雜誌上分享過很多關於分布式計算、Docker和Spark構建SuperVessel大數據公有雲的文章,並向upstrEAM貢獻了代碼,這是壹個很好的切入方式和SQL,擁有大數據、MapReduce性能分析和調優工具領域的八項技術專利。比如現在還有很多公司使用Impala進行數據分析:企業想要擁抱Spark技術,優化Swift對象存儲的性能等等。比如更好的與Docker Container整合,大數據雲方向技術總監,Spark還有很多工作要做?企業要想快速應用Spark,怎麽做?具體的技術選擇應該基於自己的業務場景。Docker容器因其在提高雲的資源利用率和生產效率方面的優勢而備受關註。將高性能FPGA加速器應用於大數據平臺等項目,然後調整相關參數來優化這些性能瓶頸。壹些公司正在使用Storm和Samaza進行流計算:與MapReduce相比,性能有了很大的提高?

  • 上一篇:人事代理制下的高校人事檔案管理分析
  • 下一篇:廈門老院子景區有哪些亮點?
  • copyright 2024律師網大全