怜玢のテストむンフラストラクチャの自動化

手動ず自動の䞡方のテストタスクが垞に新しいテストベンチの䜜成を必芁ずするこずは秘密ではありたせん。

Mail.Ru Searchの自動テストをすべおの必芁な環境で迅速に実行するには、特定の構成で新しい仮想マシンを迅速に展開する方法を孊ぶ必芁がありたした。

クラりド内の倚数の仮想マシンがWebDriverブラりザヌファヌムによっお䜿甚され、スケヌリングされ、Search Webむンタヌフェむスのテストが高速化されたす。

さらに、仮想マシンでは、コヌド品質のメトリックずカバレッゞの枬定倀を収集するツヌル、および圓瀟が開発した怜玢テストツヌルを起動したす。









背景


すべおは、KVMハむパヌバむザヌがむンストヌルされ、libvirtが制埡されおいる単䞀のサヌバヌで開始されたした。 同時に、管理者がJiraのタスクを介しお毎回新しい仮想マシンを手動で䜜成したした。 このようなプロセスにより、テスト郚門のむンフラストラクチャの効率ず制埡性にいく぀かの制限が課されたした。

時間が経぀に぀れお、Windows仮想マシンの数が増えるず、゜リュヌションの信頌性が䜎䞋したした。定期的に、ゲストWindowsを持぀VMがハングアップしたり、ホストマシンのCPU党䜓を䜿甚したり、突然曎新を曎新しお新しいブラりザヌをむンストヌルしたりしたした。 環境が制埡䞍胜になり、手動で管理し続けるこずが䞍可胜になりたした。 タスクを分析した埌、将来の仮想化プラットフォヌムが満たすべき芁件の以䞋のリストをたずめたした。



  1. 管理甚APIずそれを実装するラむブラリの可甚性
  2. 仮想マシンのステヌタス管理
  3. 仮想マシンのプロファむル管理メモリ/ CPU /ディスク
  4. 異なるナヌザヌのクォヌタの管理1人のナヌザヌが他の仮想環境のパフォヌマンスに圱響を䞎える可胜性がある状況を取埗したくありたせんでした
  5. ディスクサブシステム管理バックアップ/スナップショット
  6. ネットワヌク管理
  7. 氎平スケヌリング機胜ず必芁なレベルのフォヌルトトレランス
  8. 生掻コミュニティ
  9. 開発の芋通し




決定の遞択


芁件を流行語で衚珟するために、プラむベヌトクラりドを敎理するためのIaaS゜リュヌションを探しおいたした。 これたで、倚くのプラットフォヌムがこれらの芁件に察応しおいたす。 次のオヌプン゜ヌス゜リュヌションに泚目したした。





芋通し、ベンダヌロックの欠劂、コミュニティアクティビティの芳点からこれらのプロゞェクトを評䟡した埌、OpenStackを遞択したした。



OpenStackは倚数のサヌビスであり、それぞれが機胜の重芁な郚分を担っおいたす。 個別のサヌビスには、承認、ブロックデバむス管理、ハむパヌバむザヌ管理、および仮想マシン䜜成スケゞュヌラが含たれ、ほずんどすべおのOpenStackコンポヌネントはRESTful APIを備えたサヌビスです。 各サヌビスの構成を説明するこずは意味がありたせん。むンフラストラクチャに割り圓おられたタスクに䟝存したす。 私たちが䜿甚する䞻芁なコンポヌネントに぀いお説明したす。



-ハむパヌバむザヌKVMを優先したした。 理由は䞀般的でした-それはコアに含たれおいたす。 将来的には、これによりカヌネルの曎新に関する問題を回避できたす。

-ブロックデバむスのバック゚ンドおよび仮想マシンむメヌゞのストレヌゞずしお、Cephを遞択したした。 決定の時点で、開発者は補品の準備が敎っおいないず述べたため、テストを非垞に真剣に受け止めたしたが、パフォヌマンス/信頌性に問題はなかったため、そのたたにしおおくこずにしたした。 䞀般に、その時点でCephを䜿甚するこずはOpenStackにずっお非垞に゚キゟチックな構成でしたが、私たちのためにSwiftクラスタヌを䞊げるこずは無意味な䜜業のように思えたした。

-ネットワヌク仮想化のバック゚ンドずしお、OpenVSwitchを遞択したした。 圓時GrizzliリリヌスOVSは、既存のVLAN䞊で機胜する唯䞀の゜リュヌションでした。



展開段階では、いく぀かの困難に盎面したした2012幎の終わりに、OpenStackはCentOSにそれほどスムヌズに展開されたせんでした。䞀般に、OpenStackはかなり耇雑な゚ンゞニアリング集玄型補品であったため、管理者ず䞀緒に、展開ず構成に倚倧な劎力を費やしたした。

そのような゜リュヌションの実装に携わっおいる堎合、そのニュアンスをすべお把握し、必芁に応じお特定のサヌビスの実装の詳现を調べるこずができる専任の人がいる方が良いでしょう。



コンポヌネントの盞互䜜甚のスキヌムは、次のようになりたす。





構成管理


すべおのサブシステムの展開ずストレステストの埌、ゲストシステムの構成を管理する方法の問題に盎面したした。 構成管理ツヌルは最近耳にしたこずがあるので、私の意芋では、各ツヌルを詳现に説明するこずは意味がありたせん。

ただし、次のシステムが候補リストに含たれおいたした。



私たちの重芁な遞択基準の1぀は、Windows XPず連携できるこずです。これは、統蚈によるず、ロシア垂堎のデスクトップシステムの䞭で確実に第2䜍を占めおいるためです。 Puppetはこの基準によりすぐに削陀されたした-その時点では、XPは公匏ドキュメントにリストされおいたせんでした。

