Cloud 零配置云部署

Cloud 零配置云部署,cloud,Cloud,在任意云服务上“零配置”(即最小配置)部署代码的选项有哪些 我意识到有数千个云平台,每个平台都支持一组特定的语言、一组特定的软件包,并支持一个特定的工作流,通常带有一组专有的命令行工具,以减少部署的痛苦 但是,如果我不想了解任何关于特定云平台的信息,并且我想编写在未来几年内易于在云中部署的代码,该怎么办 显然,最具体的答案很简单:用你想要的任何东西构建一个虚拟机映像,然后在云上运行(这种方式几乎是零配置,我们可以预期我今天构建的虚拟机映像在10年内仍能在大多数虚拟机主机上工作) 所以我的问题是:

在任意云服务上“零配置”(即最小配置)部署代码的选项有哪些

我意识到有数千个云平台,每个平台都支持一组特定的语言、一组特定的软件包,并支持一个特定的工作流,通常带有一组专有的命令行工具,以减少部署的痛苦

但是,如果我不想了解任何关于特定云平台的信息,并且我想编写在未来几年内易于在云中部署的代码,该怎么办

显然,最具体的答案很简单:用你想要的任何东西构建一个虚拟机映像,然后在云上运行(这种方式几乎是零配置,我们可以预期我今天构建的虚拟机映像在10年内仍能在大多数虚拟机主机上工作)


所以我的问题是:虚拟机映像理想的下一层是什么?对于以机器可读的形式封装任意软件堆栈的完整描述,我可以将我的软件堆栈扔到任何类似云的通用托管服务上,而不考虑该托管服务的任何特定配置,最开放和广泛接受的标准是什么?

如果“云”是指IaaS(基础设施即服务提供商),如EC2等——与PaaS(谷歌应用引擎、Heroku等)相反,那么现在的趋势似乎是,而且。这并不完全是“零配置”;它更像是配置一次,并在DSL中描述整个堆栈的配置,DSL可用于从任何云上运行的一组新启动的VM构建或重建整个堆栈

因此,您有一个配置管理系统,以及一组配置管理系统能够理解的机器可读的“配方”。配方通常用某种自定义DSL表示,尽管确实存在使用XML语言的系统

此类配置管理系统的一些众所周知的示例包括:

  • 还有很多其他的,;但我没有使用它们的经验(CFEngine、bcfg2(使用XML))

    这些工具是幂等的。这意味着,您可以根据需要多次重新运行配置,并且只需执行为满足配方指定的描述所需的操作。如果您已指定将某些文件放置在具有特定内容的特定目录中,则只有在需要时才会创建(或修改)这些文件。只有在需要安装软件包时,或者如果软件包的版本与配方中指定的版本不同,才会安装软件包

    例如,在Chef中,要指定用户
    tomcat
    必须存在,并且必须安装特定版本的Java,postfix应该运行,并且特定XML文件必须在给定位置可用,您将有一个如下的配方:

    用户“tomcat”
    包“java”do
    版本“1.6.0_u27”
    结束
    目录“/etc/yourapp”do
    主人“雄猫”
    结束
    包“后缀”
    #确保postfix已安装并正在运行。
    服务“后缀”吗
    操作[:启用,:启动]
    结束
    tempate“/etc/yourapp/config.xml”
    source“config.xml.erb”#这将是一个引用变量的模板文件
    变数(
    :db_server=>“10.1.2.4”#只是一个示例;将有方法自动执行此操作
    )
    模式“0755”
    结束
    
    Chef for one提供了一系列预先编写的食谱或“食谱”,您只需下载、包含并作为基础设施的一部分使用即可。在Chef中,您根据希望服务器成为什么来编写烹饪书,然后定义角色,指定将哪些烹饪书应用于构成堆栈的哪类服务器。您只需将角色分配给实例,引导它们,然后观察整个堆栈的运行

    我要说的是,这正在成为维护基础设施的完整堆栈可执行描述的标准方法(不必只是云——我在VMWare和/或VirtualBox上测试,而是使用相同的方法部署到多个公共云供应商。)

    缺点是你需要学习DSL。并且可能对您的工作流程进行重大更改。这些系统也有各自的优缺点。但这样做肯定比维护定制的VM映像低一层,而且在许多方面更加灵活。例如,如果每个云提供商都为您提供一个NTP服务器地址以保持实例同步,则必须根据提供商的不同更改图像。有了Chef/Puppet,这可以被自动化,并被巧妙地抽象出来


    虽然VM映像是您所需“配置”的冻结副本,但它们不能捕获每个组件(堆栈中的每个实例)如何相互交互。例如,应用服务器需要知道数据库服务器、它的地址、各种连接参数——数据库服务器需要知道可能要连接到它的所有应用服务器(在云环境中,应用服务器的数量甚至可能随着时间的推移而增加或减少)。这是一个动态的东西,很容易通过像Chef这样的系统实现自动化

    零配置更可能是“平台即服务”而不是“基础设施即服务”中的一个特征。也许我们应该说“最小配置”而不是“零”。PAAS为您提供了一个半固定的体系结构,让您可以在其中生活,并公开了一些配置工具。有了IAAS,你就可以完成所有的工作,也许需要一些工具的帮助

    我可以谈谈我使用Google App Engine的经验,您可以在本地开发代码,用描述符文件打包,然后将其部署到App Engine。你不应该关心底层的机器,也不应该关心如何随着流量的增加或减少而增加或减少,等等。平台为你处理这些事情,不管它做得好还是坏。我的想法是