存続期間の短いプライベートVMのテクノロジー


8

ソフトウェアコンポーネントの有効期間が短い(CIとテストビルド)を実行するシステムを構築しようとしています。それは、それぞれがプライベートホストに存在するという私の要件によれば必須です。準仮想化オプションも含めるように定義しています。頭痛が大幅に軽減されるようです。

私はMacで作業しているので、ほとんどすべてのテクノロジーが使用できなくなり、libvirtquemuなどが機能しなくなります。ただし、Debianへの展開を計画しています。そのため、ホストマシンとゲストドメインのプロビジョニングをスクリプト化できれば、Debianで実行されるものはすべて元に戻ります。

私の意図したセットアップは、Debianインストーラーをブートストラップするために使用できることでした。つまり、ブート時にマシンが自動的にプロビジョニングされることを意味します(Chef、Puppet、Babushka、問題ありません)-そのプロビジョニングの一部は、コンテナの起動に使用できるテンプレートrootfs。コンテナー自体もプロビジョニングする必要があります。これにより、コンテナーが起動したときに、コンテナーが実行する必要がある作業を認識し、その作業を実行して終了できます。

要するに、ここに私が必要とするワークフローがあります:

  1. マシンを(仮想またはその他の方法で)ブートし、作業を行う準備をします。
  2. 作業は、chef / puppet / babushka / etcによってインストールされたスクリプトによって実行される必要があります
  3. 作業が始まると、作業を行うために仮想マシンを起動する必要があります。
  4. VMは作業を行い、終了し、そのリソースを親/ホストマシンに解放します。(妥当なハードウェア上でこれを少なくとも数百のゲストVMに拡張することが重要です)

私は次のことを試して、以下に示す理由のためにそれらを放棄するようになりました:

