仮想化
cloud-initとは?
cloud-init is the standard mechanism for configuring a virtual machine on first boot, using metadata supplied by the platform. It handles SSH key injection, hostname, network configuration and arbitrary user scripts, which is what makes fully automated provisioning possible.
cloud-initが重要な理由
SSHキーの注入、ホスト名、ネットワーク構成、および任意のユーザースクリプトを処理し、完全に自動化されたプロビジョニングを可能にします。
実践でのcloud-init
新規起動時、cloud-initはサービスの起動前に実行されます。コンソールで『モジュールの実行中』を確認し、/var/log/cloud-init-output.log をチェックします。user-dataスクリプトの設定ミスにより、起動がハングしたり、SSHがロックアウトされることがあります。使い捨てインスタンスで最初にテストしてください。'cloud-init clean' を実行して再起動すると再実行できます。失敗すると、パネルから再プロビジョニングしたり、VNCセッションで手動修正するなど、時間を費やすことになります。
cloud-initについて人々が誤解していること
よくある間違いは、cloud-initが毎回起動時に再実行されると思い込むことです。実際には初回起動時に一度だけ実行されます。再起動時に適用されることを期待してuser-dataにスクリプトを追加しても、それは実行されません。修正方法:初期プロビジョニングにのみ使用するか、明示的に 'cloud-init clean' を呼び出して状態をリセットし、新規実行に備えてください。
cloud-init — よくある質問
cloud-initにuser-dataを渡すにはどうすればいいですか?
パネルまたはAPIからプロビジョニングする際に、user-dataフィールドを指定できます。これはメタデータ経由で注入され、cloud-initが初回起動時に適用します。必要な内容に応じて、シェルスクリプトまたはcloud-config YAMLとして指定してください。
カスタムISOでcloud-initを使用できますか?
はい、ISOにcloud-initがインストールされている場合可能です。例えば、主要ディストリビューションのクラウドイメージには含まれています。cloud-initを含む独自のイメージをアップロードすることもできます。cloud-initはプラットフォームが提供するメタデータに依存するため、インスタンスはコンテナではなくKVMであることを確認してください。
仮想化の詳細
- KVM
- KVMはLinuxカーネルに組み込まれたフルハードウェア仮想化であり、各ゲストに独自のカーネルと、他のテナントからのハードウェア強制分離を提供します。
- OpenVZ
- OpenVZはコンテナベースの仮想化であり、すべてのインスタンスがホストカーネルを共有するため、ゲストはカーネルモジュールをロードしたり、異なるオペレーティングシステムを実行したりできません。
- LXC
- LXCはLinuxネイティブのコンテナ化であり、ホストカーネルを共有しながら、名前空間とcgroupsでプロセスを分離します。
- ハイパーバイザー
- ハイパーバイザーとは、仮想マシンを作成・実行し、物理CPU、メモリ、I/Oを割り当てるソフトウェアレイヤーです。
- 嵌套虚拟化
- ネスト仮想化により、仮想マシン自体が仮想マシンを実行できるようになり、プロセッサの仮想化拡張機能がゲストに公開されます。
- vCPU
- vCPUは、ゲストに提示される仮想プロセッサであり、物理コアまたはスレッド上のスケジューリング時間によって支えられています。