虚拟机跨主机RESIZE和迁移时候报错的问题

本文解决了一个在Kilo版本OpenStack中遇到的问题,即在分布式环境下修改虚拟机配置大小时出现的错误。该错误发生在一个虚拟机被迁移到另一台主机时,并且与nova用户的免密钥登录配置有关。文章详细介绍了错误原因及解决步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

起因

KILO版本,
今天查到在分布式环境下修改虚拟机配置大小,是有一定的概率出错的,
当一个虚拟机修改配置时候,有可能此虚拟机会被迁移到另一个资源更多的主机,这个时候就会报错
我查了原因是nova 用户需要配置免密钥登录,才能完成这样的操作。

报错内容如下:

nova.compute.manager [req-7cb1c029-beb4-4905-a9d9-62d488540eda f542d1b5afeb4908b8b132c4486f9fa8 c2bfab5ad24642359f43cdff9bb00047]   Setting instance vm_state to ERROR
TRACE nova.compute.manager   Traceback (most recent call last):
TRACE nova.compute.manager     File "/usr/lib/python2.7/site-packages/nova/compute/manager.py", line 5596, in _error_out_instance_on_exception
TRACE nova.compute.manager       yield
TRACE nova.compute.manager     File "/usr/lib/python2.7/site-packages/nova/compute/manager.py", line 3459, in resize_instance
TRACE nova.compute.manager       block_device_info)
TRACE nova.compute.manager     File "/usr/lib/python2.7/site-packages/nova/virt/libvirt/driver.py", line 4980, in migrate_disk_and_power_off
TRACE nova.compute.manager       utils.execute('ssh', dest, 'mkdir', '-p', inst_base)
TRACE nova.compute.manager     File "/usr/lib/python2.7/site-packages/nova/utils.py", line 165, in execute
TRACE nova.compute.manager       return processutils.execute(*cmd, **kwargs)
TRACE nova.compute.manager     File "/usr/lib/python2.7/site-packages/nova/openstack/common/processutils.py", line 193, in execute
TRACE nova.compute.manager       cmd=' '.join(cmd))
TRACE nova.compute.manager   ProcessExecutionError: Unexpected error while running command.
TRACE nova.compute.manager   Command: ssh 10.5.2.20 mkdir -p /var/lib/nova/instances/99736f90-db0f-4cba-8f44-a73a603eee0b
TRACE nova.compute.manager   Exit code: 255
TRACE nova.compute.manager   Stdout: ''
TRACE nova.compute.manager   Stderr: 'Host key verification failed.\r\n'
TRACE nova.compute.manager   
ERROR oslo.messaging.rpc.dispatcher [-] Exception during message handling: Unexpected error while running command.
Command: ssh 10.5.2.20 mkdir -p /var/lib/nova/instances/99736f90-db0f-4cba-8f44-a73a603eee0b
Exit code: 255

解决办法

控制节点配置:

usermod -s /bin/bash nova

Generate SSH key and configuration
After doing this the next steps are all run as the nova user.

su - nova

We need to generate an SSH key:

ssh-keygen -t rsa

Follow the directions, and save the key WITHOUT a passphrase.

Next up we need to configure SSH to not do host key verification, unless you want to manually SSH to all compute nodes that exist and accept the key (and continue to do so for each new compute node you add).

cat << EOF > ~/.ssh/config
Host *
    StrictHostKeyChecking no
    UserKnownHostsFile=/dev/null
EOF

cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys

如果用比较暴力简单的方案,可以COPY这个.ssh到其他主机的nova家目录,就可以了

scp -r serverip:/var/lib/nova/.ssh/*   /var/lib/nova/.ssh/

之后,发现仍有报错:

 .103 7779 TRACE nova.compute.manager [instance:  ] Traceback (most recent call last):
 .103 7779 TRACE nova.compute.manager [instance:  ] File "/usr/lib/python2.7/dist-packages/nova/compute/manager.py", line 6459, in _error_out_instance_on_exception
 .103 7779 TRACE nova.compute.manager [instance:  ] yield
 .103 7779 TRACE nova.compute.manager [instance:  ] File "/usr/lib/python2.7/dist-packages/nova/compute/manager.py", line 4054, in resize_instance
 .103 7779 TRACE nova.compute.manager [instance:  ] timeout, retry_interval)
 .103 7779 TRACE nova.compute.manager [instance:  ] File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py", line 6353, in migrate_disk_and_power_off
 .103 7779 TRACE nova.compute.manager [instance:  ] shared_storage)
 .103 7779 TRACE nova.compute.manager [instance:  ] File "/usr/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 85, in __exit__
 .103 7779 TRACE nova.compute.manager [instance:  ] six.reraise(self.type_, self.value, self.tb)
 .103 7779 TRACE nova.compute.manager [instance:  ] File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py", line 6342, in migrate_disk_and_power_off
 .103 7779 TRACE nova.compute.manager [instance:  ] on_completion=on_completion)
 .103 7779 TRACE nova.compute.manager [instance:  ] File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/utils.py", line 329, in copy_image
 .103 7779 TRACE nova.compute.manager [instance:  ] on_execute=on_execute, on_completion=on_completion)
 .103 7779 TRACE nova.compute.manager [instance:  ] File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/utils.py", line 55, in execute
 .103 7779 TRACE nova.compute.manager [instance:  ] return utils.execute(*args, **kwargs)
 .103 7779 TRACE nova.compute.manager [instance:  ] File "/usr/lib/python2.7/dist-packages/nova/utils.py", line 207, in execute
 .103 7779 TRACE nova.compute.manager [instance:  ] return processutils.execute(*cmd, **kwargs)
 .103 7779 TRACE nova.compute.manager [instance:  ] File "/usr/lib/python2.7/dist-packages/oslo_concurrency/processutils.py", line 174, in execute
 .103 7779 TRACE nova.compute.manager [instance:  ] raise UnknownArgumentError(_('Got unknown keyword args: %r') % kwargs)
 .103 7779 TRACE nova.compute.manager [instance:  ] UnknownArgumentError: Got unknown keyword args: {'on_execute': <function <lambda> at 0x7f3a64527050>, 'on_completion': <function <lambda> at 0x7f39ff6ddf50>}
 .103 7779 TRACE nova.compute.manager [instance:  ]

查证,
OpenStack Nova Kilo release requires 1.8.2 or higher, this is due to the
addition of on_execute and on_completion to the execute(..) function.
The latest Ubuntu OpenStack Kilo packages currently have code that
depend on this new updated release. This results in a crash in some
operations like resizes or migrations.

下载软件python-oslo-concurrency-1.8.2-1.el7
http://cbs.centos.org/koji/buildinfo?buildID=7030
替换后,解决!

参考:
http://funcptr.net/2014/09/29/openstack-resizing-of-instances/
https://blueprints.launchpad.net/nova/+spec/no-migration-resize

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

day walker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值