天津 企业网站建设/百度问答平台
对于Cloud Foundry,部署应用程序只是意味着用户可以开始使用。当部署应用程序时,将实际的应用程序包(例如Spring Java的WAR文件)推送到目标云上,指定所需要的应用程序配置,例如部署URL和所需内存,并绑定所需要的服务,例如MySQL。Cloud Foundry然后推出应用程序,启动并在指定的URL为用户提供使用。
部署不需要服务的应用程序
在使用VMC时,是利用vmc push命令部署应用程序。默认情况下,vmc采用交互方式提示所需要的部署信息;另外,也可以指定不同于默认值的参数或以非交互模式运行。
最简单的部署例子是运行不带参数的vmc push,部署不需要绑定服务的应用程序。vmc push命令将提示全部所需要的信息。以下例子显示了部署一个非常简单的Spring应用程序的输出,应用程序包使用hello.war这个WAR文件,更多信息请参见例子之后的文本:

在浏览器中打开指定的部署URL,开始使用应用程序,在上述例子中,URL是:
http://hello-js.cloudfoundry.com
上述vmc push例子需要注意:
yes/no提示的默认值在提示的最后以大写字母显示,例如,如果默认答案是No,则提示是[yN]。
可以从运行VMC的当前目录进行部署,或是指定不同的目录,该目录应该是实际应用程序包所在的位置,例如hello.war文件的位置。需要注意的是,vmc push将会部署指定目录中的所有文件,因此要确保目录中仅存放那些需要被部署的文件。
应用程序的名称是用于管理其生命周期进行识别,例如停止、增加内存等等。命名范围可以在你的CloudFoundry账户内,即在你的账户内应用程序名称要求唯一,但是在整个CloudFoundry中可以不唯一。
默认情况下,部署URL是应用程序名称与目标结合(例如cloudfoundry.com)。不过,即使应用程序名称仅要求在你的Cloud Foundry 账户内唯一,也必须要确保指定的部署URL在整个CloudFoundry中是唯一的。这也就是为什么在上述例子中,部署URL中包含一个识别符,以便在整个cloudfoundry.com网站中保持唯一。
部署需要一个服务的应用程序
下面例子显示了如何部署需要一个服务的应用程序(本例中是MySQL服务),应用程序包文件是hotels.war。
在例子中,我们首先使用vmc create-service命令创建一个MySQL服务的实例,然后利用vmc push命令进行部署,将服务实例绑定到应用程序。
重要的一点是,不必修改现有的应用程序“发现”Cloud Foundry创建的用于绑定应用程序的MySQL实例,这是因为Cloud Foundry使用了自动配置机制,典型的Spring应用程序不必进行任何修改即可消费服务。
运行vmc services找到MySQL服务的名称,注意第一列:

=========== Provisioned Services ============
创建mysql服务的新实例,命名为mysql-js:

部署hotels.war应用程序,绑定到mysql-js服务实例:

在vmc push命令提示使用供应服务时回答N,也可以创建新的服务实例;此时,vmc push命令会提示新服务实例的信息。
部署需要多个服务的应用程序
前面章节描述了如何使用vmc push命令部署应用程序并同时绑定一个服务(MySQL)。不过,这只是绑定了一个服务,如果应用程序需要绑定多个服务,该如何处理呢?本节将描述如何实现这个任务。
本例子对前例进行了扩展,除了在hotels应用服务上绑定mysql-js服务,还将创建并绑定MongoDB和RabbitMQ服务。
创建mysql、mongodb和rabbitmq服务的新实例:

部署hotels.war应用程序,绑定mysql-js服务实例,不过这次,确保要指定--no-start选项,让Cloud Foundry不要展示或启动应用程序:

使用vmc bind-service命令为hotels应用程序绑定另两项服务:

启动应用程序:

非交互模式进行部署
使用vmc push的-n选项以非交互模式进行应用程序部署,其他需求仅仅是指定应用程序的名称。
如果没有指定其他选项,Cloud Foundry将在部署应用程序时使用全部的默认值,例如,如果执行以下命令:

Cloud Foundry会按以下方式执行:
部署当前目录的所有文件,将其作为hotels应用程序的一部分。
使用hotels.cloudfoundry.com作为部署URL(假设目标是公共托管的Cloud Foundry)。
创建所部署应用程序的单一实例。
不绑定任何服务。
自动检测程序框架(例如Spring或Ruby)。
为应用程序保留512MB内存。
在展示之后立即启动应用程序。
可以使用其他选项修改默认的部署参数值,并仍然以非交互模式进行部署。例如,使用—url选项修改部署URL,使用—mem选项修改保留内存,并指定不启动应用程序,命令如下:

vmc push命令指定参数的完整列表请参见VMC快速参考指南。
管理应用程序生命周期(停止、启动、重新启动、删除、重命名)
在部署之后管理应用程序的生命周期非常简单,只要使用合适的VMC命令停止、启动和重新启动应用程序即可。例如,停止然后启动应用程序:

或者使用一个命令实现同样的任务:

需要注意的重要一点是,Cloud Foundry重新启动应用程序时,是创建一个全新的虚拟架构。虽然对应用程序来说这是透明的,但是会影响一种情况,即应用程序在之前运行时创建了本地磁盘文件,重新启动后,这些文件将全部丢失,因为Cloud Foundry创建了新的虚拟磁盘。如果即使在重新启动之后,应用程序还需要这些文件,应该使用数据服务,例如MongoDB,从而确保文件可用。
要重命名应用程序,使用vmc rename命令,指定应用程序的当前名称和新名称,例如:

