【问题标题】:Can I run a cloud-init environment without using openstack or EC2?我可以在不使用 openstack 或 EC2 的情况下运行 cloud-init 环境吗?
【发布时间】:2015-07-19 10:39:42
【问题描述】:

我已经创建了一个包含多个基于 KVM 的 Linux 主机的环境。 我正在使用 virt-manager 创建不同的虚拟机,并使用 Linux 网桥在不同主机中的虚拟机之间创建连接。

现在,我想要一个自动配置服务器,以便我的虚拟机可以根据每个虚拟机拥有的唯一 ID 自动配置其名称、IP 地址、运行一些脚本等。是否可以在非 openstack 环境中复制一种 cloud-init 设置?

我已尝试通过以下方式使用 cloud-init 数据源 NoCloud。首先,我在VM中安装了cloud-init并配置了cloud.cfg:

datasource:
  NoCloud
datasource_list: [ NoCloud ]
disable_ec2_metadata: True

然后,我创建了一个用户数据文件和元数据文件,内容如下:

用户数据:

#cloud-config
hostname: prueba
password: passw0rd
chpasswd: { expire: False }
ssh_pwauth: True

元数据:

instance-id: iid-local01
local-hostname: prueba

然后,我生成了一个iso文件:

genisoimage  -output seed.iso -volid cidata -joliet -rock user-data meta-data

最后,我已将磁盘附加到 VM 并启动它。这是 XML 的相关部分:

<disk type='file' device='disk'>
  <driver name='qemu' type='raw'/>
  <source file='/opt/images/seed.iso'/>
  <backingStore/>
  <target dev='vdb' bus='virtio'/>
  <alias name='virtio-disk1'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</disk>

当虚拟机启动时,它会说:

2015-05-12 12:12:40,394 - util.py[WARNING]: Getting data from <class 'cloudinit.sources.DataSourceNoCloud.DataSourceNoCloudNet'> failed
 * Stopping Read required files in advance (for other mountpoints)                           [ OK ]
 * Stopping Read required files in advance (for other mountpoints)                           [ OK ]
 * Stopping Read required files in advance (for other mountpoints)                           [ OK ]
2015-05-12 12:12:48,808 - url_helper.py[WARNING]: Calling 'http://169.254.169.254/2009-04-04/meta-data/instance-id' failed [3/120s]: request error [HTTPConnectionPool(host='169.254.169.254', port=80): Max retries exceeded with url: /2009-04-04/meta-data/instance-id (Caused by <class 'socket.error'>: [Errno 113] No route to host)]

关于如何使它工作的任何建议?

【问题讨论】:

  • /etc/cloud/cloud.cfg 中的数据源对我来说无法正常工作。我已经运行了“dpkg-reconfigure cloud-init”并指定了 NoCloud 数据源。使用用户数据和元数据生成图像的过程也有点不同: truncate --size 2M init.img mkfs.vfat -n cidata init.img mcopy -oi init1.img user-data meta-data ::
  • 我插入了一个新磁盘,VM的XML libvirt域描述符结果如下:
  • 通过上层配置,我可以让一些云配置命令正常工作(设置密码和主机名),而其他的如runcmd或write_files还不能工作

标签: linux openstack cloud-init


【解决方案1】:

是否可以在非 openstack 环境中复制一种 cloud-init 设置?

当然。

Cloud-init 不需要网络元数据服务(如 EC2 和 OpenStack 提供的服务)即可运行。它将愉快地从本地 CD-ROM 设备读取配置信息;例如,参见this document 的“登录到您的 Atomic 机器”部分,其中描述了如何创建必要的文件系统。

这在 cloud-init 文档中记录了 here

【讨论】:

  • 感谢您的建议。我已尝试按照这些步骤操作。我已经编辑了我的问题以包含所有步骤,但我无法让它发挥作用。
  • 从文档看,虚拟机中的配置不清楚。如何在 VM 中配置 cloud-init?
  • 我不明白你的问题。从您 5/14 发布的答案来看,您似乎能够让事情正常进行。此时您可能想提出一个新问题...
  • 我在VM中配置了/etc/cloud/cloud.cfg文件,但是没有用。我运行“dpkg-reconfigure cloud-init”并指定了 NoCloud 数据源,它部分工作。一些关键字有效(设置密码和主机名)。其他人则没有(例如 runcmd、write_files)。那么VM中是否缺少任何配置?是否有无法在 NoCloud 设置中使用的命令?
猜你喜欢
  • 2017-11-11
  • 2012-06-14
  • 2013-03-30
  • 1970-01-01
  • 2014-05-28
  • 2013-01-22
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
相关资源
最近更新 更多