面向开发者的Cloud Foundry
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 开发版),该版本是为应用开发人员准备的,在单独一台机器上即可运行。
Cloud Foundry 的几个概念
Users(用户)是可以管理 org用户组、space应用空间和应用程序app的Cloud Foundry用户
Roles(角色)表示赋予用户不同的权限,比如Org管理员或者Space管理员。
Orgs(用户组)表示用户可以在不同的用户组中使用不同的应用,每一个用户组都有一个或更多的空间。
Space(应用空间)是应用程序可以部署和共享配置的地方。单个空间可以部署多个应用程序。一个或多个空间构成了Org。
Apps (应用程序)是指在Cloud Foundry中运行的每一个独立应用程序。
Service(服务)
应用程序所使用的每一个外部服务如数据库、消息队列等等,都是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实例,并且将这个服务实例绑定到应用程序。
Binding(绑定)
绑定是指应用空间中的可用服务和应用程序之间的映射。
Route(路由)
每一个应用程序都由一个被称之为路由的的单个或多个地址来标识。
Buid Packs(一种打包脚本)
Build packs 能够解决、下载并且配置基于用户输入的应用程序依赖。其中的一个例子就是java-buildpack,它将根据应用程序的性质,提供Java、Tomcat、Grails、Groovy、Play等不同的依赖项。Cloud Foundry在大多数平台上都提供有build packs,有社区支持的Build Packs,Cloud Foundry也允许创建定制的Build Packs
Droplets(最后生成的包)
当用户创建一个应用程序(cf push)时,Cloud Foundry会在其结束后生成一个droplets 。一个droplets就相当于实际应用程序二进制文件或者依赖项的镜像或者blob(binary large object 二进制大对象)存储。它将被存储在Cloud Foundry中,以便以后使用。当用户试图运行并解压应用程序时,这个映像就会被用来创建一个VM(虚拟机)并运行它。
环境变量
环境变量是Cloud Foundry和应用程序之间的共享变量。应用程序可以使用这些信息来发现各种服务。
VCAP_SERVICES - Cloud Foundry将服务相关信息增加到了该变量之中。 VCAP_APPLICATIONS - Cloud Foundry将应用程序相关属性增加到了该变量之中。
登陆到Cloud Foundry
LogAggregator是用来整合所有应用程序实例日志的Cloud Foundry组件,可以将日志输出到终端、文件或者第三方服务中。
CF CLI 工具
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账户来尝试这两种方法。
安装PCF Dev
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。
登录 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账户的邮箱和密码。登陆后会定位到用户组和应用空间。
部署一个Cloud Foundry示例应用
这个示例应用程序你可以在这个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 命令获取数据。
使用有MySQL服务的云端配置运行应用程序
你可以在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的替代品。
- 亲身经历的痛--database/sql: Stmt的使用以及坑
- Ubuntu上通过nginx部署Django笔记
- Go学习笔记:golang交叉编译
- Python魔术方法-Magic Method
- python类中super()和__init__()的区别
- Python正则表达式:最短匹配
- 转--Go时间格式化和类型互换操作
- Python标准库(1) — itertools模块
- Linux笔记:使用Vim编辑器
- 一步一步学lucene——(第二步:示例篇)
- 类属性的延迟计算
- 一步一步学lucene——(第三步:索引篇)
- 在Python应用中使用MongoDB
- Python检查xpath和csspath表达式是否合法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux系统rsync实战操作
- SQL线程状态分析:processlist
- 解决Fatal error in launcher: Unable to create process using '"'
- 责任链设计模式:老哥用程序生孩子
- LAMP架构应用实战—Apache服务介绍与安装01
- Excel合并
- 自定义异常为什么性能差,我来告诉你
- GitHub比较火的springBoot实战项目
- LAMP架构应用实战—Apache服务介绍与安装02
- AWS lambda and dynamodb with Java
- 用设计模式搞定女朋友,吃什么火锅,设计模式不香吗
- LAMP架构应用实战—Apache服务基于IP的虚拟主机配置
- MySQL集群搭建—GTID方式
- MySQL主从复制集群搭建
- LAMP架构应用实战—Apache服务基于端口虚拟主机配置