vmc rename命令只是修改应用程序的内部命名,不会修改用于运行应用程序的部署URL,要修改部署URL,可以使用vmc map命令,请参见修改部署URL。
删除应用程序,并释放全部与之相关的资源,使用vmc delete命令:

更新部署包
使用vmc update 命令更新构成应用程序的“包”,例如封装的Java Spring应用程序的WAR文件。
当Cloud Foundry更新应用程序的时候,首先是停止应用程序,进行变更,然后再启动。这意味着应用程序会有短时间不可用,现有的用户会话将被删除。在应用程序的迭代开发周期中,这可能不是问题,但是在生产场景中,这会是不可接受的。如何避免短时间停止服务,请参见更新部署包时避免停止服务。
按照以下步骤更新应用程序:
使用vmc apps命令获得应用程序的准确名称;输出结果的第一列列出了名称。例如:

在命令提示(Windows)或终端窗口(Linux),进入包含应用程序更新包的目录,确保该目录只包含需要部署的文件,因为VMC会推送该目录的所有文件。

使用vmc update命令更新应用程序:

检查命令输出,确保应用程序启动无错误,然后开始使用更新的应用程序。
更新部署包时避免停止服务
不停止服务更新应用程序的方式原理是,在Cloud Foundry能够将单一应用程序映射到多个部署URL,同样,可以映射多个应用程序到相同的部署URL,因此,不必直接更新应用程序,我们可以创建一个新的应用程序,将其关联到现有的URL,然后取消旧应用程序和URL的关联,接着删除旧应用程序。
在下面的例子中,现有的应用程序名称是hotels,部署URL是hotels.cloudfoundry.com,我们希望新的用户会话开始无缝使用新的应用程序,现有用户也不会丢失其连接。
步骤如下:
在命令提示或终端窗口,进入包含更新应用程序包的目录,例如:

使用vmc push命令创建新的应用程序,与现有应用程序命名不同,例如hotels-new,指定不同的部署URL,如hotels-new.cloudfoundry.com:

确保绑定所需要的服务,例如MySQL或RabbitMQ。使用与现有应用程序相同的服务实例。
在浏览器中,打开新的部署URL,测试新部署的应用程序是否正确运行,是否是更新的版本。
在本例中,新应用程序的部署URL是http://hotels-new.cloudfoundry.com。
使用vmc map命令将新应用程序与现有的部署URL进行关联,例如:

此时,因为同一个部署URL映射到了两个不同的应用程序,新的用户会话可能会连接到旧的或新的应用程序,这时可以持续刷新URL ‘http://hotels.cloudfoundry.com’进行测试,会发现有时候连接到旧应用程序,有时候连接到新应用程序,一定要确保有时候是连接到新版本。执行vmc apps也可以查看应用程序关联的多个URL:
使用vmcunmap命令取消旧应用程序与部署URL的关联:

需要注意的是,取消映射不会丢弃旧应用程序的现有用户会话,只是停止了到旧应用程序的新流量,因此新用户会话将使用新的应用程序。
测试初始的部署URL(本例中是http://hotels.cloudfoundry.com),现在总是将用户会话引导到新应用程序。
取消新应用程序与新部署URL的关联:
当确认没有任何用户会话连接到旧应用程序时,删除旧应用程序:
prompt$ vmc delete hotels
确保不要删除新应用程序当前所使用的任何共享服务实例,现在应用程序将有新的内部名称,但是仍然映射到用户所熟悉的现有的部署URL。使用vmc apps命令可以查看新的映射:


监控和配置部署(调整和内存管理)
有很多VMC命令可以用于配置部署的应用程序,例如通过增加或减少实例进行调整,增加更多内存,以及变更部署URL。
使用vmc apps命令可以获得全部部署应用程序的列表,将使用应用程序名称获得更多信息并进行配置:
调整应用程序
使用vmc stats 命令显示应用程序的当前配置和资源使用情况,例如:

输出表格显示了应用程序每个实例的数据,在上表中,hotels有两个实例,每行显示了CPU的利用率,内存使用和最大内存限额,磁盘使用和最大空间限额,以及实例的运行时间。
要修改最大内存限额,使用vmcmem命令,参数是应用程序名称和最大内存MB数,这会修改应用程序全部实例的最大内存。例如,降低hotels应用程序最大内存到128MB:

需要注意的是,Cloud Foundry必须重新启动应用程序以让修改生效。
调整应用程序,允许更多用户成功和快速连接的另一个方法是增加更多的实例。反之,如果要减少Cloud Foundry账户的关联资源,减少应用程序当前运行的多个实例,可以删除实例。例如,要指定应用程序同时运行4个实例:

使用vmc stats命令确保应用程序运行了4个实例:

需要注意的是,部署应用程序增加实例会使用更多的内存和磁盘空间。
变更部署URL
使用vmc map和vmcunmap命令变更应用程序关联的部署URL。
例如,为现有应用程序关联新的部署URL:
prompt$ vmc map hotels hotels-new.cloudfoundry.com
取消现有URL的映射,使用vmcunmap命令:
prompt$ vmcunmap hotels hotels-new.cloudfoundry.com
在真实运行场景中使用这些命令的其他例子,请参见更新部署包时避免停止服务。
获得应用程序日志和崩溃信息
查看应用程序stderr.log和stdout.log文件中最近的活动,使用vmc logs 命令:
prompt$ vmc logs hotels
如果怀疑应用程序最近有崩溃,运行vmc crashes 命令可以提供更多信息:
prompt$ vmc crashes hotels
使用vmccrashlogs命令获得崩溃的更多详情:
prompt$ vmccrashlogs hotels