cloud-init
を使用するには¶
cloud-init
は Linux ディストリビューションのインスタンスの自動的な初期化とカスタマイズのためのツールです。
インスタンスにcloud-init
設定を追加することで、インスタンスの最初の起動時にcloud-init
に特定のアクションを実行させることができます。
可能なアクションには、たとえば以下のようなものがあります:
パッケージの更新とインストール
特定の設定の適用
ユーザーの追加
サービスの有効化
コマンドやスクリプトの実行
仮想マシンのファイルシステムをディスクのサイズに自動的に拡張する
詳細な情報はCloud-init documentationを参照してください。
注釈
cloud-init
アクションはインスタンスの最初の起動時に一度だけ実行されます。
インスタンスの再起動ではアクションは再実行されません。
イメージ内のcloud-init
サポート¶
cloud-init
を使用するには、cloud-init
がインストールされたイメージをベースにインスタンスを作る必要があります。
images
リモートからのイメージにはcloud-init
が有効化されたバリアントがあり、通常デフォルトバリアントよりもサイズが大きくなります。
クラウドバリアントは/cloud
接尾辞を使用します。たとえば、images:ubuntu/22.04/cloud
。
cloud-init
と仮想マシン¶
cloud-init
を仮想マシン内で動かすには、VM内でincus-agent
を動かすか、特別な追加ディスク経由でcloud-init
のデータを提供する必要があります。
images:
リモートで提供されるすべてのイメージはagentが設定済みですので、そのままで大丈夫です。
incus-agent
を持たないインスタンスでは、追加のcloud-init
ディスクを以下のように渡せます:
incus config device add INSTANCE cloud-init disk source=cloud-init:config
設定オプション¶
Incus は、cloud-init
の設定に対してcloud-init.*
とuser.*
の 2 つの異なる設定オプションセットをサポートしています。
どちらのセットを使用する必要があるかは、使用するイメージのcloud-init
サポートによって異なります。
一般的には、新しいイメージはcloud-init.*
設定オプションをサポートし、古いイメージはuser.*
をサポートしていますが、例外も存在する可能性があります。
以下の設定オプションがサポートされています。
cloud-init.vendor-data
またはuser.vendor-data
(Vendor dataを参照)cloud-init.user-data
またはuser.user-data
(User data formatsを参照)cloud-init.network-config
またはuser.network-config
(Network configurationを参照)
設定オプションの詳細については、cloud-init
インスタンスオプションと、cloud-init
ドキュメント内のLXD データソースを参照してください。
ベンダーデータとユーザーデータ¶
vendor-data
とuser-data
の両方が、cloud-init
にクラウド構成データを提供するために使用されます。
主な考え方は、vendor-data
は一般的なデフォルト構成に使用され、user-data
はインスタンス固有の構成に使用されることです。
これは、プロファイルでvendor-data
を指定し、インスタンス構成でuser-data
を指定する必要があることを意味します。
Incus はこの方法を強制しませんが、プロファイルとインスタンス構成の両方でvendor-data
とuser-data
を使用することができます。
インスタンスに対してvendor-data
とuser-data
の両方が提供される場合、cloud-init
は 2 つの構成をマージします。
しかし、両方の設定で同じキーを使った場合、マージは不可能になるかもしれません。
この場合、指定されたデータをどのようにマージするべきかをclout-init
に指定してください。
Merging user data sectionsを参照して手順を確認してください。
cloud-init
の設定方法¶
インスタンスのcloud-init
を設定するには、対応する設定オプションをインスタンスが使用するプロファイルまたはインスタンス構成に直接追加します。
インスタンスに直接cloud-init
を設定する場合、cloud-init
はインスタンスの最初の起動時にのみ実行されることに注意してください。
つまり、インスタンスを起動する前にcloud-init
を設定する必要があります。
これを行うには、incus launch
の代わりにincus init
でインスタンスを作成し、設定が完了した後に起動します。
cloud-init
設定のYAMLフォーマット¶
cloud-init
のオプションでは、YAML のliteralスタイルフォーマットが必要です。
パイプ記号(|
)を使用して、パイプの後にインデントされたテキスト全体を、改行とインデントを保持したままcloud-init
に単一の文字列として渡すことを示します。
vendor-data
およびuser-data
のオプションは通常、#cloud-config
で始まります。
例:
config:
cloud-init.user-data: |
#cloud-config
package_upgrade: true
packages:
- package1
- package2
Tip
構文が正しいかどうかを確認する方法については、How to validate user dataを参照してください。
cloud-init
のステータスを確認する方法¶
cloud-init
はインスタンスの最初の起動時に自動的に実行されます。
設定されたアクションによっては、完了するまでに時間がかかる場合があります。
cloud-init
のステータスを確認するには、インスタンスにログインして以下のコマンドを入力します。
cloud-init status
結果がstatus: running
の場合、cloud-init
はまだ実行中です。結果がstatus: done
の場合、完了しています。
また、--wait
フラグを使用して、cloud-init
が完了したときにのみ通知を受け取ることができます:
root@instance:~#
cloud-init status --wait
.....................................
status: done
ユーザーデータやベンダーデータを指定する方法¶
user-data
とvendor-data
の設定は、たとえば、パッケージのアップグレードやインストール、ユーザーの追加、コマンドの実行などに使用することができます。
提供される値は、最初の行でcloud-init
に渡されるユーザーデータ形式のタイプを示す必要があります。
パッケージのアップグレードやユーザーの設定などのアクティビティには、#cloud-config
が使用するデータ形式です。
構成データは、インスタンスのルートファイルシステム内の以下のファイルに保存されます:
/var/lib/cloud/instance/cloud-config.txt
/var/lib/cloud/instance/user-data.txt
例¶
以下のセクションでは、さまざまな例のユースケースに対するユーザーデータ(またはベンダーデータ)の設定を参照してください。
より高度な例は、cloud-init
ドキュメントで見つけることができます。
パッケージのアップグレード¶
インスタンスが作成された直後に、インスタンスのリポジトリからパッケージをアップグレードするためには、package_upgrade
キーを使用します:
config:
cloud-init.user-data: |
#cloud-config
package_upgrade: true
パッケージのインストール¶
インスタンスのセットアップ時に特定のパッケージをインストールするには、packages
キーを使用し、パッケージ名をリストとして指定します:
config:
cloud-init.user-data: |
#cloud-config
packages:
- git
- openssh-server
タイムゾーンの設定¶
インスタンス作成時にインスタンスのタイムゾーンを設定するには、timezone
キーを使用します:
config:
cloud-init.user-data: |
#cloud-config
timezone: Europe/Rome
コマンドの実行¶
コマンド(マーカーファイルの書き込みなど)を実行するには、runcmd
キーを使用し、コマンドをリストとして指定します:
config:
cloud-init.user-data: |
#cloud-config
runcmd:
- [touch, /run/cloud.init.ran]
ユーザーアカウントの追加¶
ユーザーアカウントを追加するには、user
キーを使用します。
デフォルトユーザーやサポートされているキーに関する詳細は、cloud-init
ドキュメント内のIncluding users and groupsの例を参照してください。
config:
cloud-init.user-data: |
#cloud-config
user:
- name: documentation_example
ネットワーク構成データを指定する方法¶
デフォルトでは、cloud-init
はインスタンスのeth0
インターフェースに DHCP クライアントを設定します。
デフォルトの構成を上書きするために、network-config
オプションを使用して独自のネットワーク構成を定義することができます(これはテンプレートの構造によるものです)。
その後、cloud-init
は Ubuntu リリースに応じてifupdown
かnetplan
を使用して、システム上の関連するネットワーク構成をレンダリングします。
構成データは、インスタンスのルートファイルシステム内の以下のファイルに保存されます:
/var/lib/cloud/seed/nocloud-net/network-config
/etc/network/interfaces.d/50-cloud-init.cfg
(ifupdown
を使用している場合)/etc/netplan/50-cloud-init.yaml
(netplan
を使用している場合)
例¶
特定のネットワークインターフェースに静的な IPv4 アドレスを設定し、カスタム名前サーバーを使用するための次の設定を使用します:
config:
cloud-init.network-config: |
version: 2
ethernets:
eth1:
addresses:
- 10.10.101.20/24
gateway4: 10.10.101.1
nameservers:
addresses:
- 10.10.10.254