Cloud Foundry是一个流行的开源PaaS(Platform as a Service 平台即服务)云平台。Cloud Foundry可以用在你自己部署的基础设施上,也可以在诸如Amazon web services(AWS 亚马逊网络服务)、Azure(微软的公有云平台)、VMware(虚拟机软件)或vSphere(VMware公司的虚拟化平台)中任何一个laaS(Infrastructure as a Service 基础设施即服务)上使用。它可以使用BOSH(开源工具链)部署系统进行部署。Cloud Foundry提供了一个可以轻松运行、扩展和维护应用程序的环境。Cloud Foundry支持大部分的开发语言和系统环境,比如Java、node js、Ruby、Python等等。Pivotal公司有一个云计算的商业实例,叫做AWS云之上的Pivotal Web Service (PWS Pivotal 网络服务)。
该公司 还提供了PCF(Cloud Foundry 商业版)的轻量级发行版,称之为PCF Dev(Cloud Foundry 开发版),该版本是为应用开发人员准备的,在单独一台机器上即可运行。
Users(用户)是可以管理 org用户组、space应用空间和应用程序app的Cloud Foundry用户
Roles(角色)表示赋予用户不同的权限,比如Org管理员或者Space管理员。
Orgs(用户组)表示用户可以在不同的用户组中使用不同的应用,每一个用户组都有一个或更多的空间。
Space(应用空间)是应用程序可以部署和共享配置的地方。单个空间可以部署多个应用程序。一个或多个空间构成了Org。
Apps (应用程序)是指在Cloud Foundry中运行的每一个独立应用程序。
应用程序所使用的每一个外部服务如数据库、消息队列等等,都是Cloud Foundry中的服务。这些服务需要在Cloud Foundry层中进行定义,然后就可以被任何一个org或space通过Service Broker API进行调用。所有的服务都需要在Marketplace(服务市场)中进行注册。Marketplace是可以浏览所有在Cloud Foundry上可见并且可用的服务的地方。
我们可以创建任何符合我们需求的可用服务的实例。举例来说,Pivotal公司在
Pivotal Web Service上提供了一个MySQL服务,称之为p-MySQL,有着诸如512M和1024M等不同的规格设计。如果我们的应用程序需要一个MySQL数据库。我们可以根据需求创建一个有着恰当的设计方案的p-mysql实例,并且将这个服务实例绑定到应用程序。
绑定是指应用空间中的可用服务和应用程序之间的映射。
每一个应用程序都由一个被称之为路由的的单个或多个地址来标识。
Build packs 能够解决、下载并且配置基于用户输入的应用程序依赖。其中的一个例子就是java-buildpack,它将根据应用程序的性质,提供Java、Tomcat、Grails、Groovy、Play等不同的依赖项。Cloud Foundry在大多数平台上都提供有build packs,有社区支持的Build Packs,Cloud Foundry也允许创建定制的Build Packs
当用户创建一个应用程序(cf push)时,Cloud Foundry会在其结束后生成一个droplets 。一个droplets就相当于实际应用程序二进制文件或者依赖项的镜像或者blob(binary large object 二进制大对象)存储。它将被存储在Cloud Foundry中,以便以后使用。当用户试图运行并解压应用程序时,这个映像就会被用来创建一个VM(虚拟机)并运行它。
环境变量是Cloud Foundry和应用程序之间的共享变量。应用程序可以使用这些信息来发现各种服务。
VCAP_SERVICES - Cloud Foundry将服务相关信息增加到了该变量之中。 VCAP_APPLICATIONS - Cloud Foundry将应用程序相关属性增加到了该变量之中。
LogAggregator是用来整合所有应用程序实例日志的Cloud Foundry组件,可以将日志输出到终端、文件或者第三方服务中。
CF CLI 是Cloud Foundry的命令行工具客户端,它是通过传递命令来进行部署、扩展、管理和监控应用程序,创建和停止服务等操作。CF CLI 可以被安装在Linux、Windows和Mac中任意一个操作系统的机器上面。这是CF CLI 的命令行列表。Spring工具套件(STS)是一个基于eclipse的IDE,用于Spring程序开发,还有一种可以协助部署和管理应用程序的Cloud Foundry插件,它可以在IDE中创建和管理用户组org和应用空间space。
Pivotal公司为开发人员提供了一个轻量级的Cloud Foundry版本,称之为PCF Dev,它可以安装在开发者自己的单个机器上。如果你不想在自己的机器上安装PCF Dev,并且仍然希望试用一下Cloud Foundry,那么你也可以跳过安装步骤,只安装CF CLI,然后使用Pivotal Web Service可用的评估版本。你需要一个免费的Pivotal账户来尝试这两种方法。
1)为你的操作系统安装VirtualBox(一款虚拟机)
2)安装CF CLI
3)根据你的操作系统下载PCF Dev。下载完成后将PCF Dev解压到一个文件夹中,然后运行pcfdev-[VERSION]-[OS]。此命令将安装PCFDev插件到CF CLI中
4)在当前文件夹中打开一个新的终端并运行如下命令:cf dev start
5)这里将提示你输入Pivotal的账户凭证,然后下载VM、依赖项,然后启动所有必须的服务。如果你没有Pivotal账号,请前去官网注册。
一旦启动了CF,你就可以打开一个新的终端,然后运行CF命令连接到Cloud Foundry。
cf login -a [api-endpoint] --skip-ssl-validation
PCFDev的API“终点”是 https://api.local.pcfdev.com和Pivotal Web Service 端 https://api.run.pivotal.io,这里会提示输入电子邮箱和密码,PCFDev邮箱和密码就是admin和admin,Pivotal Web Service的邮箱和密码是Pivotal账户的邮箱和密码。登陆后会定位到用户组和应用空间。
这个示例应用程序你可以在这个Github项目位置上找到,这是一个Spring Boot Web(由Java框架SpringBoot搭建的Web程序)服务应用程序的示例,它公开了get请求的API。在默认的配置下,该应用程序创建了一个内存数据库并以JSON格式从这个数据库中获取数据。在云端配置文件中,此程序使用mysqldb的服务来连接到云上的MySQL数据库。这个项目使用Spring cloud service connector(云平台服务连接器)来连接云端MySQL服务。
用以下命令在用户组和应用空间中部署应用程序:
cf push [App-Name] -b [build-pack] -i [No-of-instances] -m [App-memory]
以上命令将部署并启动应用程序。如果没有事先指定路由,系统就会自动创建一个名为app-name的默认路由并将其绑定到应用程序的默认路径。我们还可以用描述文件Manifest对此应用进行推送。描述文件中的所有选项都会生效。
cf push -f [Path-To-Manifest-File]
描述文件Mainifest的示例内容:
applications:
- name: pcf-demo-app
buildpack: https://github.com/cloudfoundry/java-buildpack
memory: 512M
instances: 1
host: pcf-demo-app
path: pcf-demo-1.0.0-SNAPSHOT.jar
timeout: 180
cf apps - 显示所有应用程序的状态 cf app [App-Name] - 显示该应用的状态
如果一切顺利,那应用程序的状态应该是这样的:
应用程序可以用restart或者restaged命令进行重启
cf restart [App-Name] cf restage [App-Name]
查看应用程序日志
cf logs [App-Name] --recent
查看应用程序的环境变量
cf env [App-Name]
如果应用程序的状态显示为“Running”,那么就可以输入 CURL -k https://pcf-demo-app.pcfdev.com/user 命令获取数据。
你可以在Cloud Foundry中查看所有的服务。
cf marketplace - 显示服务市场Marketplace中所有可用的服务。 cf marketplace -s [service-name] - 显示服务市场Marketplace中可用服务的详细信息。
cf create-service [service-name] [service-type] [service-instance-name]- 这条命令会在当前应用空间内创建一个服务,[service-name]指明服务名称、[service-instance-name]指明服务实例名称,[service-type]表示服务的类型。
cf services - 这条命令将在当前目录中显示所有服务
cf service [service-instance-name] - 这条命令将显示应用空间内指定服务的详情
你可以更改描述文件mainifest的内容如下:
applications:
- name: pcf-demo-app
buildpack: https://github.com/cloudfoundry/java-buildpack
memory: 512M
instances: 1
host: pcf-demo-app
path: pcf-demo-1.0.0-SNAPSHOT.jar
timeout: 180
env:
SPRING_PROFILES_ACTIVE: cloud
services:
- mysqldb
以上内容将创建一个名为SPRING_PROFILES_ACTIVE的变量,并且将其同步到云端。除此之外,该内容还将在要推送的应用程序和mysqldb服务之间创建一个绑定。这个绑定也可以由如下命令手动创建:cf bind-service [App-Name] [Service-Instance-Name]
现在可以再次推送该应用,更新描述文件mainifest变更的内容。
cf push -f [Path-To-Manifest-File]
你可以再次运行CF env 来浏览更新后的变量VCAP_SERVICES和mysqldb服务详情。
cf scale [App-name] -i [no-of-instances] -m [memory-limit]
这是CF CLI命令的说明文档,其中包含如下命令的详情:删除、重命名、启动和终止一个应用程序,登录一个用户,浏览文件,创建、更新和删除服务,创建、更新和删除为本地用户提供的服务,绑定和解绑服务,路由的绑定和解绑,创建和删除用户组和应用空间,创建、更新和删除build packs打包脚本,创建和删除用户等等。
如果你正在使用Pivotal Cloud Foundry 的商业版或者开发版,那么这个基于Web的应用程序控制台在Pivotal Cloud Foundry 上是可用的,它完全可以作为 CF CLI的替代品。