|
現: 2024-06-19 (水) 16:14:54 yuji ![ソース](https://yueno.net/xoops/modules/xpwiki/skin/loader.php?src=page_white_text.png) |
| + | * 仮想化技術 [#j751986e] |
| + | 仮想化というのは昔(1960年代)から使われていて,コンピュータ機能,コンポーネント,ネットワーク全体やその他の機能などのコンピューターリソースを効率よく使うために開発されてきた。~ |
| | | |
| + | 仮想化技術に共通するものは,カプセル化によって「機能を隠蔽」する。仮想化は,例えばアクセスを多重化したり,別の場所にあるリソース同士を統合したり,制御システムを単純化したりすることで,根底にある実装を隠蔽した外部インタフェースを作成して利用する。 |
| + | |
| + | - プラットフォームの仮想化~ |
| + | これはコンピュータ機器をエミュレーション(シュミレーション)すること。~ |
| + | - プロセスやリソースの仮想化~ |
| + | プロセス単位の集合化などをエミュレーション(シュミレーション)すること。~ |
| + | |
| + | 仮想化はコンピュータ以外でも重要で,制御システムは複雑な機器の仮想化されたインタフェースを実装したものとも考えられる。~ |
| + | 例えば,最近の自動車のアクセルは単にエンジンへの空気吸入量を調整するだけではなくなってきている。~飛行機のフライ・バイ・ワイヤでも,パイロットの操作をより単純化するためのインタフェースになっている。~ |
| + | |
| + | ビジネスでの仮想化だと,事務所や店舗を構えたビジネス形態から,インターネット上の店舗などに移行していっているのも,仮想化の一つかもしれない。 |
| + | |
| + | ** プラットフォームの仮想化 [#vec3cd82] |
| + | プラットフォームの仮想化は,ハードウェアプラットフォーム上でホストプログラム(制御プログラム)が擬似的なコンピューター環境を生成し,ゲストソフトウェアに対して「仮想マシン」として提供するもの。~ |
| + | この時,ゲストソフトウェアは通常はOSであるのが一般的で,あたかも独立したハードウェアを持つコンピューターにインストールされたかのように動作する。~ |
| + | |
| + | 単一のマシン上で複数の仮想マシンをエミュレート(シミュレート)することが多く,仮想マシンの個数はホストのハードウェアリソースによって制限される。~ |
| + | |
| + | また,ホストOSとゲストOSは,同じである必要はない。~ |
| + | |
| + | ゲストソフトウェアは特定の周辺機器(ハードディスクやネットワークカード)へのアクセスを必要とすることが多く,その場合,ホストOSはゲストソフトウェアに対して周辺機器の機能を提供する必要がある。~ |
| + | |
| + | プラットフォーム仮想化を行う場合,いくつかの手法がある。~ |
| + | - エミュレータ(シュミレータ)~ |
| + | 仮想マシンによってハードウェア全体を擬似的に再現する。~ |
| + | ''全く異なるアーキテクチャー(CPUが違う等)のハードウェア向けのゲストOSを,修正することなしに動作させることができる。''~ |
| + | これは,新しいCPUなどのハードウェア開発が完了する前に,ソフトウェアを並行して開発する手法として以前から使われてきた。~ |
| + | 具体例としては,[[Bochs:https://bochs.sourceforge.io/]],[[PearPC:https://pearpc.sourceforge.net/]],Sim,[[Hercules emulator:https://en.wikipedia.org/wiki/Hercules_(emulator)]](IBMのメインフレームのエミュレータ),ファミコンエミュレータ,[[Mame:https://www.mamedev.org/]]などがある。~ |
| + | 実際のエミュレーションのための技術は,様々な物が使われている。~ |
| + | - ネイティブ仮想化~ |
| + | ''同じアーキテクチャーのプラットフォーム上で,ゲストOSを隔離された状態で無修正で動作させる仮想マシン。''~ |
| + | この方法は[[IBM CP-40:https://en.wikipedia.org/wiki/IBM_CP-40]]などが起源と思われる。具体例としては,[[VMware Workstation Player/Server:https://www.vmware.com/]],[[Parallels Workstation/Desktop:https://www.parallels.com/jp/]],[[Oracle VirtualBox:https://www.virtualbox.org/]],[[Microsoft Virtual Server/PC:https://ja.wikipedia.org/wiki/Windows_Virtual_PC]],[[QEMU:https://www.qemu.org/]],[[Adeos:http://home.gna.org/adeos/]],[[Mac-on-Linux:https://mac-on-linux.sourceforge.net/]],[[VirtualLogix VLX Virtualizer for VT:https://en.wikipedia.org/wiki/VirtualLogix]],などがある。~ |
| + | - ハードウェアによる仮想化~ |
| + | ゲストOSにハードウェアリソースを割り当て,隔離された状態で動作できるようにする仮想マシン。~ |
| + | 2005年頃,IntelとAMDが仮想化をサポートするハードウェア機能をCPUに実装してから利用できるようになった。~ |
| + | -- 完全仮想化~ |
| + | 使用するゲストOSに全く手を加えることなく,そのまま仮想マシン上で実行出来る(ハードウェアをエミュレーションする)タイプのもの。~ |
| + | 具体例としては,[[VMware ESX/ESXi:https://www.vmware.com/]],[[Linux KVM:https://linux-kvm.org/]],[[Microsoft Hyper-V:https://ja.wikipedia.org/wiki/Hyper-V]],などのハイパーバイザー型と呼ばれているものがある。~ |
| + | -- 準仮想化~ |
| + | ゲストOSに修正を加えて,特殊なAPIを提供して動作する仮想マシン。このような特殊なAPIをハイパーバイザシステムコールと呼ぶことがある。~ |
| + | Citrix XenServer,Win4Lin 9x,Sun Microsystemsの論理ドメイン,VirtualLogixのVLX Virtualizer,TRANGO,などがある。~ |
| + | -- 部分仮想化~ |
| + | 特にメモリ空間などのハードウェア環境に限って,複数の実体があるようにエミュレート(シミュレート)する仮想マシン。これは仮想記憶とも呼ばれている。~ |
| + | プロセスが同時並行して動作出来るようになるが,ゲストOSが動作することは出来ない。~ |
| + | 一般には仮想マシンとは見なされないが,仮想化技術としては重要でCTSSやIBM M44/44Xなどで使われてMVSへと受け継がれた。~ |
| + | その後,Unix,Linux,Microsoft Windows,なども基本的にこの手法を採用している。~ |
| + | - OSレベルの仮想化~ |
| + | 物理サーバーをOSレベルで仮想化し,複数の仮想サーバーを単一の物理サーバー上で動作させる。ホストOSとゲストOSは同一となる。~ |
| + | あるゲストOS環境で動作するアプリケーションから見れば,独立したシステムで動作しているように見える。~ |
| + | 具体例としては,Linux-VServer,Virtuozzo,OpenVZ,LXC (Linux Containers),AIXワークロードパーティション (WPAR),Solaris Containers,FreeBSD jail,などがある。~ |
| + | |
| + | ** プロセス・リソース仮想化 [#t4b1cbe3] |
| + | アプリケーション単位のプロセスでの仮想化や,補助記憶装置のボリューム,名前空間,ネットワークリソースといった特定のシステムリソースの仮想化も生まれた。~ |
| + | - アプリケーション仮想化~ |
| + | セキュリティや信頼性・移植性を強化する目的で,アプリケーションを仮想的にカプセル化された環境で隔離して実行すること。~ |
| + | 仮想環境はアプリケーションの実行に最低限必要な要素を備えていて,OSとアプリケーションの間の層として動作する。~ |
| + | 例えば,''[[Java VM:https://docs.oracle.com/cd/E19620-01/805-5818/ch1intro-6/index.html]]'',[[Microsoft Application Virtualization:https://learn.microsoft.com/ja-jp/microsoft-desktop-optimization-pack/app-v/appv-getting-started]],[[Altiris:https://en.wikipedia.org/wiki/Altiris]],[[Citrix XenApp:https://docs.citrix.com/ja-jp/xenapp-and-xendesktop/7-15-ltsr/technical-overview.html]],''[[Docker:https://www.docker.com/ja-jp/]]'',などがある。~ |
| + | 上記の各種仮想化とは異なる手法で,かつてのSmalltalk,Forth,Tcl,Pコードマシンなどのインタプリタ指向言語の流れを汲むものでもある。~ |
| + | - リソースの集約/連結/結合などにより,大きなリソースプールを形成する。~ |
| + | -- 仮想記憶は,個々のアプリケーションに別々の仮想空間を提供し,メモリや補助記憶装置の不連続なリソースから連続的な仮想アドレス空間を利用可能にする。~ |
| + | -- RAIDと論理ボリュームマネージャーは,複数のディスク装置を統合して1つの大きな論理ディスクにする。~ |
| + | -- ストレージエリアネットワークでよく使われる技術で,物理ストレージから論理ストレージに抽象化するストレージ仮想化。~ |
| + | 物理ストレージのリソースを1つに集約し,そこから論理ストレージを生成する。~ |
| + | 物理ストレージ装置はネットワーク上に分散配置可能だが,ユーザーから見れば単一のストレージに見えて結果的に集中管理可能となる。~ |
| + | -- チャネルボンディングとは,複数の通信路(インタフェース)を1つの高スループットリンクとして使用する。~ |
| + | -- Virtual Private Network(VPN)とネットワークアドレス変換(NAT)は,ネットワークの名前空間を仮想化する。~ |
| + | - コンピューター・クラスターやグリッド・コンピューティングは,上述の各種技術を使って複数のコンピューターから仮想化された大きなコンピューターを形成する。~ |
| + | - パーティショニングは,ディスクやネットワークなどの単一のリソースを分割し,利用しやすい大きさや速度の多数のリソースとして利用可能にする。~ |
| + | |
| + | ** 仮想化の使用例 [#xe1a9902] |
| + | - サーバ・コンソリデーション~ |
| + | 多数の物理サーバを仮想マシンによって1つ(あるいは少数)のサーバに統合する。~ |
| + | - ディザスタリカバリ~ |
| + | 仮想マシンによって,一種の「ホットスタンバイ」環境を構築する。~ |
| + | バックアップ・イメージを仮想マシンで起動し,使用するワークロードをそちらに移行させる。~ |
| + | - テストと教育~ |
| + | OS開発などにおける評価や教育用途に仮想マシンを用いる。開発中のシステムがハングアップしても,該当する仮想マシンを再起動するだけで済む。~ |
| + | - ポータブルアプリケーション~ |
| + | USBメモリなどの可搬記憶媒体上にアプリケーションをインストールしておいて実行可能とする技術。~ |
| + | 例えば,Microsoft Windowsではレジストリを使用しているので,USBメモリ上のアプリケーションを直接実行できないという問題がある。これを仮想化によって解決する。~ |
| + | - ポータブルワークスペース~ |
| + | iPodやUSBメモリなどのマスストレージ機器上に,ポータブルなワークスペースを生成する仮想化技術。次のような製品がある。~ |
| + | -- アプリケーションレベル~ |
| + | Thinstal:可搬記憶媒体にインストールされたアプリケーションを,ドライバを使わずに実行可能にする。~ |
| + | -- OSレベル~ |
| + | MojoPac,Ceedo,Aargo,U3:可搬記憶媒体にアプリケーションをインストールし,別のPC上で利用可能にする。~ |
| + | -- マシンレベル~ |
| + | moka5,LivePC:可搬記憶媒体上に仮想マシンからOSやアプリケーションを含めた完全なソフトウェア環境をインストールし,任意のマシン上で実行可能にする。~ |
| + | - ハードウェア仮想化技術~ |
| + | x86仮想化:IntelのVanderpoolとAMDのPacifica。~ |
| + | Sun UltraSPARC T1 hypervisor。~ |
| + | IBM PowerVM(Advanced POWER virtualization)。~ |
| + | |
| + | * 仮想マシン(VM)とコンテナ [#hedeb319] |
| + | |
| + | ** 仮想マシン(VM) [#jee0ebfa] |
| + | 仮想マシン(Virtual Machine: VM)は,通常は物理的に存在しているマシンを仮想的に作り出して動作させることを仮想マシンと言っている。~ |
| + | 単一の物理リソースを複数の論理リソースに分けることで,まるで別のマシンであるかのように動作させられる。~ |
| + | |
| + | このような仮想マシン(VM)には,技術的には大きく分けて2種類の方式がある。~ |
| + | - ホストOS型~ |
| + | - ハイパーバイザー型~ |
| + | |
| + | *** ホストOS型 [#i50a5136] |
| + | ホストOS型は,あるOS上で動作する仮想化ソフトウェアをインストールし,その仮想化ソフトウェアにより仮想マシンを動作させる方式。~ |
| + | |
| + | 具体例としては,''VMware Workstation Player/Pro'',VMware Fusion,''Oracle VirtualBox'',Parallels Desktop,''QEMU'',Microsoft Virtual Server/PC,Windows7のXPモード,なんかがある。~ |
| + | |
| + | これらの仮想化ソフトウェアにより仮想的なハードウェアを作って,ゲストOSやアプリケーションを動かしている。~ |
| + | //#ref(host.png,,50%) |
| + | |
| + | ホストOS上で仮想環境が動作しているので,もしホストOSにトラブルが発生した場合,アプリケーションとして動作している仮想マシンにもトラブルが波及してしまう。~ |
| + | |
| + | - メリット~ |
| + | すでに利用しているPCやサーバー機に追加で仮想化ソフトウェアをインストール可能なので,比較的手軽に導入出来る。~ |
| + | - デメリット~ |
| + | ハードウェアへアクセスするにはホストOSを経由するので,オーバーヘッドが発生して十分な性能が出づらい。~ |
| + | ハードウェア・リソースは排他的に利用することになり,またその排他的にアクセスするための管理インターフェースが必要となる。~ |
| + | |
| + | *** ハイパーバイザー型 [#vbccee8f] |
| + | ハイパーバイザー型は,コンピューターへ仮想化ソフトウエアを直接インストールして,その環境で仮想マシンを動作させる方式。~ |
| + | 具体例としては,''VMware vSphere ESXi'',''Microsoft Hyper-V'',''Linux KVM'',''Xen'',なんかがある。~ |
| + | |
| + | すべてのゲストOSを仮想化ソフトウエアにより作成された仮想化環境で動かすようにしている。~ |
| + | //#ref(hyper.png,,50%) |
| + | |
| + | - メリット~ |
| + | ホストOSを必要としないため,ゲストOSがハードウェアを直接制御することが可能になる。~ |
| + | このため仮想マシンの速度低下を最小限に抑えられる。~ |
| + | 複数の仮想マシンを効率よく稼働させるための様々な仕組みが盛り込まれている。~ |
| + | - デメリット~ |
| + | 現在動作しているOSを一般的にはそのまま利用出来ない((Linux KVMやMicrosoft Hyper-Vでは,通常OSに追加機能としてインストールすることで,そのOSがハイパーバイザー型仮想化ソフトとして動作する。))。~ |
| + | 専用のコンピューターを用意して,構築していく必要がある。~ |
| + | |
| + | ** コンテナ [#gfdfe460] |
| + | プロセスを隔離した環境(他のプロセスへ影響を与えない)で起動したり,またそのプロセスの集合をコンテナと呼んでいるようだ。~ |
| + | |
| + | コンテナを複数実行したりすることで,プロセスの管理がしやすくなる。~ |
| + | //#ref(container.png,,50%) |
| + | |
| + | ホストOS型仮想マシン(VM)ではホストOSの上に仮想化ソフトウェアをはさんでゲストOSが存在しているが,コンテナではコンテナエンジンの上でコンテナプロセスが動作している。~ |
| + | |
| + | 特徴としては,以下のようなことがある。 |
| + | - 単一のOS上で隔離された複数のコンテナを実行することが出来る。~ |
| + | - ベースとなるOSと異なるOS用のコンテナは実行出来ない。~ |
| + | 例えば,Linux上でWindowsコンテナを動かすことは出来ない。~ |
| + | - コンテナ間でベースとなるOS(Kernel)は共有される。~ |
| + | - コンテナはプロセスとして実行されて,この時仮想化は行われない。~ |
| + | 仮想化と出来ることが似ているため,''コンテナ型仮想化''と言われることがあるが,''実際は仮想化ではない''。~ |
| + | - Linux上ではLXCやlibcontainerが,コンテナ実行に利用される。~ |
| + | |
| + | 以下のようなメリット・デメリットがある。~ |
| + | - メリット~ |
| + | -- 構成が仮想化よりも単純でOSなどは含まないため,サイズがコンパクトになる。~ |
| + | -- 単に実行プロセスを隔離するだけなので,マシン実行を仮想化するよりもオーバーヘッドが少ない。~ |
| + | -- 新しいコンテナの起動は,仮想マシン(VM)と比較すると遥かに高速となる。~ |
| + | - デメリット~ |
| + | -- OSと異なるシステムのコンテナを起動させることは出来ない。~ |
| + | -- OS(カーネル)を全てのコンテナで共有するため,OS(カーネル)に対する操作を個別に行うことが出来ない。~ |
| + | |
| + | *** 仮想マシン(VM)とのちがい [#g9239d13] |
| + | コンテナと仮想マシン(VM)との違いは,仮想化しているわけではないと言うこと。~ |
| + | |
| + | 仮想マシン(VM)はマシン単位での仮想化を行っているのに対して,コンテナはプロセスの実行環境を管理することによりプロセスを実行をしているだけ。~ |
| + | |
| + | コンテナでは仮想マシンやゲストOSは存在せず,コンテナに作成された環境の起動・停止は非常に高速でオーバーヘッドが小さくなる。~ |
| + | |
| + | 仮想マシン(VM)は,リソースの消費は大きいが自由度が高い。~ |
| + | 対してコンテナは,OSをホストと共有してしまう点では自由度は低いが,軽量で可搬性が高くなっている。コンテナ単位で再利用もしやすい。~ |
| + | |
| + | *** Dockerとは [#m3005f6d] |
| + | Docker=コンテナというイメージがあるが,Dockerは''コンテナをマネージメントするツール''の製品のひとつ。~ |
| + | |
| + | コンテナ技術というのは,なにもDockerだけではない。Linux上でコンテナを管理・実行するためのプラットフォームとして開発されたのがDockerという製品。~ |
| + | |
| + | *** Dockerのアーキテクチャー [#q7b490e5] |
| + | Dockerはクライアント・サーバー型の構成になっている。~ |
| + | //#ref(docker.png,,50%) |
| + | DockerクライアントがDockerデーモンと通信することで,Dockerコンテナの構築・実行・配布をおこなう。 |
| + | |
| + | - Dockerデーモン~ |
| + | Dockerデーモンは,ホストマシン上で動作する。~ |
| + | コンテナの生成・実行・モニタリングとともに,Dockerイメージの構築と保存を受け持っている。~ |
| + | ユーザーは直接デーモンとは通信せず,Dockerクライアントからコマンドで行う。~ |
| + | - Dockerクライアント~ |
| + | Dockerクライアントは,DockerデーモンとHTTP経由で通信・操作するためのアプリケーション。~ |
| + | デフォルトではUnixドメインソケットが使われるが,TCPソケットを使ったリモートクライアントや,ファイルデスクリプタを使ったsystemd管理下のソケットも利用出来る。~ |
| + | すべての通信はHTTPを用いて行うので,リモートのDockerデーモンに接続することも可能。~ |
| + | ユーザーからのコマンドを受け付けると,Dockerデーモンと通信し返答する。~ |
| + | - Dockerイメージ~ |
| + | Dockerイメージは,コンテナの元になるひな形のこと。~ |
| + | Docker Hub上で配布されている物もあるが,Dockerfileという定義ファイルから独自にイメージを作成することも可能。~ |
| + | イメージはリポジトリに保存されるので,複数のイメージが保存できてIDやタグで指定も可能となっている。~ |
| + | また,これらのイメージは,Docker Hub(Dockerイメージの管理・共有するシステム)と呼ばれるオンラインサービスで共有可能。 |
| + | |
| + | * 仮想化アプリケーション・環境のいろいろ [#b63b3f5d] |
| + | #ls2(,pagename) |