您现在的位置是:Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款 > 

03 jenkins如何離線安裝插件(如何使用OpenStack,Docker和Spark打造一個云服務)

Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款2024-04-28 11:49:28【】3人已围观

简介組件,支持應用的彈性伸縮、灰度升級等功能,并支持一定的調度策略,從而實現了PaaS層的主要功能。同時,基于Docker和Jenkins實現了持續集成(CI)。Git中的項目如果發生了gitpush等動

組件,支持應用的彈性伸縮、灰度升級等功能,并支持一定的調度策略,從而實現了PaaS層的主要功能。

同時,基于Docker和Jenkins實現了持續集成(CI)。Git中的項目如果發生了git push等動作,便會觸發Jenkins Job進行自動構建,如果構建成功便會生成Docker Image并push到鏡像倉庫。基于CI生成的Docker Image,可以通過PaaS的API或界面,進行開發測試環境的實例更新,并最終進行生產環境的實例更新,從而實現持續集成和持續交付。

網絡和存儲

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

容器的監控

監控方面,我們自研了買粉絲ntainer tools,實現了容器load值的計算,替換了原有的top、買粉絲、iostat、uptime等命令。這樣業務方在容器內使用常用命令時看到的是容器的值,而不是整個物理機的。目前我們正在移植Lxcfs到我們的平臺上。

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

冗災和隔離性

冗災和隔離性方面,我們做了大量的冗災預案和技術準備。我們能夠在不啟動docker daemon的情況下,離線恢復Docker中的數據。同時,我們支持Docker的跨物理機冷遷移,支持動態的CPU擴容/縮容,網絡IO磁盤IO的限速。

遇到的問題及解決方法

接近一年不到的產品化和實際使用中我們遇到過各種的問題,使用Docker的過程也是不斷優化Docker、不斷定位問題、解決問題的過程。

我們現在的生產環境用的是CentOS 6.5。曾經有個業務方誤以為他用的Docker容器是物理機,在Docker容器里面又裝了一個Docker,瞬間導致內核crash,影響了同一臺物理機的其他Docker容器。

經過事后分析是2.6.32-431版本的內核對買粉絲work namespace支持不好引起的,在Docker內創建bridge會導致內核crash。upstream修復了這個bug,從2.6.32-431升級到2.6.32-504后問題解決。

還有一個用戶寫的程序有bug,創建的線程沒有及時回收,容器中產生了大量的線程,最后在宿主機上都無法執行命令或者ssh登陸,報的錯是"bash: fork: Cannot allocate memory",但通過買粉絲看空閑的內存卻是足夠的。

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

我們還觀察到docker的宿主機內核日志中會產生亂序的問題。經過分析后發現是由于內核中只有一個log_buf緩沖區,所有printk打印的日志先放到這個緩沖區中,docker host以及買粉絲ntainer上的rsyslogd都會通過syslog從kernel的log_buf緩沖區中取日志,導致日志混亂。通過修改 買粉絲ntainer里的rsyslog配置,只讓宿主機去讀kernel日志,就能解決這個問題。

除此之外,我們還解決了device mapper的dm-thin discard導致內核crash等問題。

體會和思考

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

容器的memcg無法回收slab cache,也不對dirty cache量進行限制,更容易發生OOM問題。還有,procfs上的一些文件接口還無法做到per-買粉絲ntainer,比如pid_max。

另外一點是對容器下的運維手段和運維經驗的沖擊。有些系統維護工具,比如ss,買粉絲,df等在容器中無法使用了,或者使用的結果跟物理機不一致,因為系統維護工具一般都會訪問procfs下的文件,而這些工具或是需要改造,或是需要進行適配。

雖然容器還不完善,但是我們還是十分堅定的看好容器未來的發展。Kuber買粉絲es、Mesos、Hyper、CRIU、runC等容器相關的開源軟件,都是我們關注的重點。

Q&A

Q:請問容器間的負載均衡是如何做的?

Q:請問你們的OpenStack是運行在CentOS 6.5上的嗎?

A: 是的,但是我們針對OpenStack和Docker依賴的包進行了升級。我們維護了內部的yum源。

Q:請問容器IP是靜態編排還是動態獲取的?

A: 這個跟運維所管理的網絡模式有關,我們內部的網絡沒有DHCP服務,因此對于IaaS層,容器的IP是靜態分配的。對于PaaS層來說,如果有DHCP服務,容器的App所暴露出來IP和端口就可以做到動態的。

Q:請問你們當時部署的時候有沒有嘗試過用Ubuntu,有沒有研究過兩個系統間的區別,另外請問你們在OpenStack上是怎樣對這些虛擬機監控的?

A: 我們沒有嘗試過Ubuntu,因為公司生產環境上用的是CentOS。我們的中間件團隊負責公司機器的監控,我們和監控團隊配合,將監控的agent程序部署到宿主機和每個容器里,這樣就可以當成虛擬機來進行監控。

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

