首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >零配置云部署

零配置云部署
EN

Stack Overflow用户
提问于 2012-11-22 03:51:34
回答 5查看 761关注 0票数 8

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

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

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

显然,最具体的答案很简单:构建一个虚拟机镜像,然后在云上运行它(这种方式几乎是零配置的,我们可以预期我今天构建的VM镜像在10年内仍然可以在大多数VM主机上运行)。

因此,我的问题是: VM映像的下一层是什么?对于以机器可读的形式封装任意软件堆栈的完整描述,最开放和被广泛接受的标准是什么,以便我可以将我的软件堆栈放在任何通用的类似云的托管服务中,而无需考虑该托管服务的任何特定配置?

EN

回答 5

Stack Overflow用户

发布于 2012-12-01 03:34:38

如果你说的“云”指的是基础设施即服务提供商(- as -a-IaaS),如EC2等--而不是PaaS (谷歌应用引擎、Heroku等),那么这些天的趋势似乎是Infrastructure-as-CodeDevOps。这不完全是“零配置”;它更像是配置一次,在DSL中描述整个堆栈的配置,该DSL可用于构建或重建整个堆栈,只需在任何云上运行一组新启动的虚拟机即可。

因此,您有一个配置管理系统,以及一堆配置管理系统能够理解的机器可读的“食谱”。食谱通常用某种定制的DSL表示,尽管确实存在这样的系统,其中的语言实际上是XML。

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

  1. Chef
  2. Puppet

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

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

例如,在Chef中,要指定用户tomcat必须存在,必须安装特定版本的Java,必须运行后缀,并且特定的tomcat文件必须在给定位置可用,您可以使用如下配方:

代码语言:javascript
复制
user "tomcat"

package "java" do
  version "1.6.0_u27"
end

directory "/etc/yourapp" do
  owner "tomcat"
end

package "postfix"
# Ensure that postfix is installed and running.
service "postfix" do
  action [:enable, :start]
end

tempate "/etc/yourapp/config.xml"
  source "config.xml.erb"   # This will be a template file that references variables
  variables(
    :db_server => '10.1.2.4' #just an example; there will be ways to automate this
  )
  mode "0755"
end

Chef就是其中之一,它提供了一堆预先编写的食谱或“食谱”,您只需下载、包含并作为基础设施的一部分使用即可。在Chef中,您根据您希望的服务器编写您的食谱-然后定义角色,这些角色指定将哪些食谱应用于组成您的堆栈的哪类服务器。您只需将角色分配给您的实例,引导它们,然后观察整个堆栈自动启动。

我要说的是,这正在成为维护基础设施的全栈可执行描述的标准方法(不一定只是VMWare和/或VirtualBox上的cloud -I测试,而是部署到具有相同配方的多个公共云供应商)。

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

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

票数 2
EN

Stack Overflow用户

发布于 2013-09-18 10:43:49

我认为你的问题的答案是Jelastic。为了让你的应用程序停留在云中,让其他人查看它,你至少要符合http协议,至少我认为PHP作为一种语言在那里赢得了胜利。如果这是真的,那么目前市场上只有一个平台可用,那就是Jelastic。试一试,让我知道。零配置和供应商免费锁定精美的web控制台,这简直是最好的。我可能听起来像一个布道者,但我是他们堆栈的满意客户(我使用Java作为编程语言,并有一个启动),并且真的很喜欢他们的平台。

苏利亚

票数 2
EN

Stack Overflow用户

发布于 2012-12-03 03:30:54

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

我可以谈谈我使用Google App Engine的经验,在Google App Engine中,您可以在本地开发代码,将其与描述符文件打包,然后将其部署到App Engine。你不应该关心底层的机器,也不应该关心如何随着流量的增加或缩小等等。平台会为你处理这些事情,无论它做得好还是不好。这个想法是你只关注你的应用程序。尽管在现实中,为了做出好的设计决策,您仍然必须了解一些底层架构。

AppEngine支持Java、Python和Go。

Heroku和Engine Yard也是PAAS,一开始都支持Ruby。Heroku现在也支持Java、Python和Node.js。

还有Rackspace的Open Stack计划,它与定义您可以在其中生活的体系结构类似,但要让它“可移植”到各种IAAS提供商。这是一个很好的概念,但我不相信很多人会采用它。http://www.openstack.org/software/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13501003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档