YggdrasillNetwork Blog

A blogging framework for hackers.

Openvswitch で Bonding

目的

OpenvSwithc 環境下で bonding を設定する

設定

1
# ovs-vsctl add-bond br0 bond0 eth0 eth1

※ 作成時に bond0 が存在しているとエラーになる

1
2
3
4
5
6
7
8
9
10
# ovs-vsctl show
49f85a35-e17c-4165-9bf9-e8476698908e
    Bridge "br0"
        Port "br0"
            Interface "br0"
                type: internal
        Port "bond0"
            Interface "eth0"
            Interface "eth1"
    ovs_version: "2.1.3"

eth0 を固定で slave, eth1 を backup slave みたく固定で設定する方法がよくわからない…

Memo

bond 設定確認コマンド

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# ovs-appctl bond/show bond0

---- bond0 ----
bond_mode: active-backup
bond-hash-basis: 0
updelay: 0 ms
downdelay: 0 ms
lacp_status: off

slave eth0: disabled
  may_enable: false

slave eth1: disabled
  may_enable: false

bond 状態確認コマンド

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# ovs-vsctl list port bond0

_uuid               : 79edb982-fe2a-4dfb-a078-38465aff870a
bond_downdelay      : 0
bond_fake_iface     : false
bond_mode           : []
bond_updelay        : 0
external_ids        : {}
fake_bridge         : false
interfaces          : [967407dc-f13f-4fa1-a9f7-fe720bb49512, 9e5e6bce-3d45-48ea-96b6-09017c517aa5]
lacp                : []
mac                 : []
name                : "bond0"
other_config        : {}
qos                 : []
statistics          : {}
status              : {}
tag                 : []
trunks              : []
vlan_mode           : []

port の削除

1
2
# ovs-vsctl del-port bond0
# ovs-vsctl del-port eth2

man ページ

1
# man 5 ovs-vswitchd.conf.db

雑記

1
2
3
4
5
# ovs-vsctl add-bond br0 bond0 eth1 eth2 bond_mode=balance-slb other_config:bond-detect-mode=miimon other_config:bond-miimon-interval=100 other_config:trunks=1,2,3,4,5,8,12,13,10,11 other_config:bond_updelay=100 other_config:lacp-time=fast

# ovs-vsctl set interface eth1 other-config:enable-vlan-splinters=true

# ovs-vsctl set interface eth2 other-config:enable-vlan-splinters=true
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# network interface settings
auto lo
iface lo inet loopback


auto eth1
iface eth1 inet manual


auto eth0
iface eth0 inet manual


allow-vmbr1 bond0
iface bond0 inet manual
        ovs_type OVSBond
        ovs_bridge vmbr1
        ovs_bonds eth0 eth1
        ovs_options bond_mode=active-backup




auto vmbr1
iface vmbr1 inet static
        address  192.168.0.22
        netmask  255.255.255.0
        gateway  192.168.0.1
        ovs_type OVSBridge
        ovs_ports bond0

[root@kvm2 ~]# ovs-vsctl add-bond br2 bond2 eth2 eth5 ovs-vsctl: cannot create an interface named eth2 because a port named eth2 already exists on bridge br2

1
2
3
4
5
6
7
8
9
[root@kvm2 network-scripts]# cat ifcfg-bond2 
DEVICE=bond2
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSBond
OVS_BRIDGE=br2
BOOTPROTO=none
BOND_IFACES="eth2 eth5"
HOTPLUG=no
1
2
3
4
5
6
7
8
[root@kvm2 network-scripts]# cat ifcfg-eth2 
DEVICE=eth2
HWADDR=40:A8:F0:39:7B:AE
UUID=98cc7079-2517-4a15-ae0e-ca021d2a3f47
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=none
HOTPLUG=no
1
2
3
4
5
6
7
[root@kvm2 network-scripts]# cat ifcfg-br1 
DEVICE=br1
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=none
HOTPLUG=no

普通の ovs 設定と同じ

eth1 Link Down 時

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@kvm2 ~]# ovs-appctl bond/show bond1
---- bond1 ----
bond_mode: active-backup
bond-hash-basis: 0
updelay: 0 ms
downdelay: 0 ms
lacp_status: off

slave eth1: disabled
  may_enable: false

slave eth6: enabled
  active slave
  may_enable: true

eth1 Link Up 時

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@kvm2 ~]# ovs-appctl bond/show bond1
---- bond1 ----
bond_mode: active-backup
bond-hash-basis: 0
updelay: 0 ms
downdelay: 0 ms
lacp_status: off

slave eth1: enabled
  may_enable: true

slave eth6: enabled
  active slave
  may_enable: true

openvswitch 2.1.3 と 2.3.1 の違い

  • 2.1.3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
# ovs-appctl bond/show bond3
---- bond3 ----
bond_mode: active-backup
bond-hash-basis: 0
updelay: 0 ms
downdelay: 0 ms
lacp_status: off

slave eth3: enabled
  active slave
  may_enable: true

slave eth4: enabled
  may_enable: true
  • 2.3.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# ovs-appctl bond/show bond3
---- bond3 ----
bond_mode: active-backup
bond may use recirculation: no, Recirc-ID : -1
bond-hash-basis: 0
updelay: 0 ms
downdelay: 0 ms
lacp_status: off
active slave mac: fc:15:b4:28:86:93(eno4)

slave eno4: enabled
  active slave
  may_enable: true

slave ens2f3: enabled
  may_enable: true

参照 URL

Openvnet


layout: post title: “openvnet のインストール” date: 2015-02-20 12:11:16 +0900 comments: true category: openvnet tags: [network] keywords: openvnet published: true


目的

openvnet のインストールと簡単なオペレーションのメモ

インストール

1
2
3
4
5
# curl -o /etc/yum.repos.d/openvnet.repo -R https://raw.githubusercontent.com/axsh/openvnet/master/openvnet.repo

# curl -o /etc/yum.repos.d/openvnet-third-party.repo -R https://raw.githubusercontent.com/axsh/openvnet/master/openvnet-third-party.repo

