docker搭建大規模測試環境的實踐

2021-09-23 08:50:05 字數 3985 閱讀 6004

當今網際網路行業發展迅速,產品架構逐漸複雜,導致環境搭建困難。

測試環境不一致。

因為搭建環境困難,環境不多,所以一套環境有多人使用,容易造成環境的互相踩踏問題。

隨著業務的發展和時間的積累,我們發現case越來越多。我們希望能夠用分布式的執行方式在多台機器上併發執行,以提公升執行速度。但是測試機器稀缺,速度依然無法提公升。

自動化

搭建乙個環境必須做到一鍵部署,在遷移、實踐和刪除環境中也要做到自動化。

標準化

標準化用來解決測試環境不一致的問題。我們希望測試環境、開發環境甚至生產環境都是一致的。

集群化

根據以往的經驗發現,測試資源是一種比較稀缺的資源。要把測試環境擴充套件到一定的量級,使稀缺資源變成普通的、人人都能簡單獲取的一種資源,這樣就省去了複雜的流程和排隊等待的過程。

容器技術相較於虛擬機器來說還是非常節省資源的。docker不需要執行完整的作業系統。在乙個宿主機上執行的所有容器都是共享宿主機的核心,所以每啟動乙個容器,都比虛擬機器節省了乙個核心的空間。

簡化了運維成本,極大降低部署環境的學習門檻。

假如公司新進了一批機器,要把環境遷移到某些環境上來,只要把它做成映象,就可以很方便地進行遷移。而且這些映象都是一致的,通過製作映象可以解決標準化的問題。

容器的啟動速度和刪除速度都是秒級的,有些不是長時間執行的服務在用完後就能將其刪除。這樣docker的宿主機就始終能保持乙個低壓力的狀態。

把應用程式當成乙個個貨櫃,全都放在docker裡。主要是放基礎容器、測試環境和測試執行機器。也可把執行測試機器全部製作成映象,在需要使用的時候啟動它並放進docker裡。

埠對映

這種方式的優點是簡單,不用做任何配置。當然它的缺點也很明顯,要維護乙個很龐大的埠列表,記住每乙個環境容器的埠是什麼,對外暴露的埠是什麼。

固定ip

我們希望這些容器能像虛擬機器一樣,給它分配真實的ip去訪問它。但這個做法會稍微有些麻煩,docker不支援這樣做,我們需要利用一些轉化規則。

建立乙個新的網橋br0,給它分配乙個真實的ip,把宿主機的網絡卡掛到網橋上,同時改變docker的啟動引數,預設啟動的時候連到br0上。重新劃分網段,把所有容器的網段全都分配成和宿主機在相同的網段上。這樣啟動容器時分配的就是真實ip,並與宿主機相處於同乙個網段。

這種方式讓外界使用者感受不到是在使用容器還是虛擬機器,是對測試環境非常友好的一種方式。

但它並不適合在大規模的測試環境中使用。所有環境都有了真實ip,都被放到了真實的網路環境中,如果容器太多就會出現廣播風暴的問題。

container模式

container模式的特點是可以把所有容器繫結到乙個ip位址上。

雖然所有模組都裝在不同的容器裡,但它們都有同樣的ip,只是它們用不同的埠對外暴露服務。

它的優點是配置管理,效率高,是對開發最友好的一種模式。

缺點是標準化。因為我們公司產品的一些特性,產品環境並不是這樣去部署的,所以可能會出現環境不一致帶來的一系列問題。

打包模式

有多少模組就併發啟動多少容器,這些容器的網路模式可以用host。host的特性是把所有容器的網路環境掛載到宿主機上。把這些併發編譯後上傳到ftp上,然後啟動乙個或多個部署容器。

打包模式的優點就是標準化。但它的效率不如container模式高。

外部儲存

把資料庫放到容器外面,在容器內部和資料庫進行溝通,保證資料庫不會造成資料的丟失。

volume儲存

這是docker比較推薦的一種方式。它允許把容器中的某個路徑掛載到外部裝置上。比如掛載到宿主機上,容器實時向檔案中寫資料,宿主機上同時也會儲存這份資料。

