云计算的一大优势是能够以可重复的方式设置虚拟机,可以在启动时使用适当的工具将信息注入到虚拟机中,以便根据您的实际需求对其进行配置。 在本教程中,我们将研究如何将OpenStack的本机Heat代理插入映像中,以允许使用Heat进行应用程序设置。
OpenStack的大多数映像都启用了cloud-init。 这意味着此映像创建的每个实例都可以在早期启动时运行cloud-init脚本以进行一些配置。 目录/var/lib/cloud
包含cloud-init特定的子目录 。 在这些子目录中,您会找到当前实例ID,先前实例ID(可能与当前实例ID不同),当前和先前数据源,开始和结束时间,错误(如果存在),自定义脚本(在相应的处理程序(在处理程序/子目录中)下载或创建的脚本/子目录),从元数据服务下载的用户数据等。
但是,如果我们要在实例生命周期的不同部分而不只是在早期启动时进行一些配置/操作,该怎么办? 例如,如果我们使用的是OpenStack自动扩展服务,我们的服务器将自动添加和删除,而无需人工干预。 “当确定其中任何一台服务器将要终止时,它们需要一些时间来清理自己并需要一些配置(例如,结束活动会话,关闭与其他服务的活动连接等)。
这是基于Heat的软件部署的价值,它有助于OpenStack Heat单元与实例之间进行通信,以在不同的生命周期上配置实例。 自OpenStack的Icehouse版本发布以来,此功能已可用。 要使用它,我们需要在映像上安装一些代理,以及在Heat模板中安装一些定义(主要基于OS::Heat::SoftwareDeployment
和OS::Heat::SoftwareConfig
资源类型)。
可以在引导时安装代理(通过在引导时安装代理的脚本,或者通过Heat模板中的定义 )。 在这里,我将讨论如何在映像中安装代理。 在此示例中,我们将使用的代理有:heat-config,os-collect-config,os-refresh-config,os-apply-config,heat-config-cfn-init,heat-config-puppet,heat-config-盐和热配置脚本。
对于此示例,我假设您拥有自己的支持OpenStack的映像,并且想要将Heat代理添加到映像中。 我将使用Diskimage-builder构建映像。 Diskimage-builder(DIB)是一个开源项目,由HP,Red Hat和Cisco管理,并根据Apache许可证(2.0版)获得许可。 我的操作系统是Fedora 21,在本示例中,我将构建一个带有Heat支持的CentOS 7自定义映像。
如果您的图像已在云中,则在提供凭据后可以使用Glance客户端下载它。 要在Fedora上安装Glance客户端,请输入:
# yum install python-devel libffi-devel
# pip install python-glanceclient
要下载图像,执行:
# glance image-download --file outputImageFilename imageID
这样,您将在本地磁盘上获得文件outputImageFilename
。
Diskimage-builder需要足够的RAM进行缓存。 如果映像很大,并且没有足够的内存,则可以使用/ tmp在磁盘上进行缓存。 请参阅本文后面的说明。
现在我们需要克隆存储库:Diskimage-builder,图像元素和heat-templates:
# git clone https://git.openstack.org/openstack/diskimage-builder.git
# git clone https://git.OpenStack.org/OpenStack/tripleo-image-elements.git
# git clone https://git.openstack.org/openstack/heat-templates.git
需要导出一些环境变量:
DIB_LOCAL_IMAGE
:此变量包含本地图像的路径(在我的情况下为my_image.qcow2)。 如果未设置此变量,则Diskimage-builder将进入Internet并带来通用映像。 如果没有任何图像,则不要导出此变量以保留默认值。 DIB_CLOUD_IMAGES
(HTTP地址):如果图像在Internet上是公开的,则可以导出此变量。 ARCH
:此变量包含体系结构。 在我的情况下为“ amd64”: # export ARCH="amd64"
。 这将被转换为x86_64。 以CentOS 7为例,使用此变量的源文件是“ ... / Diskimage-builder / elements / centos7 / root.d / 10-centos7-cloud-image”。 我建议您检查相应的文件(转到OS选择目录中的root.d目录,然后检查ARCH
支持的内容)。 还要检查此文件中的DIB_CLOUD_IMAGES
变量和其他变量。
然后我们需要安装一些软件包:
# yum install qemu or # yum install qemu-img
# yum install python-pip git
# pip install git+git://git.openstack.org/openstack/dib-utils.git
接下来,我将使用Diskimage-builder将Heat代理添加到我的映像中,以便从我的映像创建的实例可以在不同的生命周期中与Heat交互。 在bash脚本中编写以下内容,然后执行或逐行执行。 注意:您需要位于克隆存储库的目录中,或使用绝对路径。
export ELEMENTS_PATH=tripleo-image-elements/elements:heat-templates/hot/software-config/elements
#自定义此行。 可能的值:fedora centos7,debian,opensuse,rhel,rhel7或ubuntu
export BASE_ELEMENTS =“ centos7 selinux-permissive”
export AGENT_ELEMENTS =“ os-collect-config os-refresh-config os-apply-config”
导出DEPLOYMENT_BASE_ELEMENTS =“ heat-config heat-config-script”
#对于任何其他选择的配置工具。 例如heat-config-cfn-init,heat-config-puppet或heat-config-salt。 不在我的情况下。
导出DEPLOYMENT_TOOL =“”
导出IMAGE_NAME =软件部署图像金色
diskimage-builder / bin / disk-image-create vm $ BASE_ELEMENTS $ AGENT_ELEMENTS $ DEPLOYMENT_BASE_ELEMENTS $ DEPLOYMENT_TOOL -o $ IMAGE_NAME.qcow2
(请注意,变量IMAGE_NAME
确定了图像名称。)
构建映像后,您将获得文件software-deployment-image-gold.qcow2。 如果图像很大,则可以在将其上传到OpenStack(Glance单元)之前对其进行压缩:
# tar -zcvf gw-software-deployment-gold.qcow2.tar.gz gw-software-deployment-gold.qcow2
您还可以将选项“ -t tar”传递给命令diskimage-builder/bin/disk-image-create
以使映像由Diskimage-builder压缩。 对于上述ARCH,也请使用此选项“ -a i386 | amd64 | armhf”。 有关更多详细信息,请参见完整的文档。
要上传压缩图像,执行:
# glance image-create --name "gw-software-deployment-gold" --is-public false --disk-format qcow2 --file gw-software-deployment-gold.qcow2.tar.gz
我曾经在使用Firefox上传大文件(例如图片)时遇到麻烦,但是Chrome通常似乎可以正常工作。 我建议使用Chrome浏览器从OpenStack控制面板(Horizon)上传图像。
您可能还需要调整操作系统和应用程序本身的性能参数(即,可能需要更新系统文件),以便已经调整了从映像创建的服务器。 您可以在拍摄快照之前在实时服务器上进行调整,也可以在上传之前使用guestfish更新本地映像的系统文件。
现在,您可以从新上传的映像创建实例,在该实例中,您可以开始在Heat模板中的不同生命周期上进行软件部署 。
如果您的计算机缺少足够的RAM来完成映像构建过程,则需要增加/ tmp的大小。 例如(15GB):
# dd if=/dev/zero of=/usr/tmp-dir bs=1024M count=15
# mke2fs -j /usr/tmp-dir; chmod 777 /usr/tmp-dir
# mount /usr/tmp-dir /tmp>
yum-config-manager --disable repositoryName
暂时禁用导致问题的yum-config-manager --disable repositoryName
在创建映像之前,将从该映像下载)云上工作)。 yum -y update
可以解决更新时出现的问题,例如不同版本的软件包之间存在冲突。 有关更多信息,您可能希望查看最近在温哥华举行的OpenStack峰会上的“为Diskimage-builder创建自定义元素” 。
本文的早期版本先前已发布在VOIP杂志上 。 经许可重新发布。
翻译自: https://opensource.com/business/15/8/heat-on-openstack-clouds