# yum install -y openvnet

設定ファイル

/etc/openvnet/vnmgr.conf

1
2
3
4
5
6
7
8
9
node {
  id "vnmgr"
  addr {
    protocol "tcp"
    host "127.0.0.1"
    port 9102
  }
  plugins [:vdc_vnet_plugin]
}

/etc/openvnet/vna.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
node {
  id "vna"
  addr {
    protocol "tcp"
    host "127.0.0.1"
    port 9103
  }
}

network {
  uuid ""
  gateway {
    address ""
  }
}

/etc/openvnet/webapi.conf

1
2
3
4
5
6
7
8
node {
  id "webapi"
  addr {
    protocol "tcp"
    host "127.0.0.1"
    port 9101
  }
}

vnmgr/vna/webapi が同一 Host に同居する場合は ZeroMQ の port は被らないように設定が必要

/etc/openvnet/common.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
registry {
  adapter "redis"
  host "127.0.0.1"
  port 6379
}

db {
  adapter "mysql2"
  host "localhost"
  database "vnet"
  port 3306
  user "root"
  password ""
}

初期セットアップ

/opt/axsh/openvnet/vnet/README.md を参照して作業

1
2
3
4
5
6
7
# mysqladmin -uroot create vnet

# export PATH=/opt/axsh/openvnet/ruby/bin:$PATH

# cd /opt/axsh/openvnet/vnet
# gem install bundler
# bundle exec rake db:init

下記のくだりの作業は不要(みたい)