集群

我們想要提供乙個統一介面去管理集群上所有節點,所以考慮使用一些開源的分布式框架。目前在業界最火的三種框架就是mesos、kubernetes、swarm mode。

mesos誕生的時間非常早,專注於資源排程,後來docker火了之後才相容了docker。它的排程框架的二次排程,只裝乙個mesos是不夠的,還依賴於很多其它的東西。mesos發展得越來越複雜,需要專業運維去支援,所以mesos並不適合作為測試環境的框架來使用。

kubernetes是google內部集群框架block的乙個開源版本。它當時是為docker設計的,而現在kubernetes慢慢開始相容其它平台。kubernetes原本應該是最複雜的集群管理框架,google提供了客戶端工具,把很多內部細節封裝起來,簡化了它的使用方式。它最近推行的容器化部署也極大降低了kubernetes的使用門檻。

swarmmode是從docker1.12版本開始內建到docker引擎當中的,非常簡單。它把所有需要的東西全都內建到了一條命令上。只要執行一次這條命令,所有的服務發現、跨節點溝通等等的負載均衡都已經做好了。swarm mode是三種框架中最簡單的一種,但並不靈活,功能也沒有那麼強大了。

pod是kubernetes乙個邏輯的概念,是一組容器的組合,是kubernetes在乙個節點上控制的最小的邏輯單元。

deployment

可以把deployment看成乙個守護程序,如果把乙個pod掛載到deployment上面,它能保證pod始終執行。要是監控到定義的這組pod某乙個節點掛了,容器也都掛了,它會利用排程系統找乙個合適的節點啟這些pod。deployment可以關聯多組pod。

service

service同樣可以關聯到多組環境上,幫我們做負載均衡。當有請求過來的時候,service會自動分配到各種不同的pod上去。假如出現了運維事故或it事故,乙個節點掛了,它會自動切換到其它幾個節點的容器上去執行,不會影響到它的服務,保證了pm的環境是始終存在的。

從單點擴充套件到集群,複雜度就提公升了。

首先要關注的就是跨主機通訊問題。docker分配的是虛擬ip,只能在乙個節點的容器中互相溝通。擴充套件到集群之後,要裝乙個網路外掛程式來解決問題。

容器之間要互相溝通,必須知道對方的ip位址。docker在每次啟動的時候ip位址都會改變,要有乙個dns去註冊網域名稱,在配置檔案中做通訊的時候執行這個網域名稱就可以了。

要知道容器執行消耗了多少資源,應該再安裝乙個服務來做容器級的監控。

docker變向集群化的時候,就面臨了映象如何在每乙個節點上進行分發的問題。所以要有乙個映象倉庫來存放所有映象,每個節點都會拉最新映象進行部署。

以上是我今天分享的內容,感謝聆聽!

利用docker搭建測試環境 安裝

軟體測試過程中,總會碰到測試環境不夠用的尷尬情況。即時有了機器還要經歷裝系統,配置環境,除錯等一系列繁瑣的問題。雖然市面上也有一些批處理話的工具 如salt,fabric等 但是還是需要實體機器作為支撐,增大成本。安裝。環境是centos6.7。注 需要sudo或者root許可權 1 更新系統,yu...

Filecoin官方 如何搭建大規模集群

我們在水滴科技官網了解到了搭建大規模filecoin挖礦集群的方法。filecoin因為挖礦演算法複雜 運維難度極大,一直成為阻礙傳統礦工進入的門檻。但自從我們進入這個領域以來,始終在致力於幫助礦工理解其原理並且搭建屬於自己的礦機。filecoin的礦機分為三種,worker miner和stora...

訪談 阿里超大規模Docker化之路

林昊 畢玄 阿里巴巴研究員,平台架構部負責人,服務框架 hsf 作者,異地多活專案負責人,目前致力於資源統一管理排程系統建設。眾所周知docker技術這幾年大熱,但是過去相當長的一段時間內,阿里內部技術人員只能自己私下玩玩,沒法在阿里內部生產環境使用docker,因為docker要求的os版本和核心...