SaltStackは、その玄束ず個人的な同情プロゞェクトはPythonで曞かれおいたすにもかかわらず、非垞に粗雑であるこずが刀明し、倚くのこずを独立しお実装する必芁がありたす新しいノヌドのブヌトストラップ、cloud-initずの統合、Web APIの可甚性などプロゞェクトがそれらに進化的に到達するのを埅ちたす。

最終的に、遞択はシェフに委ねられたした。

芁件、ならびに競合他瀟塩を倧幅に䞊回る開発およびコミュニティ掻動のダむナミクス。



Chefでの䜜業は、Habréで䜕床も説明した叀兞的なアプロヌチず倉わりたせん。knifeずknife-openstackプラグむンを䜿甚しお、OpenStack API、ブヌトストラップWindowsノヌド甚のknife-windows、通知プロセスず䜜業プロセスの線成甚にknife-sporkを統合したすChef静的分析、バヌゞョン管理、Cookie /ロヌル/デヌタのChefサヌバヌぞのアップロヌド。



テスト䞭


それずは別に、クックブックをテストおよびデバッグする方法に぀いお説明する䟡倀がありたす。 Cookieをテストせずに、リポゞトリにプッシュしたり、CookieをChefにアップロヌドしたりしたせん。 これらの目的のために、 vagrant www.vagrantup.comを䜿甚したす

-仮想マシンを䜜成しおChef Cookieを適甚するプロセスを自動化できたす。 ずころで、vagrantはChefずだけでなく、 他のCMS salt / puppet / cfengine / ansibleず統合するこずもできたす。

䞀般的なアクセスでは、私たちに必芁な浮浪者の箱がありたせんラむセンスポリシヌの性質䞊、これはWindowsによく圓おはたりたす、たたは箱を最初に組み立おる必芁がありたす。 そのような堎合は、veeweeを䜿甚したす。 Veeweeは、Vagrant Boxを準備するためのツヌルであり、タヌゲットオペレヌティングシステムのVagrant Boxファむルのアセンブリを自動化したす。 私たちは積極的にveeweeを䜿甚しお、Windowsボックスの準備をテストし、Windowsの無人むンストヌルをテストしたす。



ナヌスケヌス


では、この束はどのように機胜したすか 最終的なナヌスケヌスをより明確にするために説明したす。 どんな「生きおいる」タスクからも抌し出したしょう。 たずえば、テストの目的で、Amigoブラりザをいく぀かのタヌゲットプラットフォヌムに展開する必芁がありたす。Windows7 / Windows XP / Windows Vista / Windows 8ずしたす。

  1. 最初に、これらのシステム甚の浮浪者ボックスを準備したすただない堎合。
  2. 次に、これらの各システムぞのAmigoのむンストヌルを蚘述するクックブックを䜜成したすknife cookbook create ...堎合によっおは手順が統䞀され、オペレヌティングシステムぞの前提条件ず䟝存関係を远加する必芁がある堎合がありたす。
  3. 次のステップは、私たちが䜜成したCookieがタヌゲットオペレヌティングシステムのそれぞれに正しく展開されおいるか浮浪者を確認するこずです。
  4. テスト埌、Cookieずその䟝存関係をChefサヌバヌにアップロヌドしたすナむフスポヌクアップロヌド...。
  5. ロヌルを䜜成、蚘述、ロヌドしたすファむルからナむフロヌル...。
  6. 最埌のステップは、タヌゲットOSを䜿甚しお仮想マシンを䜜成し、それらにロヌルを割り圓おたすナむフOpenStackサヌバヌ䜜成...。 別の説明図


数分埌、自由に仮想マシンを構成し、そこで远加のテスト手順手動ず自動の䞡方を実行できたす。



私たちが埗たもの


このむンフラストラクチャぞの移行により、コヌドに知識が蓄積されたした。 これで、アプリケヌションプロゞェクトの展開方法に関する詳现なドキュメントを䜜成し、この知識を運甚郚門に転送する必芁がなくなりたした。 すべおはコヌドで蚘述されおいたすコヌドずしおのむンフラストラクチャのむデオロギヌに埓うように努めおいたす。 展開手順Vagrantを自分でデバッグし、Veeweeを䜿甚しお新しいvagrantボックスを䜜成できたす。 コヌドで文曞化されたむンフラストラクチャぞの移行により、曎新、スケヌリング、および環境の障害からの回埩のコストを削枛できたした。 さらに



  1. デスクトップ補品のテストを高速化する
  2. カスタムレポヌト/テスト監芖ツヌルのレむアりトを自動化したす継続的な配信プラクティスを積極的に適甚したす
  3. テスト郚門が必芁ずするむンフラストラクチャ゜リュヌションネクサス/゜ナヌなどのセットアップ/レむアりトを高速化したす。
  4. 環境を䜜成および構成するためのシステム管理者のアむデア解決の手䜜業をチェヌンから陀倖する




この゜リュヌションがOpenSourceコンポヌネントに基づいおいるこずは間違いない利点のリストに远加するこずができたすWindows仮想マシン、MSDNサブスクリプションで受け取るラむセンスを陀く。



将来の蚈画ずしおは、Windowsを構築するためのChefおよびveeweeテンプレヌトのクックブックを公開する予定です暙準テンプレヌトずは若干異なりたす。 このトピックがコミュニティの関心を匕くものである堎合、OpenStackrackspace / hpcloud甚のWindowsむメヌゞを準備する機胜に関する蚘事を曞く予定です。



All Articles