1
2
3
4
Copy the upstart scripts into their proper directories

    cp /opt/axsh/openvnet/deployment/conf_files/etc/init/* /etc/init
    cp /opt/axsh/openvnet/deployment/conf_files/etc/default/* /etc/default

redis の設定

  • /etc/redis.conf
1
bind 172.25.255.254

redis の起動

1
service redis start

サービスの起動

1
2
3
start vnet-vnmgr
start vnet-vna
start vnet-webapi

サービスの起動確認

1
2
# initctl status vnet-vnmgr
vnet-vnmgr start/running, process 47122
1
2
# initctl status vnet-vna
vnet-vna start/running, process 47216
1
2
# initctl status vnet-webapi
vnet-webapi start/running, process 47283

ログの確認

  • /var/log/openvnet/vna.log
  • /var/log/openvnet/vnmgr.log
  • /var/log/openvnet/webapi.log

vnctl コマンドのセットアップ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# cd /opt/axsh/openvnet/vnctl/bin
# /opt/axsh/openvnet/ruby/bin/bundle install
Don't run Bundler as root. Bundler can ask for sudo if it is needed, and installing your bundle as root will break this application for all non-root users on
this machine.
Fetching gem metadata from http://rubygems.org/.......
Installing fuguta 1.0.2
Installing multi_json 1.8.0
Installing multi_xml 0.5.5
Installing httparty 0.11.0
Installing thor 0.18.1
Using bundler 1.7.12
Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is installed.
Post-install message from httparty:
When you HTTParty, you must party hard!

1 Box OpenVNet

1
2
3
4
# curl -o /root/vnet-test-kvm.tgz -R http://dlc.openvnet.axsh.jp/tests/vnet-test-kvm.tgz
# tar xvfz ./vnet-test-kvm.tgz
# export PATH=/opt/axsh/openvnet/ruby/bin:$PATH
# cd /root/vnet-test-kvm

db.sh の下記記述をコメントアウト

1
2
# mysqladmin -uroot create vnet
# (cd /opt/axsh/wakame-vnet/vnet; bundle exec rake db:init)

ip_node1 を opvbr0 に割り当てている IP に設定

ip_node1=‘10.1.0.1’

nw-public の一部を下記のように編集

–data-urlencode ipv4_network=10.1.0.0 \

1
# ./db.sh

ovs コマンド

1
# ovs-vsctl show

vnctl コマンド

1
# ./vnctl datapaths network show dp-1

OpenVNet の設定の流れ

  • datapath の設定

  • network の設定

  • interfaces の設定

    • owner_datapath_uuid で datapaths との紐付けが必要
    • network_uuid で networks との紐付けが必要
  • datapath と network の連携

  • network_service 設定 ( 任意 )

    • NFV

Memo

メッセージキューに ZeroMQ を使っている Wakame-vdc だと RabbitMQ 使ってる

vnet-vna は Controller という名前のプロセスで動作している

redis の警告の対策

/var/log/redis/redis.log に下記のログが吐かれる

1
[4271] 04 Feb 09:23:33 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
1
2
echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf
sysctl -p

:vdc_vnet_plugin

/etc/openvnet/vnmgr.conf の plugins [:vdc_vnet_plugin] は wakame-vdc との連携をさせる際に必要

bundle install 失敗

1
2
3
4
5
6
7
8
9
10
11
12
13
# gem list

*** LOCAL GEMS ***

bigdecimal (1.2.4)
bundler (1.8.3, 1.6.2)
io-console (0.4.2)
json (1.8.1)
minitest (4.7.5)
psych (2.0.3)
rake (10.1.0)
rdoc (4.1.0)
test-unit (2.1.1.0)

参照 URL

Openvswitch のインストールと初期セットアップ

yum 経由のインストール

レポジトリの追加

1
2
3
# yum install http://rdo.fedorapeople.org/openstack-icehouse/rdo-release-icehouse.rpm

openvswitch x86_64 2.1.2-1.el6 openstack-icehouse 2.2 M

パッケージのインストール

1
# yum install openvswitch

bridge kernel module の削除

1
# /sbin/rmmod bridge

blacklist.conf への追加

kernel module の bridge をロードしてほしくないので、/etc/modprobe.d/blacklist.conf に記述

1
install bridge /bin/false

Service の起動

1
# service openvswitch start

interface の設定

ifcfg-br0

1
2
3
4
5
6
7
8
DEVICE=br0
ONBOOT=yes
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=static
IPADDR=A.B.C.D
NETMASK=X.Y.Z.0
HOTPLUG=no

ifcfg-eth1

1
2
3
4
5
6
7
8
DEVICE=eth1
DEVICETYPE=ovs
HWADDR=40:A8:F0:39:96:A9
TYPE=OVSPort
UUID=22ff31c5-1d59-478d-8fa4-55f2984a94d8
ONBOOT=yes
NM_CONTROLLED=no
BRIDGE=br0

Tips

bridge kernel module の追加方法

1
# insmod /lib/modules/2.6.32-504.el6.x86_64/kernel/net/bridge/bridge.ko

bridge kernel module の削除方法

1
/sbin/rmmod bridge

br0 の作成と eth0 の追加

1
2
# ovs-vsctl add-br br0
# ovs-vsctl add-port br0 eth0

Memo

yum install http://rdo.fedorapeople.org/rdo-release.rpm
↑これはダメ。レポジトリ先が存在していない…

yum erase rdo-release で削除

参照 URL

Wakame 用 カスタム KVM イメージ作成

作成手順

yum update の実行

1
# yum update -y

selinux 設定

selinux Permissive

必要なパッケージのインストール

1
yum install -y telnet tcpdump wget man man-pages ntpdate bind-utils openssh-clients nfs-utils nfs-utils-lib

ipv6 disable 設定

1
# chkconfig ip6tables off

/etc/sysconfig/network に NETWORKING_IPV6=no を追加

1
# echo 'options ipv6 disable=1' > /etc/modprobe.d/disable-ipv6.conf

ssh 設定

/etc/ssh/sshd_config Port 2442

wakame-init の Download

1
2
# cd /etc
# wget https://raw.githubusercontent.com/axsh/wakame-vdc/master/wakame-init/rhel/6/wakame-init

rc.local の編集

/etc/rc.local に設定追加

root-device の UUID の確認

1
2
3
# blkid
   :
/dev/vda3: UUID="893013b4-bf1e-47b6-baf3-495193b76238" TYPE="ext4" 

不要ファイル削除

1
2
3
rm -rf /root/.bash_history
rm -rf /etc/ssh/ssh_host*
rm -rf /etc/udev/rules.d/70-persistent-net.rules

OS イメージの圧縮と移動

OS イメージ圧縮前のファイルサイズを控えておく

1
# ls -al centos66.img

/var/lib/libvirt/images

圧縮の実行

1
# gzip -c centos66.img > /var/lib/wakame-vdc/images/20150203_1_centos66.img.gz

OS イメージ圧縮後のファイルサイズを控えておく

1
# ls -al 20150203_1_centos66.img.gz

OS イメージの md5 の取得

OS イメージの md5 checksum 値を控えておく

1
# md5sum 20150203_2_centos66.img.gz

vdc へイメージの登録

vdc-manage コマンドを実行

1
# /opt/axsh/wakame-vdc/dcmgr/bin/vdc-manage

事前に控えていた下記の情報を基にカスタムイメージを DB に登録

  • 圧縮前 OS イメージファイルサイズ
  • 圧縮後 OS イメージファイルサイズ
  • OS イメージの md5 checksum
  • root パーティションの UUID
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
backupobject add \
 --uuid 20150213_1_cent_base \
 --display-name "CentOS 6.6" \
 --storage-id bkst-local \
 --object-key 20150213_1_cent_base.img.gz \
 --size              492162200 \
 --allocation-size 17179869184 \
 --container-format gz \
 --checksum 9f4089bd93fcb48a90a0a22b0d0be04d

image add local bo-20150213_1_cent_base \
 --account-id a-shpoolxx \
 --uuid wmi-20150213_1_cent_base \
 --root-device uuid:893013b4-bf1e-47b6-baf3-495193b76238 \
 --display-name "CentOS 6.6"

参照 URL

Iptables を利用した NAT Router

NAT 設定追加

内部から外部への通信を NAT する設定

例: 内部 IP アドレスレンジ ( 10.1.0.0/24 ) から外部への通信を NAT する

1
2
# iptables -t nat -F
# iptables -t nat -A POSTROUTING -s 10.1.0.0/24 -j MASQUERADE

外部から内部への通信を NAT する設定

1
2
3
4
5
6
# iptables -t nat -I PREROUTING -d 172.16.1.36 -p tcp -m tcp --dport 1022 -j DNAT --to-destination "10.1.0.10:2442"
# iptables -t nat -I PREROUTING -d 172.16.1.36 -p tcp -m tcp --dport 1122 -j DNAT --to-destination "10.1.0.11:2442"
# iptables -t nat -I PREROUTING -d 172.16.1.36 -p tcp -m tcp --dport 1222 -j DNAT --to-destination "10.1.0.12:2442"
# iptables -t nat -I PREROUTING -d 172.16.1.36 -p tcp -m tcp --dport 1322 -j DNAT --to-destination "10.1.0.13:2442"
# iptables -t nat -I PREROUTING -d 172.16.1.36 -p tcp -m tcp --dport 1422 -j DNAT --to-destination "10.1.0.14:2442"
# iptables -t nat -I PREROUTING -d 172.16.1.36 -p tcp -m tcp --dport 1080 -j DNAT --to-destination "10.1.0.10:80"

NAT 設定削除方法

1. 行番号確認

1
# iptables -t nat -L --line-numbers

2. 行数を指定して削除

1
# iptables -t nat -D PREROUTING 3

iptable 設定保存

1
# service iptables save

/etc/sysconfig/iptables に保存される

パケットフォワード設定

net.ipv4.ip_forward の設定

1
# sysctl -w net.ipv4.ip_forward=1

設定の保存

/etc/sysctl.conf に下記の記述を追加

1
net.ipv4.ip_forward=1

参照 URL

KVM Tips

概要

KVM 操作の際の Tips

virsh コマンド

ドメイン一覧表示 ( 停止中を含む )

1
# virsh list --all

ドメインの起動

1
# virsh start centos66

ドメインの強制停止

1
# virsh destroy pc2

ドメインの削除

1
# virsh undefine centos66

※ 停止中のドメインのみ実行可能

ゲストのコンソールに接続

1
# virsh console 5

ゲストのコンソールから抜ける

1
^] 

VM の設定ファイルを編集

1
# virsh edit <vm-name>

実行されている VM の設定確認

1
# virsh dumpxml <vm-name>

ホストに接続されているソケット数、コア数およびハイパースレッド数に関する情報を確認

1
2
3
4
5
6
7
8
9
# virsh nodeinfo
CPU モデル:       x86_64
CPU:                 8
CPU 周波数:       1795 MHz
CPU ソケット数: 1
ソケットあたりのコア数: 4
コアあたりのスレッド数: 1
NUMA セル数:      2
メモリー容量:  65801024 KiB

capabilities

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
[root@kvm1 images]# virsh capabilities
<capabilities>

  <host>
    <uuid>37343730-3838-434e-3734-353030384344</uuid>
    <cpu>
      <arch>x86_64</arch>
      <model>SandyBridge</model>
      <vendor>Intel</vendor>
      <topology sockets='1' cores='4' threads='1'/>
      <feature name='invtsc'/>
      <feature name='erms'/>
      <feature name='smep'/>
      <feature name='fsgsbase'/>
      <feature name='pdpe1gb'/>
      <feature name='rdrand'/>
      <feature name='f16c'/>
      <feature name='osxsave'/>
      <feature name='dca'/>
      <feature name='pcid'/>
      <feature name='pdcm'/>
      <feature name='xtpr'/>
      <feature name='tm2'/>
      <feature name='est'/>
      <feature name='smx'/>
      <feature name='vmx'/>
      <feature name='ds_cpl'/>
      <feature name='monitor'/>
      <feature name='dtes64'/>
      <feature name='pbe'/>
      <feature name='tm'/>
      <feature name='ht'/>
      <feature name='ss'/>
      <feature name='acpi'/>
      <feature name='ds'/>
      <feature name='vme'/>
    </cpu>
    <power_management>
      <suspend_disk/>
    </power_management>
    <migration_features>
      <live/>
      <uri_transports>
        <uri_transport>tcp</uri_transport>
      </uri_transports>
    </migration_features>
    <topology>
      <cells num='2'>
        <cell id='0'>
          <cpus num='4'>
            <cpu id='0' socket_id='0' core_id='0' siblings='0'/>
            <cpu id='1' socket_id='0' core_id='1' siblings='1'/>
            <cpu id='2' socket_id='0' core_id='2' siblings='2'/>
            <cpu id='3' socket_id='0' core_id='3' siblings='3'/>
          </cpus>
        </cell>
        <cell id='1'>
          <cpus num='4'>
            <cpu id='4' socket_id='1' core_id='0' siblings='4'/>
            <cpu id='5' socket_id='1' core_id='1' siblings='5'/>
            <cpu id='6' socket_id='1' core_id='2' siblings='6'/>
            <cpu id='7' socket_id='1' core_id='3' siblings='7'/>
          </cpus>
        </cell>
      </cells>
    </topology>
    <secmodel>
      <model>selinux</model>
      <doi>0</doi>
    </secmodel>
    <secmodel>
      <model>dac</model>
      <doi>0</doi>
    </secmodel>
  </host>

  <guest>
    <os_type>hvm</os_type>
    <arch name='i686'>
      <wordsize>32</wordsize>
      <emulator>/usr/libexec/qemu-kvm</emulator>
      <machine>rhel6.6.0</machine>
      <machine canonical='rhel6.6.0'>pc</machine>
      <machine>rhel6.5.0</machine>
      <machine>rhel6.4.0</machine>
      <machine>rhel6.3.0</machine>
      <machine>rhel6.2.0</machine>
      <machine>rhel6.1.0</machine>
      <machine>rhel6.0.0</machine>
      <machine>rhel5.5.0</machine>
      <machine>rhel5.4.4</machine>
      <machine>rhel5.4.0</machine>
      <domain type='qemu'>
      </domain>
      <domain type='kvm'>
        <emulator>/usr/libexec/qemu-kvm</emulator>
      </domain>
    </arch>
    <features>
      <cpuselection/>
      <deviceboot/>
      <acpi default='on' toggle='yes'/>
      <apic default='on' toggle='no'/>
      <pae/>
      <nonpae/>
    </features>
  </guest>

  <guest>
    <os_type>hvm</os_type>
    <arch name='x86_64'>
      <wordsize>64</wordsize>
      <emulator>/usr/libexec/qemu-kvm</emulator>
      <machine>rhel6.6.0</machine>
      <machine canonical='rhel6.6.0'>pc</machine>
      <machine>rhel6.5.0</machine>
      <machine>rhel6.4.0</machine>
      <machine>rhel6.3.0</machine>
      <machine>rhel6.2.0</machine>
      <machine>rhel6.1.0</machine>
      <machine>rhel6.0.0</machine>
      <machine>rhel5.5.0</machine>
      <machine>rhel5.4.4</machine>
      <machine>rhel5.4.0</machine>
      <domain type='qemu'>
      </domain>
      <domain type='kvm'>
        <emulator>/usr/libexec/qemu-kvm</emulator>
      </domain>
    </arch>
    <features>
      <cpuselection/>
      <deviceboot/>
      <acpi default='on' toggle='yes'/>
      <apic default='on' toggle='no'/>
    </features>
  </guest>

</capabilities>

VM 名のリネーム

1
# virsh edit nat01

下記の行を編集

1
<name>nat01</name>

下記の行を削除

1
<uuid>1f85892f-195a-d19b-3a7a-99457b558ab8</uuid>

NIC の追加

Linux Bridge 環境

VM が起動している状態で実行可能

1
# virsh attach-interface --type bridge --source br0 --model e1000 nat

openvswitch 環境

virsh attach-interface コマンドではエラーになるため、VM が停止した状態で設定ファイルに下記のような記述を追加

1
2
3
4
<interface type='bridge'>
  <source bridge='br3'/>
  <virtualport type='openvswitch'/>
</interface>

virsh edit コマンド実行後、自動的に下記のような設定になっている

1
2
3
4
5
6
7
8
<interface type='bridge'>
  <mac address='52:54:00:90:9a:9e'/>
  <source bridge='br3'/>
  <virtualport type='openvswitch'>
    <parameters interfaceid='a52f60f2-2ef5-3eb5-9a89-cb0f13e3aa40'/>
  </virtualport>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x08' function='0x0'/>
</interface>

mac address, parameters, address は自動的に設定してくれる

以下は virsh attach-interface コマンド実行時のエラーメッセージ

1
2
3
# virsh attach-interface --type bridge --source br1 --model e1000 fumi-1
エラー: インターフェースを接続できませんでした
エラー: Unable to add bridge br1 port vnet2: Operation not supported

VM に Disk の追加

VM が Down している状態で実行する

1. Disk Image の作成

1
2
# cd /var/lib/libvirt/images
# qemu-img create -f qcow2 disk_Maria-1.img 40G

2. 設定の追加

virsh edit コマンドを利用して設定を追記

1
# virsh edit Maria-1
  • 追加分 Config
1
2
3
4
5
<disk type='file' device='disk'>
  <driver name='qemu' type='qcow2' cache='none'/>
  <source file='/var/lib/libvirt/images/disk_Maria-1.img'/>
  <target dev='vdb' bus='virtio'/>
</disk>

VM のクローン

1. クローンコマンドの実行

VM が Down している状態で実行

1
# virt-clone --original cent_base --name Maria-1 --file /var/lib/libvirt/images/Maria-1.img

2. MAC Address のメモ

1
2
3
# virsh dumpxml Maria-1 | grep mac
    <type arch='x86_64' machine='rhel6.6.0'>hvm</type>
      <mac address='52:54:00:64:df:4f'/>

3. vnc port の編集

既存の VM とかぶらない VNC の Port 番号に変更

1
# virsh edit Maria-1
1
2
3
<graphics type='vnc' port='20001' autoport='no' listen='0.0.0.0'>
  <listen type='address' address='0.0.0.0'/>
</graphics>

4. VM の起動

1
virsh start Maria-1

5. 70-persistent-net.rules の編集

ここから VNC 経由で接続して作業

1
/etc/udev/rules.d/70-persistent-net.rules

6. ifcfg-eth0 の編集

1
2
3
4
5
6
7
UUID
HWADDR
BOOTPROTO=dchp

BOOTPROTO=none
IPADDR=211.14.1.11
NETMASK=255.255.255.192

7. VM の再起動

1
# shutdown -r now

8. Interface のアドレス設定

手動で IP アドレスを付与

1
# ifconfig eth0 inet 172.25.255.131/24

9. resolv.conf の編集

VNC 設定

1
<graphics type='vnc' port='21144' autoport='no' listen='0.0.0.0' keymap='ja' passwd='Password'>

参照 URL

Wakame-vdc ( OpenVZ 版 HVA ) インストールメモ

目的

wakame-vdc ( OpenVZ 版 HVA ) をインストールする際の手順をまとめてみる

yum repository の準備

wakame-vdc インストールするために必要なレポジトリの登録

1
2
# curl -o /etc/yum.repos.d/wakame-vdc.repo -R https://raw.githubusercontent.com/axsh/wakame-vdc/master/rpmbuild/wakame-vdc.repo
# yum install -y epel-release

DCMGR のインストール

パッケージのインストール

1
# yum install -y wakame-vdc-dcmgr-vmapp-config

設定ファイルのコピー

1
# cp /opt/axsh/wakame-vdc/dcmgr/config/dcmgr.conf.example /etc/wakame-vdc/dcmgr.conf

MySQL の起動

1
# service mysqld start

DB の作成

1
# mysqladmin -uroot create wakame_dcmgr

DB Table の作成

1
2
# cd /opt/axsh/wakame-vdc/dcmgr
# /opt/axsh/wakame-vdc/ruby/bin/rake db:up

OpenVZ 版 HVA のインストール

前提条件

  • VM は 192.168.3.0/24 の IP Address レンジに作成される
  • HVA の物理ホスト eth0 に 192.168.3.100 が設定されている

yum repository の準備

OpenVZ 版 HVA をインストールするために必要なレポジトリの登録

1
# curl -o /etc/yum.repos.d/openvz.repo -R https://raw.githubusercontent.com/axsh/wakame-vdc/master/rpmbuild/openvz.repo

パッケージのインストール

1
# yum install -y wakame-vdc-hva-openvz-vmapp-config

設定ファイルのコピー

1
# cp /opt/axsh/wakame-vdc/dcmgr/config/hva.conf.example /etc/wakame-vdc/hva.conf

bridge network の設定

bridge Interface の作成

  • /etc/sysconfig/network-scripts/ifcfg-br0
1
2
3
4
5
6
7
8
9
10
DEVICE=br0
TYPE=Bridge
BOOTPROTO=static
ONBOOT=yes
NM_CONTROLLED=no
IPADDR=192.168.3.100
NETMASK=255.255.255.0
GATEWAY=192.168.3.1
DNS1=8.8.8.8
DELAY=0
  • /etc/sysconfig/network-scripts/ifcfg-eth0
1
2
3
4
DEVICE="eth0"
ONBOOT="yes"
BRIDGE=br0
NM_CONTROLLED=no

設定後、ネットワークの再起動

1
# service network restart

NODE_ID の設定

HVA を一意に識別するために、NODE_ID の設定をする

  • /etc/default/vdc-hva
1
NODE_ID=demo1

※ Default だとコメントアウトされている

HVA を DCMGR に登録する

1
2
3
4
5
6
7
8
9
/opt/axsh/wakame-vdc/dcmgr/bin/vdc-manage host add hva.demo1 \
   --uuid hn-demo1 \
   --display-name "demo HVA 1" \
   --cpu-cores 100 \
   --memory-size 10240 \
   --hypervisor openvz \
   --arch x86_64 \
   --disk-space 102400 \
   --force

Network 関連パラメータを DCMGR に登録する

VDC 操作コマンド起動

1
# /opt/axsh/wakame-vdc/dcmgr/bin/vdc-manage

Network レンジの登録

nw-demo1 という Network レンジを作成する

1
2
3
4
5
6
7
8
vdc-manage>> network add \
  --uuid nw-demo1 \
  --ipv4-network 192.168.3.0 \
  --prefix 24 \
  --ipv4-gw 192.168.3.1 \
  --dns 8.8.8.8 \
  --account-id a-shpoolxx \
  --display-name "demo network"

DHCP レンジの登録

nw-demo1 の DHCP で割り当てる IP アドレスのレンジを設定

1
vdc-manage>> network dhcp addrange nw-demo1 192.168.3.1 192.168.3.254

DHCP 割り当て除外 IP の登録

nw-demo1 の DHCP で割り当てる IP アドレスのレンジ内の割り当て除外 IP の登録

1
vdc-manage>> network reserve nw-demo1 --ipv4 192.168.3.100

VM 用 MAC Address レンジの登録

1
vdc-manage>> macrange add 525400 1 ffffff --uuid mr-demomacs

dc_network の作成と Network レンジとの紐付け

public という名称の dc_network を作成し、nw-demo1 と紐付ける

1
2
3
vdc-manage>> network dc add public --uuid dcn-public --description "the network instances are started in"
vdc-manage>> network dc add-network-mode public securitygroup
vdc-manage>> network forward nw-demo1 public

作成した dc_network と物理/Bridge Interface が紐付いているか確認

  • /etc/wakame-vdc/hva.conf
1
2
3
4
5
dc_network('public') {
  bridge_type 'linux'
  interface 'eth0'
  bridge 'br0'
}

OS の再起動

OpenVZ 用カスタムカーネルが動作するように OS を再起動する

WebUI のインストール

パッケージのインストール

1
# yum install -y wakame-vdc-webui-vmapp-config

設定ファイルのコピー

1
2
3
4
5
6
7
# cp /opt/axsh/wakame-vdc/frontend/dcmgr_gui/config/database.yml.example /etc/wakame-vdc/dcmgr_gui/database.yml

# cp /opt/axsh/wakame-vdc/frontend/dcmgr_gui/config/dcmgr_gui.yml.example /etc/wakame-vdc/dcmgr_gui/dcmgr_gui.yml

# cp /opt/axsh/wakame-vdc/frontend/dcmgr_gui/config/instance_spec.yml.example /etc/wakame-vdc/dcmgr_gui/instance_spec.yml

# cp /opt/axsh/wakame-vdc/frontend/dcmgr_gui/config/load_balancer_spec.yml.example /etc/wakame-vdc/dcmgr_gui/load_balancer_spec.yml

DB の作成

1
# mysqladmin -uroot create wakame_dcmgr_gui

DB Table の作成

1
2
# cd /opt/axsh/wakame-vdc/frontend/dcmgr_gui/
# /opt/axsh/wakame-vdc/ruby/bin/rake db:init

システム用アカウントの作成

GUI マネージャ操作コマンド起動

1
# /opt/axsh/wakame-vdc/frontend/dcmgr_gui/bin/gui-manage

default アカウントの追加

1
gui-manage>> account add --name default --uuid a-shpoolxx

新規ユーザの追加

下記のユーザ名/パスワードのユーザを登録

  • ユーザ名: demo
  • パスワード: demo

新規ユーザの登録

1
gui-manage>> user add --name "demo user" --uuid u-demo --password demo --login-id demo

追加ユーザとアカウントを紐づける

1
gui-manage>> user associate u-demo --account-ids a-shpoolxx

デモ用マシンイメージの登録

  • デモ用マシンイメージを利用する
    • 下記のコマンドを実行して事前に Download しておく
     # mkdir -p /var/lib/wakame-vdc/images
     # cd /var/lib/wakame-vdc/images
     # curl -O http://dlc.wakame.axsh.jp.s3.amazonaws.com/demo/vmimage/ubuntu-lucid-kvm-md-32.raw.gz
    
    • デモ用マシンイメージの md5 sum はメモしておく
    # md5sum ubuntu-lucid-kvm-md-32.raw.gz
    

VDC 操作コマンド起動

1
# /opt/axsh/wakame-vdc/dcmgr/bin/vdc-manage

backupstorage の作成

マシンイメージを保存する場所としてローカルのストレージを登録する

1
2
3
4
5
6
vdc-manage>> backupstorage add \
  --uuid bkst-local \
  --display-name "local storage" \
  --base-uri "file:///var/lib/wakame-vdc/images/" \
  --storage-type local \
  --description "storage on the local filesystem"

マシンイメージをローカルのバックアップストレージに登録

1
2
3
4
5
6
7
8
9
vdc-manage>> backupobject add \
  --uuid bo-lucid5d \
  --display-name "Ubuntu 10.04 (Lucid Lynx) root partition" \
  --storage-id bkst-local \
  --object-key ubuntu-lucid-kvm-md-32.raw.gz \
  --size 149084 \
  --allocation-size 359940 \
  --container-format gz \
  --checksum 1f841b195e0fdfd4342709f77325ce29

マシンイメージをシステムに登録

1
2
3
4
5
vdc-manage>> image add local bo-lucid5d \
  --account-id a-shpoolxx \
  --uuid wmi-lucid5d \
  --root-device uuid:148bc5df-3fc5-4e93-8a16-7328907cb1c0 \
  --display-name "Ubuntu 10.04 (Lucid Lynx)"

Wakame-vdc の起動

RabbitMQ Server の起動

1
# service rabbitmq-server start

Wakame-vdc 各コンポーネントの起動

1
2
3
4
# start vdc-dcmgr
# start vdc-collector
# start vdc-hva
# start vdc-webui

Web UI へのアクセス

下記の URL にアクセス

下記のユーザ名/パスワードのユーザを登録

  • ユーザ名: demo
  • パスワード: demo

KVM VM に OS をインストール

概要

KVM VM に OS をインストールする手法のまとめ

CentOS 6.6 の場合

仮想HDDイメージファイルの作成

1
# dd if=/dev/zero of=/var/lib/libvirt/images/centos66.img bs=1M count=10240

インストール開始

VNC経由もしくはテキストモードにてインストールを実施する

VNC 経由の場合

VNC 経由で作業を実施するために、virt-viewr を事前にインストールしておく

1
# yum install virt-viewer

下記のコマンドを実行し、インストールを実施

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# virt-install \
 --virt-type=kvm \
 --hvm \
 --connect qemu:///system \
 --vcpus 1 \
 --ram=1024 \
 --os-type=linux \
 --os-variant=rhel6 \
 --network bridge=br0 \
 --vnc --vncport=29741 --vnclisten=0.0.0.0 \
 --name centos66 \
 --disk=/var/lib/libvirt/images/centos66.img \
 --location='/var/lib/libvirt/images/CentOS-6.6-x86_64-bin-DVD1.iso' \
 --accelerate

テキストモードの場合

テキストモードインストールでは、GUIインストールとは異なり、パーティション等の編集メニューが出てこない。 インストール時に指定したい場合には、キックスタートを利用してインストールすればよい。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# virt-install \
 --virt-type=kvm \
 --hvm \
 --connect qemu:///system \
 --vcpus 1 \
 --ram=1024 \
 --os-type=linux \
 --os-variant=rhel6 \
 --network bridge=br0 \
 --nographics \
 --extra-args='console=tty0 console=ttyS0, 115200n8' \
 --name centos66 \
 --disk=/var/lib/libvirt/images/centos.img \
 --location='/var/lib/libvirt/images/CentOS-6.6-x86_64-bin-DVD1.iso' \
 --accelerate \

ドメインの起動

1
# virsh start centos66

ubuntu-14.04 の場合

作業途中で失敗する…

仮想HDDイメージファイルの作成

1
# dd if=/dev/zero of=/var/lib/libvirt/images/ubuntu.img bs=1M count=10240

ISO イメージをループバックマウント

1
# mount --read-only --options loop ubuntu-14.04.1-server-amd64.iso ISO

インストール開始

VNC 経由の場合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# virt-install \
 --name=TestMachine \
 --ram=2048 \
 --vcpus=1 \
 --os-variant ubuntuprecise \
 --hvm \
 --connect qemu:///system \
 --virt-type=kvm \
 --disk=/var/lib/libvirt/images/ubuntu.img,format=qcow2 \
 --network=bridge:br0 \
 --keymap=ja \
 --location /var/lib/libvirt/images/ISO/ \
 --serial pty \
 --extra-args=console=ttyS0

Tips

SSH PortFoward

1
# ssh -L 29741:localhost:29741 root@172.16.1.108 

gzip 圧縮 ( 元ファイル残す )

1
# gzip -c centos66.img > 20150202_2_centos66.img.gz

参照 URL

Vagrant Box を Atlas で管理

概要

Vagrant Box を Atlas by HashiCorp を利用して管理するフローをまとめる。

やりたいこと

  • Vagrant Box を一箇所で管理
    • test-kitchen の環境が会社と自宅にあり、それぞれ利用している Vagrant Box 異なってくる可能性があるため
  • Vagrant Box のバージョン管理
    • Vagrant Box に手を加える場合があるため

必要なもの

  • Atlas アカウント
  • AWS アカウント
    • S3 に Vagrant Box Image を保存するため
  • 作業端末
    • Vagrant ver1.5.0 以上

作業フロー

ベースとなる Box の追加

vagrant box add コマンドを利用して、ベースとなる Box を作業端末に追加する。

  • chef/centos-6.6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ vagrant box add chef/centos-6.6 
==> box: Loading metadata for box 'chef/centos-6.6'
    box: URL: https://vagrantcloud.com/chef/centos-6.6
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) virtualbox
2) vmware_desktop

Enter your choice: 1
==> box: Adding box 'chef/centos-6.6' (v1.0.0) for provider: virtualbox
    box: Downloading: https://vagrantcloud.com/chef/boxes/centos-6.6/versions/1.0.0/providers/virtualbox.box
==> box: Successfully added box 'chef/centos-6.6' (v1.0.0) for 'virtualbox'!

Vagrantfile の作成

vagrant init コマンドを利用して、Vagrantfile を作成

1
2
3
4
5
$ vagrant init chef/centos-6.6
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
  • 作成される Vagrantfile ( コメントアウト行は削除 )
1
2
3
4
5
6
7
8
9
# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "chef/centos-6.6"
end

Vagrantfile の修正

作成した Vagranfile の修正

追加必須

synced_folder の disable

  • 追加行
1
config.vm.synced_folder ".", "/vagrant", disabled: true
  • Vagrantfile
1
2
3
4
5
6
7
8
9
10
# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "chef/centos-6.6"
  config.vm.synced_folder ".", "/vagrant", disabled: true
end

任意で追加

Docker 環境セットアップ

1
2
3
config.vm.provision "docker" do |d| 
  d.version = 'latest'
end

chef 環境セットアップ

1
config.omnibus.chef_version = :latest

Vagrant Box の起動

vagrant up コマンドで起動

Vagrant Box のパッケージ化

vagrant package コマンドを利用して Box のパッケージを作成

1
2
3
4
5
6
7
$ vagrant package --output centos-6.6.box
WARNING: Could not load IOV methods. Check your GSSAPI C library for an update
WARNING: Could not load AEAD methods. Check your GSSAPI C library for an update
==> default: Attempting graceful shutdown of VM...
==> default: Clearing any previously set forwarded ports...
==> default: Exporting VM...
==> default: Compressing package to: /private/tmp/centos-6.6.box

S3 へのアップロード

S3 の任意の場所に作成したパッケージファイル ( e.g. centos-6.6.box ) をアップロード。

アップロード後、ファイルの Everyone へのパーミッションに Open/Download を付加する。

Atlas 上に登録するために、Link の URL を控えておく

1
https://s3-ap-northeast-1.amazonaws.com/ryoogata.ap-northease-1.tech-dev.info/centos-6.6.box

Atlas 上で新しい Box を作成

1. Atlas にログイン後、新規 Box 追加

Atlas ログイン直後の Development の Tab から create a box here. をクリックするか、下記の URL にアクセスして新規 Box 追加画面へ移る。

https://atlas.hashicorp.com/boxes/new

2. Create a new box

Name

1
centos-6.6

Short description

1
chef/centos-6.6 ( v1.0.0 ) base customized image

Description

1
2
3
4
5
chef/centos-6.6 ( v1.0.0 ) をベースに下記のアプリケーションをインストール済みイメージ

* Virtualbox Guest Additions
* Chef
* Docker

3. New Box Version

Version

1
1.0.0

Description

1
2
3
4
5
6
7
8
下記のバージョンのアプリケーションをインストール済みイメージ

* Virtualbox Guest Additions
  * 4.3.20
* Chef
  * 12.0.3
* Docker
  * 1.3.2

4. New Box Provider

Provider

1
virtualbox

`

URL

1
https://s3-ap-northeast-1.amazonaws.com/*******/centos-6.6.box

