SDB:KIWI Cookbook Own Cloud
所有 KIWI 编辑
创建您自己的云
本示例将指导您完成基于 Eucalyptus 创建您自己的云基础设施的步骤。该示例引导您构建 3 个独立的镜像,一个主节点镜像、一个云节点镜像和一个客户镜像。创建镜像后,设置您自己的云大约需要 10 分钟,并且在新节点上的部署可以在 5 分钟内完成。
截至 Kiwi 4.25 版本,kiwi-doc 包在 /usr/share/doc/packages/kiwi/examples 目录下的 suse-11.1 和 suse-11.2 目录中包含 suse-euca-cloud 示例。
创建云镜像
准备时间
- 60 分钟
烹饪时间
- 40 分钟
配料
- 正在运行的 openSUSE 11.1 或 11.2 系统
- openSUSE 11.1 或 11.2 仓库
- 已安装最新版本的 KIWI 工具集(至少版本 4.25)
- 已安装 kiwi-doc 包
- 下载 Eucalyptus tarball 和 Euca2ools tarball
- 大约 1 GB 的可用磁盘空间
如果您正在基于 openSUSE 11.1 构建您的基础设施,您需要使用 Eucalyptus 版本 1.6.1。对于基于 openSUSE 11.2 或更高版本的 инфраструктура,您可以使用 Eucalyptus 1.6.1 或 Eucalyptus 1.6.2。
创建主节点
创建主节点配置
让我们首先将 kiw-doc 包提供的示例复制到工作目录。在本示例中,工作目录将为 /tmp/cloud-setup
如果您尚未 下载 Eucalyptus 和 Euca2ools tarball,请立即下载并将它们放在 /tmp/cloud-setup 中。
接下来,切换到我们的工作目录并解压缩 Eucalyptus 包。
通过以下步骤,我们将把从 tarball 提取创建的包目录添加到 Kiwi 配置中作为仓库。编辑 cloud-head-node 目录中的 config.xml 文件。将条目 PATH_TO_EUCALYPTUS_RPMS 替换为 Eucalyptus rpm 的路径,在本例中,路径为 /tmp/cloud-setup/eucalyptus-1.6.2-opensuse-x86_64。然后复制仓库声明并将 eucalyptus-1.6.2-rpm-deps-x86_64 添加到路径的末尾。再次复制仓库声明并指向 euca2ools-1.2-opensuse-x86_64 目录。完成操作后,您应该在 config.xml 中具有以下仓库配置。
<repository type="rpm-dir">
<source path="tmp/cloud-setup/eucalyptus-1.6.2-opensuse-x86_64"/>
</repository>
<repository type="rpm-dir">
<source path="tmp/cloud-setup/eucalyptus-1.6.2-opensuse-x86_64/eucalyptus-1.6.2-rpm-deps-x86_64"/>
</repository>
<repository type="rpm-dir">
<source path="tmp/cloud-setup/euca2ools-1.2-opensuse-x86_64"/>
</repository>
如果您想包含最新的 openSUSE 包,请将 Updates 仓库添加到 config.xml 文件中。添加 Updates 仓库的语法如下
<repository type="rpm-md">
<source path="http://download.opensuse.org/update/11.2/"/>
</repository>
这完成了对 config.xml 的更改。
如果您正在构建 64 位镜像,则需要对 config.sh 文件进行一些更改。64 位的 euca2ools 包将所需的 Python 文件放在 32 位树中,而不是 64 位树中。因此,需要一个链接。这已报告,预计将在 euca2ools 包的后续版本中修复。在 suseConfig 命令之后,在 config.sh 中添加以下条目。
#====================================== # Workaround for broken euca2ools package #-------------------------------------- ln -s /usr/lib/python2.6/site-packages/boto /usr/lib64/python.6/site-packages ln -s /usr/lib/python2.6/site-packages/euca2ools /usr/lib64/python.6/site-packages
这完成了对示例配置所需的更改。
配置设置为创建 ISO 格式的 OEM 镜像,即可以刻录到 CD 上的自安装 ISO 镜像。从 CD 启动后,主节点镜像将在您启动的机器上自行安装。在 VM 中运行主节点也是有意义的,您可以根据需要更改配置中的镜像类型。接下来,让我们构建主节点镜像。
构建主节点镜像
准备步骤之后,创建镜像。
您可以在虚拟环境中测试镜像。使用 qemu 在 64 位系统上,操作如下
创建虚拟磁盘
启动创建的 ISO
这完成了主节点创建,您可以将镜像安装到合适的硬件上。
创建云节点
创建云节点配置
使用您喜欢的编辑器编辑 cloud-cloud-node 目录中的 config.xml 文件。与之前的主节点配置一样,设置您的仓库(您可以从主节点配置文件中复制配置的仓库元素)。
值得注意的是,云节点配置设置为 Xen 超visor,即 dom0 镜像。这是通过 <xenconfig> 元素以及 <type> 元素的 bootprofile 和 bootkernel 属性来实现的。
<type image="oem" filesystem="ext4" boot="oemboot/suse-11.2" format="iso" bootprofile="xen" bootkernel="xenk">
.......
<xenconfig domain="dom0"/>
</type>
云节点的配置还生成 ISO 格式的 OEM 镜像。如果您更愿意创建一个可以从 USB 驱动器自安装的镜像,只需将 <type> 元素的 format 属性的值从 iso 更改为 usb。结果将是一个 .raw.install.raw 文件。使用 dd 命令将此镜像转储到 USB 驱动器(不要忘记使用 bs=32 参数)。
构建云节点镜像
现在您可以构建您的云节点镜像。
云基础设施设置
完成主节点和云节点镜像后,您可以将镜像安装到合适的硬件上。请按照 管理员指南 中的说明配置云基础设施。
在云节点上,您需要创建一个网络桥接器,以允许客户镜像连接到网络。您可以使用命令行或使用 YaST 进行漂亮的 GUI 驱动配置。
由于没有客户镜像的云基础设施毫无用处,接下来的步骤解释了如何创建客户镜像以及如何将客户镜像注册到 Eucalyptus。
创建云镜像
云节点的配置设置为与 Xen 协同工作。因此,我们的云虚拟机需要构建为 Xen 客户 (domU) 镜像。为了演示目的,此处使用了 kiwi-doc 包提供的 xen-guest 示例。
xen-guest 示例生成一个“未打包”的 Xen 镜像,这使得将其集成到 Eucalyptus 中变得简单明了,如下所述。
云客户镜像也可以使用 SUSE Studio 创建。使用 studio,结果是一个打包的 Xen 客户镜像,将其集成到云基础设施中需要更多的工作。这些步骤也如下所述。
集成客户镜像
准备客户镜像以进行集成
Kiwi 镜像
- 创建结果目录的 tar 归档文件,即我们的示例中的 /tmp/cloud-setup/cloud-guest-image
- 将 tarball 复制/移动到您的 Eucalyptus 主节点上的您选择的目录
- 解压缩 tarball。
SUSE Studio 镜像
- 从 SUSE Studio 下载 tarball
- 将 tarball 复制/移动到您的 Eucalyptus 主节点上的您选择的目录
- 解压缩 tarball
- tarball 包含
- 以 .xenconfig 结尾的配置文件
- 以 .raw 结尾的磁盘镜像文件
- tarball 包含
- 按照以下方式从磁盘镜像中提取内核和 initrd
losetup /dev/loop1 FILENAME.raw
mkdir SOMEWHERE/my_xen_guest
cp /mnt/boot/initrd.vmx SOMEWHERE/my_xen_guest cp /mnt/boot/vmlinuz-KERNEL_VERSION-xen SOMEWHERE/my_xen_guest
- 现在您可以撤消 .raw 文件的设置
打包和上传
每个 Eucalyptus 机器镜像由三个文件组成
- 文件系统
- 初始 Ramdisk (initrd)
- 内核
这三个镜像文件中的每一个都需要打包、上传并注册到 Eucalyptus 基础设施。打包、上传和注册通过以下三个命令完成
- euca-bundle-image
- euca-upload-bundle
- euca-register
有关此过程和命令的详细信息,请参阅 Eucalyptus 镜像管理 部分的 管理员指南。
在开始打包之前,从 Web 界面下载您的凭据并解压缩 zip 文件。source eucarc 文件。这将设置必要的环境变量(如果您正在运行 bash 或 sh)。对于其他 shell,您需要进行适当的调整。
打包和上传初始 Ramdisk
使用 Kiwi 创建的客户镜像
通过检查结果目录(即我们的示例中的 cloud-guest-image/suse-11.2-xen-guest.x86_64-1.1.2.xenconfig)中的 .xenconfig 文件来识别初始 Ramdisk (initrd) 的文件名。
使用 SUSE Studio 创建的客户镜像
使用您之前复制到您选择的目录的 initrd.vmx 文件。
- 通过打包 initrd 文件创建清单文件
euca-bundle-image --ramdisk true -i <initrd file>
- 上传捆绑包,指定一个 bucket 名称和在上一步骤中创建的清单。bucket 名称是您选择的字符串。
euca-upload-bundle -b <bucket name> -m /tmp/<filename of manifest>
- 使用 Eucalyptus 云管理框架注册此镜像
euca-register <bucket name>/<filename of manifest>
- 请注意 Eucalyptus ramdisk 标识符 (eri-xxxxxx) 的输出。
打包和上传 Linux 内核
使用 Kiwi 创建的客户镜像
通过检查结果目录中的 .xenconfig 文件来识别内核文件名,例如,在我们的示例中,cloud-guest-image/suse-11.2-xen-guest.x86_64-1.1.2.xenconfig。
使用 SUSE Studio 创建的客户镜像
使用您之前复制到您选择的目录中的内核文件。
- 通过捆绑内核来创建清单文件
euca-bundle-image --kernel true -i <kernel file>
- 上传捆绑包,指定与之前用于 initrd 的相同存储桶名称,并指定清单文件
euca-upload-bundle -b <bucket name> -m /tmp/<filename of manifest>
- 使用 Eucalyptus 云管理框架注册此镜像
euca-register <bucket name>/<filename of manifest>
- 记下产生的 Eucalyptus 内核标识符 (eki-xxxxxx)。
捆绑并上传根文件系统
使用 Kiwi 创建的客户镜像
通过检查结果目录中的 .xenconfig 文件来识别文件系统镜像的文件名,例如,在我们的示例中,cloud-guest-image/suse-11.2-xen-guest.x86_64-1.1.2.xenconfig。
使用 SUSE Studio 创建的客户镜像
使用您之前复制到您选择的目录中的 .raw 文件。
* Create a manifest file by bundling the filesystem, this requires the previously noted identifiers eri-xxxxxx and eki-xxxxxx euca-bundle-image --ramdisk <eri-xxxxxx> --kernel <eki-xxxxxx> -i <path to root filesystem>
- 上传捆绑包,指定与之前用于 initrd 和内核的相同存储桶名称,并指定清单文件
euca-upload-bundle -b <bucket name> -m /tmp/<filename of manifest>
- 使用 Eucalyptus 云管理框架注册此镜像
euca-register <bucket name>/<filename of manifest>
- 记下 Eucalyptus 机器镜像 (EMI) 标识符 (emi-xxxxxx)
这完成了捆绑、上传和注册过程,新创建的镜像现在可以使用 EMI 标识符启动。
使用云
- 启动一个客户镜像
euca-run-instances -k <ssh key id> emi-xxxxxx
- 显示正在运行的实例
- 显示可用的镜像、ramdisk 和内核
- 终止实例
- 从初始 run-instances 命令或 euca-describe-instances 中找到其实例 ID (i-xxxxxx)
euca-terminate-instances <i-xxxxxx>