跳转到: 导航, 搜索

Heat/ApplicationDeployment

先决条件

堆栈生命周期流程

  • 用户调用Heat API创建堆栈(“heat stack-create ... myStack”)
  • Heat引擎生成一个mime multipart数据块,cloud-init将消耗它
  • Heat引擎请求nova使用cloud-init数据创建实例
  • Nova选择一个计算节点来运行带有cloud-init数据的实例
  • 当实例启动时,它运行cloud-init脚本
  • 从元数据服务器下载数据
  • 将多个部分拆分到/var/lib/cloud/目录中
  • 运行不同的cloud-init部分(调整根文件系统大小,设置主机名,安装用户的SSH密钥等)
  • 运行用户的脚本(位于/var/lib/cloud/data/cfn-userdata),它可以是任何类型的脚本(Bash、Python等),但在此脚本的某个点应该调用cfn-init。
  • cfn-init加载/var/lib/cloud/data/cfn-init-data(AWS模板中的Metadata->AWS::CloudFormation::Init->Config属性的副本),可以安装软件包、设置用户和组、创建文件等。

请注意,heat-cfntools利用boto库,并且boto配置存储在实例上的/var/lib/heat-cfntools/cfn-boto-cfg中。

故障排除

如果您可以登录到实例,请查看以下文件

  • /var/log/cloud-init.log => cloud-init日志
  • /var/log/part-handler.log => Heat特定脚本的日志,用于管理content-type=text/x-cfninitdata的数据
  • /var/log/heat-provision.log => 用户脚本的日志,包括cfn-init日志

您还可以查询元数据服务器以获取Heat生成的用户数据

curl -s http://169.254.169.254/2009-04-04/user-data

技巧与窍门

在实例内部获取私有IP地址

如果UserData脚本需要知道实例的私有IP地址,则无法通过Fn::GetAtt(instance, "PrivateIp")解析,因为它在Heat引擎解析UserData文件时不可用。相反,您的脚本可以从(Nova)元数据服务器获取该信息

curl -s http://169.254.169.254/latest/meta-data/local-ipv4

在Ubuntu云镜像上安装cfn工具

apt-get -y install python-argparse cloud-init python-psutil python-pip
apt-get -y remove python-boto
pip install 'boto==2.5.2' heat-cfntools
cfn-create-aws-symlinks -s /usr/local/bin/

资源