5. Release version

Release version ボタンを押下し、リリースする

Vagrant トラブルシュート

error: No such device

vagrant up 時、下記のエラーメッセージを吐いて起動に失敗する場合がある。

1
2
3
4
5
6
7
8
9
10
11
12
13
==> default: Mounting shared folders...
    default: /vagrant => /private/tmp
Vagrant::Errors::LinuxMountFailed: Failed to mount folders in Linux guest. This is usually because
the "vboxsf" file system is not available. Please verify that
the guest additions are properly installed in the guest and
can work properly. The command attempted was:

mount -t vboxsf -o uid=`id -u vagrant`,gid=`getent group vagrant | cut -d: -f3` vagrant /vagrant
mount -t vboxsf -o uid=`id -u vagrant`,gid=`id -g vagrant` vagrant /vagrant

The error output from the last command was:

/sbin/mount.vboxsf: mounting failed with the error: No such device

sync folder が正常に mount できずにエラーになる。Vagrant box に Virtualbox Guest Additions がインストールされていなかったり、Vagrant のバージョンとの乖離がありすぎると問題になるみたい。

Vagrant up 時に sync folder を mount しないように Vagrantfile に config.vm.synced_folder ".", "/vagrant", disabled: true の記述を追加して回避。

Knife-ec2 や Kitchen-ec2 のための環境変数設定

