Pivotal Web Service是Pivotal公司提供的公有云服务,其底层架构是Cloud Foundry。
- create a PWS account
- installed CF CLI
- Deploy the Sample App
git clone https://github.com/cloudfoundry-samples/cf-sample-app-spring.git
cd cf-sample-app-spring
# deploy application
manifest.yml
----------------------------------
applications:
- name: cf-demo
memory: 768M
instances: 1
random-route: true
buildpacks:
-----------------------------------
cf login -a https://api.run.pivotal.io -u xxx -p pwd # login to PWS
cf target -o org_name -s space_name # org and space
cf push cf-demo # push the app to PWS
cf apps # check application status
cf restart cf-demo # restart application
cf logs cf-demo --recent # check log
- Connect a Database
cf marketplace # See what services PWS provides
cf marketplace -s elephantsql
cf create-service elephantsql turtle cf-demo-db // create a services, turtle-- this is a free package
cf bind-service cf-demo cf-demo-db // bind a service instance to an app
cf restage cf-demo
cf services #verify services
Configuration service RabbitMQ, Redis, Service Registry, Config Server
- RabbitMQ, Redis config
cf marketplace
cf create-service p.rabbitmq single-node my-rabbitmq
cf services
cf create-service-key my-rabbitmq my-rabbit-key
cf service-key my-rabbitmq my-rabbit-key // service-key config
# Redis, cf create-service p.redis 2gb my-redis
// Spring Cloud or Spring Boot project
# application.yml
----------------------------------
spring:
rabbitmq:
host: 10.xx.xx.xx
port: 5672
username: xxx
password: pwd
----------------------------------
- config service-registry
cf create-service p-service-registry standard my-registry
# manifest.yml
----------------------------------
applications:
- name: cf-demo
memory: 768M
instances: 1
random-route: true
buildpacks:
path:
env:
spring.profiles.active: east
services:
- my-registry
- my-rabbitmq
- my-config
routes:
- route: https://
-----------------------------------
cf bind-service my-app mydb
- Config Server
SSH Key
{
"git":{
"uri":"ssh://git@github.com/spring-cloud-services-samples/demo.git",
"privateKey":"-----BEGIN EXAMPLE RSA PRIVATE KEY-----
MIIJKQIB..."
}
}
cf create-service p-config-server standard my-config
cf update-service my-config -c "{"count":1,"git":{"privateKey":"----- KEY---","hostKey":"XXX","label":"dev","hostKeyAlgorithm":"ecdsa-sha2-nistp256","uri":"ssh://git@github.com/XXX.git"}}"
cf service my-config
cf push –f manifest.yml //depoly
-
Architecture
Within a PCF foundation, a “mirror service” makes a full mirror of each Git repository (“R1”, “R2”, “R3”) used by a Config Server service instance. The Config Server service instance, in turn, clones repositories from this mirror rather than cloning from the external Git server directly.
config-server-fig
NodeJS application
package.json
{
"name": "gjflying-app",
"version": "0.0.1",
"description": "使用express框架、hbs模板引擎、mongodb数据库的简单nodejs应用,依赖vmware的pass平台cloudFoundary进行发布上线;",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "gaojun",
"private": true,
"dependencies": {
"express": "4.9"
},
"devDependencies": {
"hbs": "^2.7.0",
"body-parser": "^1.9.3"
}
}
npm install // 安装相关依赖包
## 应用中需要连接mongodb的驱动及连接池包
npm install mongodb --save // 保存依赖到package.json中devDependencies
## mongo
show dbs
show collections
use gjflying
db.login.insert({name:"admin",pwd:"123456"});
db.login.find({})
cf push
CLI
1. Before getting started:
cf config // Write default values to the config
cf config [--async-timeout TIMEOUT_IN_MINUTES] [--trace (true | false | path/to/file)] [--color (true | false)] [--locale (LOCALE | CLEAR)]
#OPTIONS:
# --async-timeout Timeout for async HTTP requests
# --color Enable or disable color
# --locale Set default locale. If LOCALE is 'CLEAR', previous locale is deleted.
# --trace Trace HTTP requests
cf login,l [-a API_URL] [-u USERNAME] [-p PASSWORD] [-o ORG] [-s SPACE] [--sso | --sso-passcode PASSCODE] [--origin ORIGIN]
cf target,t [-o ORG] [-s SPACE] # Set or view the targeted org or space
cf logout,lo
2. Application lifecycle:
cf apps,a # List all apps in the target space
cf push,p
# Push a new app or sync changes to an existing app
# -b 自定义的buildpack地址,一般如github上打包的.tar.gz的文件包
# -c 指定启动命令,如nodejs中,cf push -c node myappstart.js,指定使用node myappstart.js来启动你的应用
# -d 指定域名,如example.com
# -f 指定manifest.yml文件路径,无此参数时,cf push会将当前你所处文件目录遍历,并上传到pivotal中你申请的空间中,并使用当前目录中manifest.yml文件配置的选项启动应用,如果没有此文件,一般会报错,关于manifest.yml的用法,请参考下面实例部分;
# -p 指定你要上传发布的应用源码路径;默认是当前路径
# -m 指定分配给该应用的内在大小如:cf push -m 10mb
# -h 指定主机
cf start,st app_name # Start an app
cf stop,sp app_name # stop an app
cf restart,rs app_name # Stop all instances of the app, then start them again. This causes downtime.
cf restage,rg #Recreate the app's executable artifact using the latest pushed app files and the latest environment (variables, service bindings, buildpack, stack, etc.). This action will cause app downtime.
cf delete,d app_name [-f,-r]
# -f Force deletion without confirmation
# -r Also delete any mapped routes
cf run-task,rt cf app_name COMMAND [-k DISK] [-m MEMORY] [--name TASK_NAME] # Run a one-off task on an app
cf logs app_name --recent # Tail or show recent logs for an app
cf ssh app_name # SSH to an application container instance
cf app app_name --guid # Display health and status for an app
cf env,e app_name # Show all env variables for an app
cf scale app_name# Change or view the instance count, disk space limit, and memory limit for an app
cf events app_name # Show recent app events
cf set-env,se app_name ENV_VAR_NAME ENV_VAR_VALUE #Set an env variable for an app
cf create-app-manifest app_name [-p /path/to/<app-name>_manifest.yml] #Create an app manifest for an app that has been pushed successfully
3. Services integration:
cf marketplace,m [-s SERVICE] [--no-plans]
# List available offerings in the marketplace 查看PWS提供了哪些服务
# OPTIONS:
# -s Show plan details for a particular service offering
# --no-plans Hide plan information for service offerings
cf services,s #List all service instances in the target space
cf create-service,cs SERVICE PLAN SERVICE_INSTANCE [-b BROKER] [-c PARAMETERS_AS_JSON] [-t TAGS]
# Create a service instance
# cf create-service SERVICE PLAN SERVICE_INSTANCE -c PATH_TO_FILE (with a valid JSON object)
# cf create-service db-service silver mydb -c '{"ram_gb":4}'
cf update-service SERVICE_INSTANCE [-p NEW_PLAN] [-c PARAMETERS_AS_JSON] [-t TAGS] [--upgrade]
# cf update-service mydb -p gold
# cf update-service mydb -c '{"ram_gb":4}'
# cf update-service mydb -c ~/workspace/tmp/instance_config.json
# cf update-service mydb -t "list, of, tags"
# cf update-service mydb --upgrade
# cf update-service mydb --upgrade --force
# -c Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file. For a list of supported configuration parameters, see documentation for the particular service offering.
# -p Change service plan for a service instance
# -t User provided tags
# --upgrade, -u Upgrade the service instance to the latest version of the service plan available. It cannot be combined with flags: -c, -p, -t.
# --force, -f Force the upgrade to the latest available version of the service plan. It can only be used with: -u, --upgrade
cf delete-service -f
# -f Force deletion without confirmation
cf service service_instance # Show service instance info
cf bind-service,bs APP_NAME SERVICE_INSTANCE --binding-name BINDING_NAME
# Bind[绑定] a service instance to an app
# cf bind-service myapp mydb -c '{"permissions":"read-only"}'
# --binding-name Name to expose service instance to app process with (Default: service instance name)
# -c Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file. For a list of supported configuration parameters, see documentation for the particular service offering.
cf unbind-service,us APP_NAME SERVICE_INSTANCE
# Unbind a service instance from an app
cf create-user-provided-service,cups SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG_DRAIN_URL] [-r ROUTE_SERVICE_URL] [-t TAGS]
# Make a user-provided service instance available to CF apps
cf create-user-provided-service my-db-mine -p '{"username":"admin","password":"pa55woRD"}'
cf create-user-provided-service my-db-mine -p /path/to/credentials.json
cf create-user-provided-service my-db-mine -t "list, of, tags"
cf create-user-provided-service my-drain-service -l syslog://example.com
cf create-user-provided-service my-route-service -r https://example.com
#OPTIONS:
# -l URL to which logs for bound applications will be streamed
# -p Credentials, provided inline or in a file, to be exposed in the VCAP_SERVICES environment variable for bound applications
# -r URL to which requests for bound routes will be forwarded. Scheme for this URL must be https
# -t User provided tags
cf update-user-provided-service, uups SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG_DRAIN_URL] [-r ROUTE_SERVICE_URL] [-t TAGS]
# Update user-provided service instance
cf create-service-key, csk SERVICE_INSTANCE SERVICE_KEY [-c PARAMETERS_AS_JSON]
# Create key for a service instance
cf create-service-key mydb mykey -c '{"permissions":"read-only"}'
cf create-service-key mydb mykey -c ~/workspace/tmp/instance_config.json
cf delete-service-key,dsk SERVICE_INSTANCE SERVICE_KEY [-f]
cf service-keys,sk SERVICE_INSTANCE
# List keys for a service instance
cf service-key
cf bind-route-service,brs DOMAIN [--hostname HOSTNAME] [--path PATH] SERVICE_INSTANCE [-c PARAMETERS_AS_JSON]
# Bind a service instance to an HTTP route
# EXAMPLES:
cf bind-route-service example.com --hostname myapp --path foo myratelimiter
cf bind-route-service example.com myratelimiter -c file.json
cf bind-route-service example.com myratelimiter -c '{"valid":"json"}'
cf unbind-route-service,urs
4. Route and domain management:
cf routes,r
# List all routes in the current space or the current organization
# --orglevel List all the routes for all spaces of current organization
cf create-route
# cf create-route SPACE DOMAIN [--hostname HOSTNAME] [--path PATH]
cf delete-route
cf create-domain
cf domains # List domains in the target org
cf map-route # Add a url route to an app
# Map an HTTP route:
# cf map-route APP_NAME DOMAIN [--hostname HOSTNAME] [--path PATH]
# Map a TCP route:
# cf map-route APP_NAME DOMAIN (--port PORT | --random-port)
cf map-route my-app example.com # example.com
cf map-route my-app example.com --hostname myhost # myhost.example.com
cf map-route my-app example.com --hostname myhost --path foo # myhost.example.com/foo
cf map-route my-app example.com --port 5000 # example.com:5000
cf unmap-route
OPTIONS:
--hostname, -n Hostname used to identify the HTTP route
--path Path used to identify the HTTP route
--port Port used to identify the TCP route
5. Space management:
cf spaces
cf create-space test # create a space
cf delete-space test
cf space-users ORG SPACE # Show space users by role
cf set-space-role USERNAME ORG SPACE ROLE # Assign a space role to a user
cf unset-space-role USERNAME ORG SPACE ROLE # remove a space role from a user
# ROLES:
'SpaceManager' - Invite and manage users, and enable features for a given space
'SpaceDeveloper' - Create and manage apps and services, and see logs and reports
'SpaceAuditor' - View logs, reports, and settings on this space
6. Org management:
cf orgs,o // List all orgs
cf org-users ORG # Show org users by role
cf set-org-role USERNAME ORG ROLE [--client]
# Assign an org role to a user
cf unset-org-role
# ROLES:
# 'OrgManager' - Invite and manage users, select and change plans, and set spending limits
# 'BillingManager' - Create and manage the billing account and payment info
# 'OrgAuditor' - Read-only access to org info and reports
# OPTIONS:
# --client Treat USERNAME as the client-id of a (non-user) service account
7. CLI plugin management:
cf plugins [--checksum | --outdated]
# List commands of installed plugins
# OPTIONS:
# --checksum Compute and show the sha1 value of the plugin binary file
# --outdated Search the plugin repositories for new versions of installed plugins
cf install-plugin PLUGIN_NAME [-r REPO_NAME] [-f]
cf install-plugin LOCAL-PATH/TO/PLUGIN | URL [-f]
cf install-plugin ~/Downloads/plugin-foobar
cf install-plugin https://example.com/plugin-foobar_linux_amd64
cf install-plugin -r My-Repo plugin-echo
cf add-plugin-repo REPO_NAME URL
# Add a new plugin repository
cf add-plugin-repo ExampleRepo https://example.com/repo
cf list-plugin-repos
# List all the added plugin repositories
cf repo-plugins [-r REPO_NAME]
# List all available plugins in specified repository or in all added repositories
# -r Name of a registered repository
集群维护-monit工具
1. monit summary # 查看集群组件状态
2. monit restart postgres #重启某个组件
3. monit restart all # 重启所有组件
网友评论