読者です 読者をやめる 読者になる 読者になる

VMインスタンスのマイグレーション(ライブじゃないよ)とリサイズ設定(EPEL版)

EPEL版のパッケージでOpenStackをインストールした環境でVMインスタンスマイグレーション(ライブじゃないよ)とリサイズを行う際に忘れずに実施しておかなければならない設定があったのでメモ。
設定内容は単純で、

「各Computeノードのnovaユーザが他のComputeノードのrootユーザとしてssh経由でノンパスワードログインし、任意コマンドを実行できること」

です。リサイズ作業は、マイグレーションを伴うのですが、このときに各Computeノード間でnovaユーザによるsshが実行されるようで、上記の設定を実施していないと、

TRACE nova.openstack.common.rpc.amqp Command: ssh {Migrate先ComputeノードIP} mkdir -p /var/lib/nova/instances/{VMインスタンス}

このようなエラーとなってnova resizeコマンドが失敗します。
※共有ストレージなんだからmkdirもないだろう...とも思うのですが、

実施する設定は、

  1. novaユーザのログインシェル有効化と秘密鍵/公開鍵生成
  2. novaユーザの.ssh/configを作成
  3. 全Computeノードのrootユーザのauthorized_keysに全Computeノードのnovaユーザの公開鍵を設定

となります。
novaユーザの公開鍵・秘密鍵は全Computeノードで共通でもいいかなと個人的には考えていますので、ぼくは共通にしています。

設定例

novaユーザのログインシェル有効化と秘密鍵/公開鍵生成

ぼくはCloudControllerで実施しました。

# usermod -s /bin/bash nova
# su - nova
$ ssh-keygen -t rsa -b 2048 -P ""
$ ls -l $HOME/.ssh/
total 8
-rw------- 1 nova nova 1675 Jan 10 15:30 id_rsa
-rw-r--r-- 1 nova nova  395 Jan 10 15:30 id_rsa.pub

※EPEL版のパッケージが作成するnovaユーザの$HOMEは /var/lib/nova/ です。

CloudControllerでnovaユーザの.ssh/configを作成
  • $HOME/.ssh/config
Host *
    StrictHostKeyChecking no
    UserKnownHostsFile=/dev/null
各Computeノードのrootユーザのauthorized_keysにnovaユーザの公開鍵を設定
$ ssh root@{各Computeノード} "mkdir -m 0700 .ssh"
$ scp $HOME/.ssh/id_rsa.pub root@{各Computeノード}:./.ssh/authorized_keys
各Computeノードのnovaユーザに共通の.ssh/以下を展開

面倒なので各Computeノードの.ssh以下はCloudControllerと共通にしておきます。

$ cd
$ tar cvf dotssh.tar .ssh/
.ssh/
.ssh/id_rsa
.ssh/config
.ssh/id_rsa.pub
$ ssh root@{各Computeノード} "usermod -s /bin/bash nova"
$ scp dotssh.tar root@{各Computeノード}:/var/lib/nova/
$ ssh root@{各Computeノード} "cd /var/lib/nova && tar xf dotssh.tar && rm -f dotssh.tar"


設定していなくてnova resizeでハマりました。わすれないようにしないとなぁ。