概要

test-kitchen の dirver に ec2 を利用する際や、knife ec2 コマンド、AWS CLI を利用する際に環境変数から設定値を読み込む設定等のまとめ。

git で管理している設定ファイルに直接 AWS の Access Key や Secret Access Key などを記述しなくても済む方法。

.bash_profile

knife-ec2 および kitchen-ec2 の環境変数関連の挙動から、.bash_profile に設定する環境変数。

  • .bash_profile
1
2
3
4
export EC2_SSH_KEY_PATH=~/.ssh/********.pem
export AWS_ACCESS_KEY_ID=********************
export AWS_SECRET_ACCESS_KEY=********************
export AWS_SSH_KEY_ID=********************

knife-ec2

knife.rb に環境変数から設定値を読み込む設定を行っている項目

1
2
3
4
knife[:identity_file] = ENV['EC2_SSH_KEY_PATH']
knife[:aws_access_key_id] = ENV['AWS_ACCESS_KEY_ID']
knife[:aws_secret_access_key] = ENV['AWS_SECRET_ACCESS_KEY']
knife[:aws_ssh_key_id] = ENV['AWS_SSH_KEY_ID']

kitchen-ec2

.kitchen.yml に設定項目を記述しなくても、環境変数に特定の値が設定されている場合には自動的に設定値を設定してくれる項目

設定項目 設定のための環境変数
aws_access_key_id AWS_ACCESS_KEY or AWS_ACCESS_KEY_ID
aws_secret_access_key AWS_SECRET_KEY or AWS_SECRET_ACCESS_KEY
aws_session_token AWS_SESSION_TOKEN or AWS_TOKEN
aws_ssh_key_id AWS_SSH_KEY_ID

.kitchen.yml に環境変数から設定値を読み込む設定を行っている項目

  • EC2_SSH_KEY_PATH
1
2
3
4
5
6
7
driver:
  name: ec2
  security_group_ids: ["sg-6744b502"]
  ssh_key: <%= ENV['EC2_SSH_KEY_PATH'] %>
  region: ap-northeast-1
  availability_zone: ap-northeast-1a
  interface: public

.aws/config

  • 環境変数から設定値を読み込む
    • AWS_ACCESS_KEY_ID
    • AWS_SECRET_ACCESS_KEY

Tips

knife.rb に設定可能な項目 List

設定項目 default 設定値
knife[:aws_credential_file] -
knife[:aws_access_key_id] -
knife[:aws_secret_access_key] -
knife[:region] -
knife[:use_iam_profile] false
knife[:flavor] -
knife[:image] -
knife[:placement_group] -
knife[:availability_zone] -
knife[:chef_node_name] -
knife[:aws_ssh_key_id] -
knife[:ssh_port] 22
knife[:ssh_gateway] -
knife[:ssh_gateway_identity] -
knife[:bootstrap_version] -
knife[:bootstrap_proxy] -
knife[:distro] chef-full
knife[:template_file] false
knife[:secret] -
knife[:secret_file] -
knife[:s3_secret] -
knife[:subnet_id] -
knife[:private_ip_address] -
knife[:bootstrap_protocol] -
knife[:fqdn] -
knife[:aws_user_data] -
knife[:ebs_volume_type] standard
knife[:provisioned_iops] -