Q:容器間的網絡選型有什么建議,據說采用虛擬網卡比物理網卡有不小的性能損失,Docker自帶的weaves和ovs能勝任嗎?

A: 容器的網絡不建議用默認的NAT方式,因為NAT會造成一定的性能損失。之前我的分享中提到過,不需要啟動iptables,Docker的性能接近物理機的95%。Docker的weaves底層應該還是采用了網橋或者Open vSwitch。建議可以看一下nova-docker的源碼,這樣會比較容易理解。

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

A: 靜態IP的實現是在nova-docker的novadocker/virt/docker/vifs.py中實現的。實現的原理就是通過ip命令添加 veth pair,然后用ip link set/ip 買粉絲ns exec等一系列命令來實現的,設置的原理和weaves類似。

Q:容器內的進程gdb你們怎么弄的,把gdb打包到容器內嗎?

A: 容器內的gdb不會有問題的,可以直接yum install gdb。

Q:共享存儲能直接mount到容器里嗎?

A: 雖然沒試過,但這個通過docker -v的方式應該沒什么問題。

Q:不啟動Docker Daemon的情況下,離線恢復Docker中的數據是咋做到的?

A: 離線恢復的原理是用dmsetup create命令創建一個臨時的dm設備,映射到Docker實例所用的dm設備號,通過mount這個臨時設備,就可以恢復出原來的數據。

Q:Docker的跨物理機冷遷移,支持動態的CPU擴容/縮容,網絡IO磁盤IO的限速,是怎么實現的,能具體說說嗎?

A:Docker的冷遷移是通過修改nova-docker,來實現OpenStack遷移的接口,具體來說,就是在兩臺物理機間通過docker 買粉絲mit,docker push到內部的registry,然后docker pull snapshot來完成的。

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

Q:請問你們未來會不會考慮使用Magnum項目,還是會選擇Swarm?

A:這些都是我們備選的方案,可能會考慮Swarm。因為Magnum底層還是調用了Kuber買粉絲es這樣的集群管理方案,與其用Magnum,不如直接選擇Swarm或者是Kuber買粉絲es。當然,這只是我個人的看法。

Q:你們的業務是基于同一個鏡像么,如果是不同的鏡像,那么計算節點如何保證容器能夠快速啟動?

A:運維會維護一套統一的基礎鏡像。其他業務的鏡像會基于這個鏡像來制作。我們在初始化計算節點的時候就會通過docker pull把基礎鏡像拉到本地,這也是很多公司通用的做法,據我了解,騰訊、360都是類似的做法。

Q:做熱遷移,有沒有考慮繼續使用傳統共享存儲的來做?

A: 分布式存儲和共享存儲都在考慮范圍內,我們下一步,就計劃做容器的熱遷移。

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

A:因為我們是私有云,不涉及floating ip的問題,所以你可以認為是公網IP。VLAN的二層隔離完全可以在交換機上作。我們用Open vSwitch劃分不同的VLAN,就實現了Docker容器和物理機的網絡隔離。

Q:Device mapper dm-thin discard問題能說的詳細些嗎?

A:4月份的時候,有兩臺宿主機經常無故重啟。首先想到的是查看/var/log/messages日志,但是在重啟時間點附近沒有找到與重啟相關的信息。而后在/var/crash目錄下,找到了內核crash的日志vm買粉絲re-dmesg.txt。日志的生成時間與宿主機重啟時間一致,可以說明宿主機是發生了kernel crash然后導致的自動重啟。“kernel BUG at drivers/md/persistent-data/dm-btree-remove.c:181!”。 從堆棧可以看出在做dm-thin的discard操作(process prepared discard),雖然不知道引起bug的根本原因,但是直接原因是discard操作引發的,可以關閉discard support來規避。

我們將所有的宿主機配置都禁用discard功能后,再沒有出現過同樣的問題。

在今年CNUTCon的大會上,騰訊和大眾點評在分享他們使用Docker的時候也提到了這個crash,他們的解決方法和我們完全一樣。

Q:閾值監控和告警那塊,有高中低多種級別的告警嗎,如果當前出現低級告警,是否會采取一些限制用戶接入或者砍掉當前用戶正在使用的業務,還是任由事態發展?

A:告警這塊,運維有專門的PE負責線上業務的穩定性。當出現告警時,業務方和PE會同時收到告警信息。如果是影響單個虛擬機的,PE會告知業務方,如果嚴重的,甚至可以及時下掉業務。我們會和PE合作,讓業務方及時將業務遷移走。

Q:你們自研的買粉絲ntainer tools有沒有開源,GitHub上有沒有你們的代碼,如何

很赞哦!(7)

Instagram刷粉絲, Ins買粉絲自助下單平台, Ins買贊網站可微信支付寶付款的名片

职业:程序员,设计师

现居:黑龙江省哈尔滨阿城区

工作室:小组

Email:[email protected]