no about note

エンジニアのメモ書き

OpenstackのUserdata・Metadata・Configドライブについて

Metadata

Cloud-init

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のデフォルトパスワードを設定する例: f:id:noabout:20160628225443p:plain

シェルスクリプトの書式

​#!/bin/bash
​adduser --disabled-password --gecos "" clouduser
setenforce 0

Cloud-configの書式

  • yaml形式で定義されたコマンドとデータを記述

例:ホスト名の設定

 #cloud-config
 hostname: mynode
 fqdn: mynode.example.com
 manage_etc_hosts: true

設定例は以下を参照

cloud-config - examples

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

参考