使用bosh部署应用是需要两部分,一个是创建虚拟机使用的模板stemcell,另外一个是应该的Release。所以,部署CloudFoundry之前需要上传stencil和release
4.1 使用bosh上传Stemcell
- # bosh upload stemcell ~/stemcell/bosh-stemcell-2652-openstack-kvm-ubuntu-lucid-go_agent.tgz
- # bosh stemcells
- +------------------------------------------+---------+--------------------------------------+
- | Name | Version | CID |
- +------------------------------------------+---------+--------------------------------------+
- | bosh-openstack-kvm-ubuntu-lucid-go_agent | 2652* | 5a6ddcc0-29e6-4b65-a769-8dd8a99eb5df |
- +------------------------------------------+---------+--------------------------------------+
- (*) Currently in-use
- Stemcells total: 1
4.2 使用bosh上传CloudFoundry
- # cd ~/bosh-workspace/releases/cf-release
- # bosh upload release releases/cf-170.yml
- # bosh releases+------+----------+-------------+
- | Name | Versions | Commit Hash |
- +------+----------+-------------+
- | cf | 170* | 0c0c72c3+ |
- +------+----------+-------------+
- (*) Currently deployed
- (+) Uncommitted changes
- Releases total: 1
4.3 创建部署描述文件
- <%
- director_uuid = "REPLACE-DIRECTOR_UUID"
- static_ip = "REPLACE-IP-ADDRESS"
- root_domain = "#{static_ip}.xip.io"
- deployment_name = 'cf'
- cf_release = '170'
- protocol = 'http'
- common_password = 'mysecretpassword'
- %>
- ---
- name: <%= deployment_name %>
- director_uuid: <%= director_uuid %>
- releases:
- - name: cf
- version: <%= cf_release %>
- compilation:
- workers: 3
- network: default
- reuse_compilation_vms: true
- cloud_properties:
- instance_type: m1.large
- update:
- canaries: 0
- canary_watch_time: 30000-600000
- update_watch_time: 30000-600000
- max_in_flight: 32
- serial: false
- networks:
- - name: default
- type: dynamic
- cloud_properties:
- security_groups:
- - default
- - bosh
- - cf-private
- - name: external
- type: dynamic
- cloud_properties:
- security_groups:
- - default
- - bosh
- - cf-public
- - name: floating
- type: vip
- cloud_properties: {}
- resource_pools:
- - name: common
- network: default
- size: 14
- stemcell:
- name: bosh-openstack-kvm-ubuntu-lucid
- version: latest
- cloud_properties:
- instance_type: m1.small
- - name: large
- network: default
- size: 3
- stemcell:
- name: bosh-openstack-kvm-ubuntu-lucid
- version: latest
- cloud_properties:
- instance_type: m1.medium
- jobs:
- - name: nats
- templates:
- - name: nats
- - name: nats_stream_forwarder
- instances: 1
- resource_pool: common
- networks:
- - name: default
- default: [dns, gateway]
- - name: syslog_aggregator
- templates:
- - name: syslog_aggregator
- instances: 1
- resource_pool: common
- persistent_disk: 65536
- networks:
- - name: default
- default: [dns, gateway]
- - name: nfs_server
- templates:
- - name: debian_nfs_server
- instances: 1
- resource_pool: common
- persistent_disk: 65535
- networks:
- - name: default
- default: [dns, gateway]
- - name: postgres
- templates:
- - name: postgres
- instances: 1
- resource_pool: common
- persistent_disk: 65536
- networks:
- - name: default
- default: [dns, gateway]
- properties:
- db: databases
- - name: uaa
- templates:
- - name: uaa
- instances: 1
- resource_pool: common
- networks:
- - name: default
- default: [dns, gateway]
- - name: loggregator
- templates:
- - name: loggregator
- instances: 1
- resource_pool: common
- networks:
- - name: default
- default: [dns, gateway]
- - name: trafficcontroller
- templates:
- - name: loggregator_trafficcontroller
- instances: 1
- resource_pool: common
- networks:
- - name: default
- default: [dns, gateway]
- - name: cloud_controller
- templates:
- - name: cloud_controller_ng
- instances: 1
- resource_pool: common
- networks:
- - name: default
- default: [dns, gateway]
- properties:
- ccdb: ccdb
- - name: cloud_controller_worker
- templates:
- - name: cloud_controller_worker
- instances: 1
- resource_pool: common
- networks:
- - name: default
- default: [dns, gateway]
- properties:
- ccdb: ccdb
- - name: clock_global
- templates:
- - name: cloud_controller_clock
- instances: 1
- resource_pool: common
- networks:
- - name: default
- default: [dns, gateway]
- properties:
- ccdb: ccdb
- - name: etcd
- templates:
- - name: etcd
- instances: 1
- resource_pool: common
- persistent_disk: 10024
- networks:
- - name: default
- default: [dns, gateway]
- - name: health_manager
- templates:
- - name: hm9000
- instances: 1
- resource_pool: common
- networks:
- - name: default
- default: [dns, gateway]
- - name: dea
- templates:
- - name: dea_logging_agent
- - name: dea_next
- instances: 3
- resource_pool: large
- networks:
- - name: default
- default: [dns, gateway]
- - name: router
- templates:
- - name: gorouter
- instances: 1
- resource_pool: common
- networks:
- - name: default
- default: [dns, gateway]
- - name: haproxy
- templates:
- - name: haproxy
- instances: 1
- resource_pool: common
- networks:
- - name: external
- default: [dns, gateway]
- - name: floating
- static_ips:
- - <%= static_ip %>
- properties:
- networks:
- apps: external
- properties:
- domain: <%= root_domain %>
- system_domain: <%= root_domain %>
- system_domain_organization: 'admin'
- app_domains:
- - <%= root_domain %>
- haproxy: {}
- networks:
- apps: default
- nats:
- user: nats
- password: <%= common_password %>
- address: 0.nats.default.<%= deployment_name %>.microbosh
- port: 4222
- machines:
- - 0.nats.default.<%= deployment_name %>.microbosh
- syslog_aggregator:
- address: 0.syslog-aggregator.default.<%= deployment_name %>.microbosh
- port: 54321
- nfs_server:
- address: 0.nfs-server.default.<%= deployment_name %>.microbosh
- network: "*.<%= deployment_name %>.microbosh"
- idmapd_domain: "localdomain"
- debian_nfs_server:
- no_root_squash: true
- loggregator_endpoint:
- shared_secret: <%= common_password %>
- host: 0.trafficcontroller.default.<%= deployment_name %>.microbosh
- loggregator:
- servers:
- zone:
- - 0.loggregator.default.<%= deployment_name %>.microbosh
- traffic_controller:
- zone: 'zone'
- logger_endpoint:
- use_ssl: <%= protocol == 'https' %>
- port: 80
- ssl:
- skip_cert_verify: true
- router:
- endpoint_timeout: 60
- status:
- port: 8080
- user: gorouter
- password: <%= common_password %>
- servers:
- z1:
- - 0.router.default.<%= deployment_name %>.microbosh
- z2: []
- etcd:
- machines:
- - 0.etcd.default.<%= deployment_name %>.microbosh
- dea: &dea
- disk_mb: 102400
- disk_overcommit_factor: 2
- memory_mb: 15000
- memory_overcommit_factor: 3
- directory_server_protocol: <%= protocol %>
- mtu: 1460
- deny_networks:
- - 169.254.0.0/16 # Google Metadata endpoint
- dea_next: *dea
- disk_quota_enabled: false
- dea_logging_agent:
- status:
- user: admin
- password: <%= common_password %>
- databases: &databases
- db_scheme: postgres
- address: 0.postgres.default.<%= deployment_name %>.microbosh
- port: 5524
- roles:
- - tag: admin
- name: ccadmin
- password: <%= common_password %>
- - tag: admin
- name: uaaadmin
- password: <%= common_password %>
- databases:
- - tag: cc
- name: ccdb
- citext: true
- - tag: uaa
- name: uaadb
- citext: true
- ccdb: &ccdb
- db_scheme: postgres
- address: 0.postgres.default.<%= deployment_name %>.microbosh
- port: 5524
- roles:
- - tag: admin
- name: ccadmin
- password: <%= common_password %>
- databases:
- - tag: cc
- name: ccdb
- citext: true
- ccdb_ng: *ccdb
- uaadb:
- db_scheme: postgresql
- address: 0.postgres.default.<%= deployment_name %>.microbosh
- port: 5524
- roles:
- - tag: admin
- name: uaaadmin
- password: <%= common_password %>
- databases:
- - tag: uaa
- name: uaadb
- citext: true
- cc: &cc
- srv_api_uri: <%= protocol %>://api.<%= root_domain %>
- jobs:
- local:
- number_of_workers: 2
- generic:
- number_of_workers: 2
- global:
- timeout_in_seconds: 14400
- app_bits_packer:
- timeout_in_seconds: null
- app_events_cleanup:
- timeout_in_seconds: null
- app_usage_events_cleanup:
- timeout_in_seconds: null
- blobstore_delete:
- timeout_in_seconds: null
- blobstore_upload:
- timeout_in_seconds: null
- droplet_deletion:
- timeout_in_seconds: null
- droplet_upload:
- timeout_in_seconds: null
- model_deletion:
- timeout_in_seconds: null
- bulk_api_password: <%= common_password %>
- staging_upload_user: upload
- staging_upload_password: <%= common_password %>
- quota_definitions:
- default:
- memory_limit: 10240
- total_services: 100
- non_basic_services_allowed: true
- total_routes: 1000
- trial_db_allowed: true
- resource_pool:
- resource_directory_key: cloudfoundry-resources
- fog_connection:
- provider: Local
- local_root: /var/vcap/nfs/shared
- packages:
- app_package_directory_key: cloudfoundry-packages
- fog_connection:
- provider: Local
- local_root: /var/vcap/nfs/shared
- droplets:
- droplet_directory_key: cloudfoundry-droplets
- fog_connection:
- provider: Local
- local_root: /var/vcap/nfs/shared
- buildpacks:
- buildpack_directory_key: cloudfoundry-buildpacks
- fog_connection:
- provider: Local
- local_root: /var/vcap/nfs/shared
- install_buildpacks:
- - name: java_buildpack
- package: buildpack_java
- - name: ruby_buildpack
- package: buildpack_ruby
- - name: nodejs_buildpack
- package: buildpack_nodejs
- - name: go_buildpack
- package: buildpack_go
- db_encryption_key: <%= common_password %>
- hm9000_noop: false
- diego: false
- newrelic:
- license_key: null
- environment_name: <%= deployment_name %>
- ccng: *cc
- login:
- enabled: false
- uaa:
- url: <%= protocol %>://uaa.<%= root_domain %>
- no_ssl: <%= protocol == 'http' %>
- cc:
- client_secret: <%= common_password %>
- admin:
- client_secret: <%= common_password %>
- batch:
- username: batch
- password: <%= common_password %>
- clients:
- cf:
- override: true
- authorized-grant-types: password,implicit,refresh_token
- authorities: uaa.none
- scope: cloud_controller.read,cloud_controller.write,openid,password.write,cloud_controller.admin,scim.read,scim.write
- access-token-validity: 7200
- refresh-token-validity: 1209600
- admin:
- secret: <%= common_password %>
- authorized-grant-types: client_credentials
- authorities: clients.read,clients.write,clients.secret,password.write,scim.read,uaa.admin
- scim:
- users:
- - admin|<%= common_password %>|scim.write,scim.read,openid,cloud_controller.admin,uaa.admin,password.write
- - services|<%= common_password %>|scim.write,scim.read,openid,cloud_controller.admin
- jwt:
- signing_key: |
- -----BEGIN RSA PRIVATE KEY-----
- REPLACE+ME+WITH+A+REAL+RSA+PRIVATE+KEY+++++++++++++asdfghj123122
- 123456789+++++REPLACE+ME+WITH+A+REAL+RSA+PRIVATE+KEY++++++++++++
- asd34++123456789+++++REPLACE+ME+WITH+A+REAL+RSA+PRIVATE+KEY+++++
- KVy7psa8xzElSyzqx7oJyfJ1JZyOzToj9T5SfTIq396agbHJWVfYphNahvZ/7uMX
- sdfvsdfgvKVy7psALKSFOa8xzElSyzqx7oJyfJ1JZyOzToj9T5SfTIq396agbHJW
- VfYphNahvZ/7uMXKVy7psa8xzElSyzqx7oJyfJ1JZyOO:9T5SfTIq396agbHJWVf
- YphNasvZ/7uMXFzqx7oJyfJ1JZyOzToj9T5SfTIq396agbHJWVfYphNahvZ/7uMX
- sedfsyzqx7oJyfJ1JZyOzToj9TDASWDASD5SfTIq396agbHJWVfYphNahvZ/7uMX
- -----END RSA PRIVATE KEY-----
- verification_key: |
- -----BEGIN PUBLIC KEY-----
- REPLACE+ME+WITH+A+VALID+PUBLIC+KEY++++++++++MIGfMA0GCSqGSIb3DQEBAQUA
- AASAqHxf+ZH9BL1gk9Y6kCnbM5R60gfwjyW1/dQPjOzn9N394zd2FJoFHwdq9Qs0wBug
- BUGBUGspULZVNRxq7veq/fzwIDAQAB
- -----END PUBLIC KEY-----
其中 REPLACE-DIRECTOR_UUID为Bosh Director的UUID,
- # bosh status
- Config
- /root/.bosh_config
- Director
- Name microbosh-openstack
- URL https://172.24.4.227:25555
- Version 1.2652.0 (00000000)
- User admin
- UUID 04fd1b77-9522-459e-8f56-bfe83b7c5624
- CPI openstack
- dns enabled (domain_name: microbosh)
- compiled_package_cache disabled
- snapshots disabled
- Deployment
- Manifest /root/bosh/bosh-workspace/deployments/cf/demo.yml
- REPLACE-IP-ADDRESS是预先分配好的floating ip
- # nova floating-ip-create public
root_domain是部署CloudFoundry使用的域名,部署CloudFoundry必须有一个通配符域名(Wildcard DNS record),例如, 如果使用的域名为example.com,那么example.com和*.example.com都要解析为同一IP地址,即前面申请的floating ip。 如果没有这样的域名,可以试一下xip.io提供的动态域名,它可以把<ip>.xip.io和*.<ip>.xip.io都解析为<ip>, 例如,login.111.222.111.222.xip.io会被解析为111.222.111.222
在部署CloudFoundry过程中,需要设置很多密码,例如访问各个虚拟机,CloudFoundry默认的管理员账户等,在此例中,同一设置为common_password。在生产环境中,比较合理的做法是设置为不同的密码。
4.4 部署CloudFoundry
- # bosh vms