ubuntu-cloud 镜像在 LXC 和 libvirt-lxc 之间的不同行为

ubuntu-cloud 镜像在 LXC 和 libvirt-lxc 之间的不同行为

我使用 ubuntu-cloud 模板作为 LXC 容器,它们都运行良好。最近我改用libvirt-lxc,并按照Ubuntu 文档,但图像的初始化与LXC不同:

  1. 尝试连接到 AWS 的元数据服务器并出现错误:

    2013-02-05 00:55:48,209 - util.py[WARNING]: 'http://169.254.169.254/2009-04-04/meta-data/instance-id' failed [50/120s]: url error [timed out]
    
  2. 默认密码不起作用。我需要通过修改 rootfs 来启用密码,/etc/shadow因为“ubuntu”帐户的默认密码已被禁止。

我认为 LXC 会预先处理这些cloud-init问题并向其提供一些用户数据和元数据。我尝试找到如何手动执行此操作,但cloud-init文档页面没有帮助,因为它的例子都是为了euca-tools

我还注意到lxc-start有一个选项-C“-C 选项将创建一个云容器,配置为用于元数据服务。”但我只是不知道如何映射此选项以及所有相关设置libvirt_lxc

我该如何正确初始化 image/rootfs?

答案1

好的,经过几天的搜索cloud-init,我发现我可以准备一个seed磁盘安装在客户系统中以便cloud-init启动。具体如下:

  1. libvirt使用 LXC rootfs创建域 XML
  2. 准备meta-datauser-data归档如下此引用
  3. 我们不用创建 ISO 文件,而是可以在域 XML 中添加挂载选项来将文件播种到cloud-init

    <!-- language: lang-xml -->
    <filesystem type='mount'>
      <source dir='./seed-dir-path'/>
    
      <!-- Make sure your rootfs has `/var/lib/cloud/seed` directory first-->
    
      <target dir='/var/lib/cloud/seed/nocloud'/>
    </filesystem>
    
  4. 定义域并启动它。现在cloud-init将获得meta-datauser-data

并且cloud-init缺乏文件12。我花了很多时间从问题跟踪器、博客甚至 github repos 中搜索信息。相比之下,libvirt至少有一个有用的 Wiki。

相关内容