はじめに
OpenStackを利用する際、インスタンスのリサイズを行おうとするとエラーになり、以下のようなエラーログが出力される場合がある。
Unexpected error while running command.\nCommand: ssh ${ip-of-nova-compute} mkdir -p /var/lib/nova/instances/${instance-uuid}\nExit code: 255\nStdout: ''\nStderr: 'Host key verification failed.\\r\\n'\n"]
通常、OpenStack + KVMを利用している際、インスタンスのリサイズを行うとリソースの余っているKVMホストにリサイズとともにマイグレーションされる。その際、マイグレーション元のKVMホストからsshを用いてマイグレーション先のKVMホストに対象インスタンスのディレクトリを作成しようと試みる。リサイズでエラーが起こる場合は大抵このエラーに遭遇するのだが、こうなった際の対処法は2つある。
1. 同一ホストでリサイズを行うようにする
リサイズを行う際にマイグレーションを実行せずに自身のKVMホストでリサイズを行う方法。以下の設定を/etc/nova/nova.conf
に入れることで可能になる。
# すべてのnovaノードで追加する
allow_resize_to_same_host=True
# nova-schedulerが稼働しているノードで追加する
scheduler_default_filters=AllHostsFilter
この場合の制約は、nova-schedulerのフィルターがAllHostsFilterに固定されてしまうことである。フィルターが使えず、かつ、同一ホストでリサイズされることによりコンピュートリソース全体の管理が難しくなってくる。なので、テスト目的以外での利用はおすすめできない、と、公式のドキュメントにも記載がある。
なお、VMwareをハイパーバイザーとして利用している場合には、nova-computeはvCenterとのやり取りをしているにすぎないため、基本的にはこの設定を入れて同一ホスト上でのリサイズしかできない(Icehouseの場合)。もし、Kiloで状況が変わっているなら誰か教えて欲しい。
2. novaユーザをログイン可能なユーザに変更し公開鍵を設定する
通常はこちらの方法をとる。やり方は以下のとおり。
- novaユーザのログインシェル有効化と秘密鍵/公開鍵生成
-
nova-api
が稼働しているノードで秘密鍵/公開鍵生成と、.ssh/configと.ssh/authorized_keysの作成 - 全てのnovaノードに共通の.ssh配下を展開する
novaユーザのログインシェル有効化と秘密鍵/公開鍵生成
通常novaユーザは、以下のとおりログインシェルが設定されていない。
$ cat /etc/passwd | grep nova
nova:x:106:112::/var/lib/nova:/bin/false
そこでまずはログインシェルをbash
に変更する。これはnova関連のプロセスが稼働しているすべてのホストで実行する。なお、novaユーザのデフォルトのホームディレクトリは/usr/lib/nova
である。
$ sudo usermod -s /bin/bash nova
nova-api
が稼働しているノードで秘密鍵/公開鍵生成と、.ssh/configと.ssh/authorized_keysの作成
次に、nova-api
が稼働しているホストでnovaユーザにスイッチして秘密鍵/公開鍵を生成する
$ sudo su nova
$ ssh-keygen -t rsa
その後、.ssh/configと.ssh/authorized_keysも作成する
$ cat << EOF > ~/.ssh/config
Host *
StrictHostKeyChecking no
UserKnownHostsFile=/dev/null
EOF
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys; chmod 600 ~/.ssh/authorized_keys
全てのnovaノードに共通の.ssh配下を展開する
nova-api
ノードにおいて、
$ sudo su nova
$ cd ~/
$ tar zcvf /tmp/nova_ssh.tar.gz .ssh
$ scp /tmp/nova_ssh.tar.gz ${パスワードログインが可能な別のユーザ}@${全てのnovaノード}:/tmp
nova-api
の.sshが配布されたノードにおいて以下を実行。実行ユーザがnovaユーザである必要は無い。
$ sudo tar xvzf /tmp/nova_ssh.tar.gz -C /var/lib/nova/
これでインスタンスのリサイズが可能になる。