如果不使用第三方云配置服务,那么关于 EC2 配置管理的常见模式/策略或白皮书有哪些?具体来说,关于如何在启动时配置和配置新实例、代码部署策略等...
答案1
我从数十篇博客文章中总结了引导 EC2 的方法。这项工作仍在进行中,但我们使用云初始化用于将实例连接到我们的木偶master,Puppet 用于配置所有包以适应此实例将扮演的角色,以及韦比斯特拉诺(Capistrano 的 GUI)将我们的代码部署到服务器。
如果您构建自己的机器映像,您几乎可以构建任何您想要的系统,但我们希望使用公开可用的官方 Ubuntu 映像,这些映像没有安装配置管理软件。
因此,我们使用 cloud-init 来启动实例。Cloud-init 是一个存在于Ubuntu和 Amazon Linux AMI。它允许在创建实例时通过 EC2 的“用户数据”元数据选项将各种数据传递给实例。通过用户数据传递的数据由 cloud-init 在实例启动时执行,并且可以采用多种形式,例如 shell 脚本、cloud-config yaml 等。
这篇文章展示了一个使用 cloud-init 的示例,与我们的方法类似:http://www.atlanticdynamic.com/你应使用云初始化/
以下是我们的版本:
#cloud-config
apt_update: true
apt_upgrade: true
packages:
- puppet
puppet:
conf:
agent:
server: "puppet.example.com"
certname: "%i.web.cluster1.eu-west-1.ec2"
实例启动后,它会立即安装 Puppet 并将其连接到我们的 Puppet 主服务器。只要您允许它连接到主服务器(签署其证书),实例就会自动开始自我配置。主服务器将使用 nodes.pp 文件中的正则表达式来匹配实例的证书名称,从而为其分配角色。然后,主服务器能够将目录发送到 Puppet 代理,后者会使用此目录来自我配置。
启动几分钟后,实例即可使用。如果我们需要将任何代码部署到节点,我们不使用 Puppet,而是使用 Webistrano。目前,我们手动将节点添加到 Webistrano 的配置中,但我们打算使用 MCollective 根据节点元数据自动执行此操作。