422 lines
11 KiB
YAML
422 lines
11 KiB
YAML
heat_template_version: 2014-10-16
|
|
|
|
description: >
|
|
This template will boot a Mesos cluster with one or more slaves
|
|
(as specified by the number_of_slaves parameter, which
|
|
defaults to 1).
|
|
|
|
parameters:
|
|
|
|
ssh_key_name:
|
|
type: string
|
|
description: name of ssh key to be provisioned on our server
|
|
|
|
external_network:
|
|
type: string
|
|
description: uuid/name of a network to use for floating ip addresses
|
|
default: public
|
|
|
|
server_image:
|
|
type: string
|
|
default: ubuntu-mesos
|
|
description: glance image used to boot the server
|
|
|
|
master_flavor:
|
|
type: string
|
|
default: m1.small
|
|
description: flavor to use when booting the server
|
|
|
|
slave_flavor:
|
|
type: string
|
|
default: m1.small
|
|
description: flavor to use when booting the server
|
|
|
|
dns_nameserver:
|
|
type: string
|
|
description: address of a dns nameserver reachable in your environment
|
|
default: 8.8.8.8
|
|
|
|
number_of_slaves:
|
|
type: number
|
|
description: how many mesos slaves to spawn initially
|
|
default: 1
|
|
|
|
fixed_network_cidr:
|
|
type: string
|
|
description: network range for fixed ip network
|
|
default: 10.0.0.0/24
|
|
|
|
wait_condition_timeout:
|
|
type: number
|
|
description: >
|
|
timeout for the Wait Conditions
|
|
default: 6000
|
|
|
|
cluster_name:
|
|
type: string
|
|
description: human readable name for the mesos cluster
|
|
default: my-cluster
|
|
|
|
executor_registration_timeout:
|
|
type: string
|
|
description: >
|
|
Amount of time to wait for an executor to register with the slave before
|
|
considering it hung and shutting it down
|
|
default: 5mins
|
|
|
|
number_of_masters:
|
|
type: number
|
|
description: how many mesos masters to spawn initially
|
|
default: 1
|
|
|
|
http_proxy:
|
|
type: string
|
|
description: http proxy address for docker
|
|
default: ""
|
|
|
|
https_proxy:
|
|
type: string
|
|
description: https proxy address for docker
|
|
default: ""
|
|
|
|
no_proxy:
|
|
type: string
|
|
description: no proxies for docker
|
|
default: ""
|
|
|
|
trustee_domain_id:
|
|
type: string
|
|
description: domain id of the trustee
|
|
default: ""
|
|
|
|
trustee_user_id:
|
|
type: string
|
|
description: user id of the trustee
|
|
default: ""
|
|
|
|
trustee_username:
|
|
type: string
|
|
description: username of the trustee
|
|
default: ""
|
|
|
|
trustee_password:
|
|
type: string
|
|
description: password of the trustee
|
|
default: ""
|
|
hidden: true
|
|
|
|
trust_id:
|
|
type: string
|
|
description: id of the trust which is used by the trustee
|
|
default: ""
|
|
hidden: true
|
|
|
|
region_name:
|
|
type: string
|
|
description: A logically separate section of the cluster
|
|
|
|
auth_url:
|
|
type: string
|
|
description: >
|
|
url for mesos to authenticate before sending request
|
|
|
|
username:
|
|
type: string
|
|
description: user name
|
|
|
|
password:
|
|
type: string
|
|
description: >
|
|
user password, not set in current implementation, only used to
|
|
fill in for Mesos config file
|
|
default:
|
|
password
|
|
hidden: true
|
|
|
|
tenant_name:
|
|
type: string
|
|
description: >
|
|
tenant_name is used to isolate access to Compute resources
|
|
|
|
volume_driver:
|
|
type: string
|
|
description: volume driver to use for container storage
|
|
default: ""
|
|
|
|
domain_name:
|
|
type: string
|
|
description: >
|
|
domain is to define the administrative boundaries for management
|
|
of Keystone entities
|
|
|
|
rexray_preempt:
|
|
type: string
|
|
description: >
|
|
enables any host to take control of a volume irrespective of whether
|
|
other hosts are using the volume
|
|
default: "false"
|
|
|
|
resources:
|
|
|
|
######################################################################
|
|
#
|
|
# network resources. allocate a network and router for our server.
|
|
#
|
|
|
|
fixed_network:
|
|
type: OS::Neutron::Net
|
|
|
|
fixed_subnet:
|
|
type: OS::Neutron::Subnet
|
|
properties:
|
|
cidr: {get_param: fixed_network_cidr}
|
|
network: {get_resource: fixed_network}
|
|
dns_nameservers:
|
|
- {get_param: dns_nameserver}
|
|
|
|
extrouter:
|
|
type: OS::Neutron::Router
|
|
properties:
|
|
external_gateway_info:
|
|
network: {get_param: external_network}
|
|
|
|
extrouter_inside:
|
|
type: OS::Neutron::RouterInterface
|
|
properties:
|
|
router_id: {get_resource: extrouter}
|
|
subnet: {get_resource: fixed_subnet}
|
|
|
|
######################################################################
|
|
#
|
|
# security groups. we need to permit network traffic of various
|
|
# sorts.
|
|
#
|
|
|
|
secgroup_base:
|
|
type: OS::Neutron::SecurityGroup
|
|
properties:
|
|
rules:
|
|
- protocol: icmp
|
|
- protocol: tcp
|
|
port_range_min: 22
|
|
port_range_max: 22
|
|
- protocol: tcp
|
|
remote_mode: remote_group_id
|
|
|
|
secgroup_mesos:
|
|
type: OS::Neutron::SecurityGroup
|
|
properties:
|
|
rules:
|
|
- protocol: tcp
|
|
port_range_min: 5050
|
|
port_range_max: 5050
|
|
- protocol: tcp
|
|
port_range_min: 8080
|
|
port_range_max: 8080
|
|
|
|
######################################################################
|
|
#
|
|
# Master SoftwareConfig.
|
|
#
|
|
|
|
write_params_master:
|
|
type: OS::Heat::SoftwareConfig
|
|
properties:
|
|
group: script
|
|
config: {get_file: fragments/write-heat-params-master.sh}
|
|
inputs:
|
|
- name: MESOS_MASTERS_IPS
|
|
type: String
|
|
- name: CLUSTER_NAME
|
|
type: String
|
|
- name: QUORUM
|
|
type: String
|
|
- name: HTTP_PROXY
|
|
type: String
|
|
- name: HTTPS_PROXY
|
|
type: String
|
|
- name: NO_PROXY
|
|
type: String
|
|
|
|
configure_master:
|
|
type: OS::Heat::SoftwareConfig
|
|
properties:
|
|
group: script
|
|
config: {get_file: fragments/configure-mesos-master.sh}
|
|
|
|
add_proxy_master:
|
|
type: OS::Heat::SoftwareConfig
|
|
properties:
|
|
group: script
|
|
config: {get_file: fragments/add-proxy.sh}
|
|
|
|
start_services_master:
|
|
type: OS::Heat::SoftwareConfig
|
|
properties:
|
|
group: script
|
|
config: {get_file: fragments/start-services-master.sh}
|
|
|
|
######################################################################
|
|
#
|
|
# Master SoftwareDeployment.
|
|
#
|
|
|
|
write_params_master_deployment:
|
|
type: OS::Heat::SoftwareDeploymentGroup
|
|
properties:
|
|
config: {get_resource: write_params_master}
|
|
servers: {get_attr: [mesos_masters, attributes, mesos_server_id]}
|
|
input_values:
|
|
MESOS_MASTERS_IPS: {list_join: [' ', {get_attr: [mesos_masters, mesos_master_ip]}]}
|
|
CLUSTER_NAME: {get_param: cluster_name}
|
|
NUMBER_OF_MASTERS: {get_param: number_of_masters}
|
|
HTTP_PROXY: {get_param: http_proxy}
|
|
HTTPS_PROXY: {get_param: https_proxy}
|
|
NO_PROXY: {get_param: no_proxy}
|
|
|
|
configure_master_deployment:
|
|
type: OS::Heat::SoftwareDeploymentGroup
|
|
depends_on:
|
|
- write_params_master_deployment
|
|
properties:
|
|
config: {get_resource: configure_master}
|
|
servers: {get_attr: [mesos_masters, attributes, mesos_server_id]}
|
|
|
|
add_proxy_master_deployment:
|
|
type: OS::Heat::SoftwareDeploymentGroup
|
|
depends_on:
|
|
- configure_master_deployment
|
|
properties:
|
|
config: {get_resource: add_proxy_master}
|
|
servers: {get_attr: [mesos_masters, attributes, mesos_server_id]}
|
|
|
|
start_services_master_deployment:
|
|
type: OS::Heat::SoftwareDeploymentGroup
|
|
depends_on:
|
|
- add_proxy_master_deployment
|
|
properties:
|
|
config: {get_resource: start_services_master}
|
|
servers: {get_attr: [mesos_masters, attributes, mesos_server_id]}
|
|
|
|
######################################################################
|
|
#
|
|
# load balancers.
|
|
#
|
|
|
|
api_monitor:
|
|
type: OS::Neutron::HealthMonitor
|
|
properties:
|
|
type: TCP
|
|
delay: 5
|
|
max_retries: 5
|
|
timeout: 5
|
|
|
|
api_pool:
|
|
type: OS::Neutron::Pool
|
|
properties:
|
|
protocol: HTTP
|
|
monitors: [{get_resource: api_monitor}]
|
|
subnet: {get_resource: fixed_subnet}
|
|
lb_method: ROUND_ROBIN
|
|
vip:
|
|
protocol_port: 8080
|
|
|
|
api_pool_floating:
|
|
type: OS::Neutron::FloatingIP
|
|
depends_on:
|
|
- extrouter_inside
|
|
properties:
|
|
floating_network: {get_param: external_network}
|
|
port_id: {get_attr: [api_pool, vip, port_id]}
|
|
|
|
######################################################################
|
|
#
|
|
# Mesos masters. This is a resource group that will create 1 master.
|
|
#
|
|
|
|
mesos_masters:
|
|
type: OS::Heat::ResourceGroup
|
|
depends_on:
|
|
- extrouter_inside
|
|
properties:
|
|
count: {get_param: number_of_masters}
|
|
resource_def:
|
|
type: mesosmaster.yaml
|
|
properties:
|
|
ssh_key_name: {get_param: ssh_key_name}
|
|
server_image: {get_param: server_image}
|
|
master_flavor: {get_param: master_flavor}
|
|
external_network: {get_param: external_network}
|
|
fixed_network: {get_resource: fixed_network}
|
|
fixed_subnet: {get_resource: fixed_subnet}
|
|
secgroup_base_id: {get_resource: secgroup_base}
|
|
secgroup_mesos_id: {get_resource: secgroup_mesos}
|
|
api_pool_id: {get_resource: api_pool}
|
|
|
|
######################################################################
|
|
#
|
|
# Mesos slaves. This is a resource group that will initially
|
|
# create <number_of_slaves> slaves, and needs to be manually scaled.
|
|
#
|
|
|
|
mesos_slaves:
|
|
type: OS::Heat::ResourceGroup
|
|
depends_on:
|
|
- extrouter_inside
|
|
properties:
|
|
count: {get_param: number_of_slaves}
|
|
resource_def:
|
|
type: mesosslave.yaml
|
|
properties:
|
|
ssh_key_name: {get_param: ssh_key_name}
|
|
server_image: {get_param: server_image}
|
|
slave_flavor: {get_param: slave_flavor}
|
|
fixed_network: {get_resource: fixed_network}
|
|
fixed_subnet: {get_resource: fixed_subnet}
|
|
mesos_masters_ips: {list_join: [' ', {get_attr: [mesos_masters, mesos_master_ip]}]}
|
|
external_network: {get_param: external_network}
|
|
wait_condition_timeout: {get_param: wait_condition_timeout}
|
|
executor_registration_timeout: {get_param: executor_registration_timeout}
|
|
secgroup_base_id: {get_resource: secgroup_base}
|
|
http_proxy: {get_param: http_proxy}
|
|
https_proxy: {get_param: https_proxy}
|
|
no_proxy: {get_param: no_proxy}
|
|
auth_url: {get_param: auth_url}
|
|
username: {get_param: username}
|
|
password: {get_param: password}
|
|
tenant_name: {get_param: tenant_name}
|
|
volume_driver: {get_param: volume_driver}
|
|
region_name: {get_param: region_name}
|
|
domain_name: {get_param: domain_name}
|
|
rexray_preempt: {get_param: rexray_preempt}
|
|
|
|
outputs:
|
|
|
|
api_address:
|
|
value: {get_attr: [api_pool_floating, floating_ip_address]}
|
|
description: >
|
|
This is the API endpoint of the Mesos master. Use this to access
|
|
the Mesos API from outside the cluster.
|
|
|
|
mesos_master_private:
|
|
value: {get_attr: [mesos_masters, mesos_master_ip]}
|
|
description: >
|
|
This is a list of the "private" addresses of all the Mesos masters.
|
|
|
|
mesos_master:
|
|
value: {get_attr: [mesos_masters, mesos_master_external_ip]}
|
|
description: >
|
|
This is the "public" ip address of the Mesos master server. Use this address to
|
|
log in to the Mesos master via ssh or to access the Mesos API
|
|
from outside the cluster.
|
|
|
|
mesos_slaves_private:
|
|
value: {get_attr: [mesos_slaves, mesos_slave_ip]}
|
|
description: >
|
|
This is a list of the "private" addresses of all the Mesos agents.
|
|
|
|
mesos_slaves:
|
|
value: {get_attr: [mesos_slaves, mesos_slave_external_ip]}
|
|
description: >
|
|
This is a list of the "public" addresses of all the Mesos agents.
|