web-dev-qa-db-ja.com

LXCとは何か、そしてそれが何のために役立つかを平易な英語で説明する

  • LXCとは何ですか?
  • それは何のために役立つのですか?
  • LXCと一般的な仮想化の違いは何ですか?
9
Daniel Cukier

「平易な英語」とは、技術者でない人を意味する場合、その違いを簡単に説明することはできません。その髪は細すぎて、慎重に検討しなければ分割できません。

「平易な英語」とは、技術者と話をし、少なくとも技術的なトピックについてある程度理解している管理職のタイプを意味する場合、次の言葉を提出します。


これは、仮想化の別の形式です。

VMWare ESXiを見ると、これはいわゆる完全仮想化を実行する完全なハイパーバイザーです。ハードウェア上で実行されている仮想化システムの間には、非常に小さなレイヤーがあります。完全なハードウェア仮想化があり、仮想マシンで実行されているOSはハイパーバイザー自体から完全に独立しており、期待されるすべてのハードウェアが表示されます。

さらに一歩進んで、VMWare Player、Workstation、ESX(ESXiではない)、VMWare Serverなどを見てください。そうすれば、ハイパーバイザーの役割を提供する完全なオペレーティングシステムができあがります。ただし、仮想マシンには、仮想ハードウェアの完全な配列が引き続き表示されます。

もう1つのアプローチは準仮想化であり、Xenはこれをかなり長い間続けてきました。この形式の仮想化では、ゲストオペレーティングシステムは、仮想化されており、その環境で機能するように変更されていることを認識しています。この必要性は、特別な準仮想化ドライバーだけである場合があります。また、カーネルを完全に変更する必要がある場合もあります。

LXC、またはLinux Containersは、さらに別のステップです。この場合、まったく同じオペレーティングシステムの複数のインスタンスを実行しています。カーネルは同じでもかまいませんが、OSコンテナごとに複数のユーザースペースが実行されています。各コンテナには、異なるファイルシステムがある場合とない場合があります。

コンテナは、同じユーザースペースを持つシステムでは利用できない方法で、プロセス間の強力なセキュリティ分離を提供する方法を提供します。 Unixライクなオペレーティングシステムにはかなり長い間「chrootjail」がありましたが、プロセスの分離や、jail内のプロセスによって消費されるリソースを制限する機能は提供されていません。このようなプロセスをコンテナ化することにより、リソースの使用を制限し、個別のIPアドレスをプロセスに割り当てることができ、ユーザースペースを悪用するセキュリティの脆弱性をシステムの他の部分から封じ込めることができます。

LXCと他のタイプの仮想化をどこで使用しますか?状況によって異なりますが、LXC should仮想化のペナルティは、他のどの仮想化方法よりも少なくなります。これは、ハイパーバイザーが、会話を期待する一連のOSイメージのハードウェアになりすますのではなく、すべてのユーザースペース呼び出しを仲介する同じカーネルであるためです。物理ハードウェアに。そのため、同じOSバージョンを必要とする一連の処理があり、更新のために同時に再起動できる場合、LXCはそれらすべてを安全にリソース管理で実行するための低コストの方法を提供できます。

23
sysadmin1138

LXCは、カーネルでシステム/プロセスを分離するための手段です。システムは「コンテナ」にロックされているため、そのコンテナの外部にあるものと相互作用することはできません。したがって、名前はLinuxContainersです。

これは多くのことに役立つ可能性があります。その1つは、マシン上で実行されているサービスを分離することです。これらのサービスの1つが危険にさらされても、ホストシステム自体(および独自のLXCで実行されている他のサービス)は影響を受けません。これは、各ユーザーが相互作用する心配をせずに、各ユーザーに独自のシステムへのrootアクセスを許可するための愚かな手段としても使用できます。

他のほとんどの「一般的な」仮想化では、ハードウェアデバイスをエミュレートする必要があるため、リソース使用量の大きなオーバーヘッドが発生します。各LXCにはハードウェアへの直接アクセスが制限されているか、まったくアクセスできないため、LXCはハードウェアデバイスに対していかなる種類のエミュレーションも必要としません。各システムはホスト上で「実行」されていますが、コンテナーの外部には影響を与えません。このタイプの仮想化は、OSレベルの仮想化(google it)と呼ばれています。これは基本的に、Linuxコンテナを実行するためのオーバーヘッドがほとんどないか存在しないことを意味します。そのため、特定のマシンに数百のLXCをインストールできますが、「一般的な」仮想マシンソフトウェアを使用すると、リソースがすぐに不足します。

私は実際には Linux-Vserver に精通していますが、理論はほとんど同じです。

5
Nicholi

それを理解する最も簡単な方法は、chrootが何をするかを学ぶことです。 chrootを使用すると、unixライクなシステムのフォルダに、それ自体が完全なシステムであるかのように「ログイン」できます。言い換えると:

あなたが持っている場合:

 /
   /boot
   /etc
   /home
   ...

など、some_new_installディレクトリを追加できます。

 /
   /some_new_install
      /boot
      /etc
      /home
      /usr
      ...
   /boot
   /etc
   /home
   /usr
      ...

/ some_new_installにログインします。たとえば、/ some_new_install/etcは新しい/ etcであり、元の/ etcは非表示になっており、(ほとんどの場合)アクセスできません。/usr/binは、プログラムが異なるため、元のバージョンとは異なる場合があります。 MySQLは/ usr/bin/mysql内の同じプログラムである可能性がありますが、/ var/lib/mysql内のデータは異なります。

ファイルシステムは仮想化されています。元のファイルシステムを分割し、そのリソースを共有し、それらのリソースを他の仮想化されたリソースから分離しました。

これはかなり素晴らしいです。 UNIXのまったく新しい仮想コピーを実行する代わりに、1つの追加プログラムを実行するだけで、仮想ファイルシステムにジャンプして、同じカーネル、同じライブラリ(シンボリックリンクを使用した場合)などで実行できます。これは、よりもはるかに効率的です。 XenやVirtualBoxのようなもの。

問題は、これらのプログラムの1つ、たとえばMySQLがおかしくなり、すべてのCPUを使用してディスク上でスワップを開始した場合でも、CPUではなくファイルシステムのみが仮想化されているため、マシンの残りの部分に影響を与えることです。または基礎となるディスクパフォ​​ーマンス。 IPアドレスとポートも仮想化されていないため、2つのプログラムがネットワーク上で情報を送信する場合、それらは同じIPから送信し、競合を引き起こす可能性があります。同様に、mysqlの2つのコピーがポートでリッスンしようとすると、ポートが使用されているため、2番目のコピーは失敗します。

LXCは、ファイルシステムだけでなく、ネットワークのips/ports/interfaces、CPU、メモリ使用量なども仮想化することでこれを解決します。

LXCは完全な仮想マシンほど安全ではありませんが、一般的には優れたソリューションです。結局のところ、オペレーティングシステムは、リソースを安全に共有することがすべてです。ほとんどの場合、それを行うために複数のOSを実行するのはばかげています。必要なのは、より優れた分離を備えたより優れたOSだけです。それがLXCや同様のツールが提供するものです。

3
user99963