ホストマシンの場合

  1. InstalinuxのプレシードDebianマイクロISOイメージ(LinuxCOEがサポートされている)(悪い: まったく機能しなかった(「カーネルモジュールが見つかりませんでした」(InstalinuxイメージがFTPリポジトリと同期していないため、このソリューションは非常に壊れやすいため、また、インストール後、既知のSSHキー、ホストキーなどをマシンにドロップするためのスコープをあまり許可していません。ファイアアンドフォーゲットのようです。結局、実行中のマシンがありますが、アクセスできません。。)
  2. プレシードDebian netinst ISO(悪い上記と同じ問題。ただし、ISOとFTPリポジトリの間にカーネルの相違がないため、通常はインストールが完了します。インストール後の範囲はまだ限られています。 良い絶対に確実で再現性があり、 MacやベアメタルマシンのVMテクノロジスタックで簡単にスローできればどこでも機能しますが、十分にポストインストールできません
  3. rootfsのを構築し、ブート可能なハードディスクイメージとしてそれをコンパイルする様々な方法が(悪い少し私は作業は地獄のように壊れやすいし得ることができますどのような、実際のマシン上にインストールすることは困難であり、複雑なビルドプロセスであるだろう。 良い: もし私はそれを機能させることができました、これはマシンをsshキー、ホストキー、ホスト名、Gitからインストールされたソフトウェア、およびその他のもので指定された仕様に事前設定するための最も広い範囲を提供するようですが、問題はどのようにパッケージするかです配布用、またはレクリエーション用のスクリプトの作成方法。

正直なところ、VMを何もない状態から実行中の機能している有用なシステムにするために人々がどのようなテクノロジを使用することが期待されるかはわかりません。私には3つのステップのように思えますa)オペレーティングシステム、b)システム構成(ユーザーなど)、そしてc)ファイルシステムの変更。

ゲスト(仮想)マシンの場合:

  1. 多くのこと、私はここでの答えは、で作成された読み取り専用のrootfsとdebootstrap、この特定のインスタンスに対して実行される作業(ジョブマニフェスト)を含むLXCコンテナー上の特別なパーティションであると思います。OSの構築、起動、ユーザーの作成、gitからのソフトウェアのチェックアウト、および作業の実行に関する通常の注意事項をすべて挿入します。

どのツールに手を伸ばせばよいのか本当にわからないのですが、問題は十分に解決されているようです。しかし、どこから始めればいいのかわかりません。

ほとんどの人は、ホストマシンについて、仮想化テクノロジを選択し、マシンを起動して動作状態にしてから、スナップショットを作成するように提案しているようです(libvirtは、このための論理的なお気に入りのようです)。スナップショットを使用して、後続のインストールをテスト用に、または本番環境で起動します。

ゲストマシンでは、lxcが最も簡単なオプションを提供しているようですが、コンテナのバックグラウンド化と、コンソール経由でのコンテナへの接続が現在のすべてのカーネルで壊れており、安定版のDebianで利用できるlxcの最新バージョンは18か月以上前のものです、そして広く使用されている多くの機能が不足しています。

通常、私はアプリケーション開発者であり、サーバーレベルのテクノロジを使用することはあまりありません(そして、SFがこの質問に「主観的すぎる」とフラグを立てることは確かです)が、どのツールに到達すればよいかは本当にわかりません。

最後の言葉は、このためにVagrantボックスを使用している1つの同様にスタックされたプロジェクト(travis-ci.org)を知っているということです。重要なサービスインフラストラクチャに使用されているテストVMの小規模なデスクトッププロビジョニング用に設計された、かなり鈍い道具、大きくて遅い、ルビー指向のツールのように見えますが、私はそれらの人の一部も知っており、私よりも賢いです、多分彼らはただあきらめた

助けてくれてありがとう。


本当のこと...これは間違いなく自動化できます。システムの構築は簡単です。私はあなたが仕事をスクリプト化するか、あなたが選んだ構成管理ツールを使うことができると仮定しています。この取り組みの目的地または最終結果に関する詳細情報が参考になります。あなたはプライベートクラウドソリューションとLXCのようなものの
境界を越えてい

絶対に、ポイントは私のチームと私(Macユーザー)が繰り返し構築できるような方法でホストを構築することができることですホスト我々はLCXのゲストで開発することができ、内部を、しかし、ビルドという方法で、私達は展開にもできることそれを生産に。アプリケーションのツールはすべてRubyで記述されており、ゲストにはLXCを使用したいと思っています。ホストマシンは当然のことながら長寿命ですが、ゲストの一般的なライフタイムは2〜10分であるため、インフラストラクチャ全体は実際は短命です。開発とプロダクションについてであり、再現可能なプロセスを持っています。
Lee Hambley 2013

回答:


2

いくつかのアイデア:

  1. 「合理的なハードウェア上の何百ものVM」という点から、私は(個人的な経験なしに)ネットワーク経由で起動するか、NFSを介してほとんどのボリュームスペース(/ usr)を共有するVMを思い浮かべます。VMの類似性によって異なります。
  2. 「私が仕事に就くことができるものは、地獄のように壊れやすかった」信じがたい。あなたは問題が何であるかをより正確にできますか?
  3. 「実際のマシンにインストールするのは難しいでしょう」VMを作成するために必要な1クリックのソリューションに対して、何に比べても「難しい」という意味ですか?私は尋ねます:これはどれほど難しいですか、そしてこれはどれくらいの頻度で起こりますか?それぞれのハードウェアのinitrdを再作成して、違いは何ですか?
  4. 「しかし、私はそれを十分にポストインストールすることはできません」スクリプトのダウンロードをブートプロセスの一部にすることができます。VMはDHCP(VMのMACアドレスにハード構成)によってIPを取得し、SambaはクライアントのIPアドレスに応じて、さまざまなポストインストールスクリプトをVMに配信します。

ネットワークブートの場合は+1。私はそれについて完全な答えを書くのに十分な経験はありませんが、PXEサーバーからブートすることにより、物理的および仮想の両方の何百ものマシンを展開している場所にいることがわかります。つまり、VMごとに個別のディスクイメージを使用する必要はありません。
Moshe Katz

1

あなたの投稿を読んでいる間、私はvagrantプラグインを使ったvagrantとjenkinsがあなたのニーズにかなりよく合うと思っていました。実際に話しているVMの数を実際に処理できるボックスがあっても、環境を維持するツールのオーバーヘッドに気付くことはありません。


0

アップルとDebianで動作するものを使用して、私が試した唯一のものは仮想ボックスです。ここでvirtualboxを使用して良かったのは、macシステムでVMを構築し、同じバージョンのvirtual boxを使用してそれをDebianシステムにコピーすると、起動することです。

仮想ボックスサウンドを使用して何百ものvmsを使用する場合、vboxmangeインターフェイスを使用して各vmに必要な固有の情報をスクリプト化するのにかなりの時間を費やします。ハードドライブのuuidと同様に、ネットワークインターフェイスのMACアドレス。

ベースシステムが同じ方法で構成された同じソフトウェアを使用する場合は、仮想ボックスでシステムのスナップショットを作成してフリーズできます。そのため、行われた変更はフリーズしたスナップショットに上書きされず、代わりに新しい一時ストレージ領域に書き込まれます。次に、VMをシャットダウンし、スナップショットに戻します。これで、テスト中に行われた変更を行わずに、クリーンなシステムで作業できます。これはすべてvboxmangeを使用してスクリプト化できます。

スナップショットを使用して、そのVMイメージの数百のコピーを作成することもできます。vboxmangeスクリプトインターフェイスを使用して、uuidとmacアドレスなど、重要な方法で一意のコピーを作成します。次に、起動スクリプトを呼び出して、変更内容、テストのためにVMに適用する必要がある構成、またはさまざまなテストを実行します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.