OpenstackのUserdata・Metadata・Configドライブについて
Cloud-init
- クラウド上のインスタンスに各種設定を行うためのパッケージ
- 幅広いOS、ディストリビューションで利用が可能
- クラウド用OSイメージにはデフォルトでインストールされている場合が多い
Userdata
- cloud-initによる実行される
- インスタンス起動時にスクリプトを実行し、設定を入れ込むことができる
- 設定の形式は、シェルスクリプト形式(#! で始まるもの)とcloud-confg形式(#cloud-config で始まるもの)がある
- 2つの形式を同時に利用することも可能
実行方法
CLIで実行する場合
- ファイルに記述した記述をnovabootコマンド時に指定する
Usage: --user-data <user-data-file> パラメーター $ nova boot --image ubuntu-cloudimage --flavor 1 --user-data mydata.file
Horizonで実行する場合
centosのデフォルトパスワードを設定する例:
シェルスクリプトの書式
#!/bin/bash adduser --disabled-password --gecos "" clouduser setenforce 0
Cloud-configの書式
- yaml形式で定義されたコマンドとデータを記述
例:ホスト名の設定
#cloud-config hostname: mynode fqdn: mynode.example.com manage_etc_hosts: true
設定例は以下を参照
Metadata
- key=value形式の情報
- Userdataと同様にインスタンスに特定のデータを与えることができる
- インスタンス内部から
http://169.254.169.254
にアクセスするといつでもデータが参照できる - user-dataもMetadataの一部として保存されている
- userdataと組み合わせてインスタンスの情報を取得して、自動化などが可能
- コマンドに
--meta <Key> <value>
で値を指定する
Configドライブ
- metadataに与えたデータをディスク経由で渡すことができる
- ディスク領域としてOSにマウントされる
- ファイルを直接格納してインスタンスに渡すことも可能
- インスタンス内でネットワーク設定が行われる前にデータを渡すことができるためネットワーク設定そのものが可能
Configドライブの使い方
- nova boot コマンドに --config-drive true パラメーターを付け、コンフィグドライブを有効化する
- /etc/nova/nova.conf ファイルに
force_config_drive=true
を追加すると常にコンフィグドライブを作成するようにすることが可能
以下、configドライブを有効化し、複数のファイルを渡している例
# nova boot --config-drive true --image my-image-name --key-name mykey \ --flavor 1 --user-data ./my-user-data.txt myinstance \ --file /etc/network/interfaces=/home/myuser/instance-interfaces \ --file known_hosts=/home/myuser/.ssh/known_hosts \ --meta role=webservers --meta essential=false
- コンフィグドライブは、config-2 というボリュームラベルとなり、ゲスト OS がラベルでのディスクへのアクセスをサポートしている場合は、コンフィグドライブを /dev/disk/by-label/config-2 デバイスとしてマウントすることができる
# mkdir -p /mnt/config # mount /dev/disk/by-label/config-2 /mnt/config