@ -3,30 +3,30 @@ heat_template_version: 2013-05-23
description : >
This template will boot a coreos cluster with one or more
minions (as specified by the number_of_minions parameter, which
defaults to "2" ).
defaults to 1 ).
parameters:
#
# REQUIRED PARAMETERS
#
ssh_key_name:
type : string
description : name of ssh key to be provisioned on our server
external_network:
type : string
description : uuid of a network to use for floating ip addresses
description : uuid/name of a network to use for floating ip addresses
default : public
#
# OPTIONAL PARAMETERS
#
server_image:
type : string
default : CoreOS
description : glance image used to boot the server
server_flavor:
master_flavor:
type : string
default : m1.small
description : flavor to use when booting the server
minion_flavor:
type : string
default : m1.small
description : flavor to use when booting the server
@ -52,18 +52,18 @@ parameters:
fixed_network_cidr:
type : string
description : network range for fixed ip network
default : "10.0.0.0/24"
default : 10.0 .0 .0 /24
portal_network_cidr:
type : string
description : >
address range used by kubernetes for service portals
default : "10.254.0.0/16"
default : 10.254 .0 .0 /16
flannel_network_cidr:
type : string
description : network range for flannel overlay network
default : "10.100.0.0/16"
default : 10.100 .0 .0 /16
flannel_network_subnetlen:
type : string
@ -106,10 +106,10 @@ parameters:
resources:
master_wait_handle:
type : "AWS::CloudFormation::WaitConditionHandle"
type : AWS::CloudFormation::WaitConditionHandle
master_wait_condition:
type : "AWS::CloudFormation::WaitCondition"
type : AWS::CloudFormation::WaitCondition
depends_on:
- kube_master
properties:
@ -126,36 +126,27 @@ resources:
# configuration necessary to make this go.
fixed_network:
type : "OS::Neutron::Net"
type : OS::Neutron::Net
# This is the subnet on which we will deploy our server.
fixed_subnet:
type : "OS::Neutron::Subnet"
type : OS::Neutron::Subnet
properties:
cidr : {get_param : fixed_network_cidr}
network_id:
get_resource : fixed_network
network : {get_resource : fixed_network}
dns_nameservers:
- get_param : dns_nameserver
- { get_param : dns_nameserver }
# create a router attached to the external network provided as a
# parameter to this stack.
extrouter:
type : "OS::Neutron::Router"
type : OS::Neutron::Router
properties:
external_gateway_info:
network:
get_param : external_network_id
network : {get_param : external_network}
# attached fixed_subnet to our extrouter router.
extrouter_inside:
type : "OS::Neutron::RouterInterface"
type : OS::Neutron::RouterInterface
properties:
router_id:
get_resource : extrouter
subnet_id:
get_resource:
fixed_subnet
router_id : {get_resource : extrouter}
subnet : {get_resource : fixed_subnet}
######################################################################
#
@ -163,9 +154,8 @@ resources:
# sorts.
#
# permit ssh access
secgroup_base:
type : "OS::Neutron::SecurityGroup"
type : OS::Neutron::SecurityGroup
properties:
rules:
- protocol : icmp
@ -173,9 +163,8 @@ resources:
port_range_min : 22
port_range_max : 22
# open ports for kubernetes and etcd
secgroup_kubernetes:
type : "OS::Neutron::SecurityGroup"
type : OS::Neutron::SecurityGroup
properties:
rules:
- protocol : tcp
@ -198,14 +187,14 @@ resources:
#
write_heat_params:
type : "OS::Heat::SoftwareConfig"
type : OS::Heat::SoftwareConfig
properties:
group : ungrouped
config:
str_replace:
template : {get_file : fragments/write-heat-params-master.yaml}
params:
"$MINION_ADDRESSES": {"Fn::Join": [ "," , {get_attr : [ kube_minions, kube_ node _ip]}]}
"$MINION_ADDRESSES": {"Fn::Join": [ "," , {get_attr : [ kube_minions, kube_ minion _ip]}]}
"$KUBE_ALLOW_PRIV": {get_param : kube_allow_priv}
"$WAIT_HANDLE": {get_resource : master_wait_handle}
"$FLANNEL_NETWORK_CIDR": {get_param : flannel_network_cidr}
@ -214,55 +203,55 @@ resources:
"$PORTAL_NETWORK_CIDR": {get_param : portal_network_cidr}
configure_kubernetes:
type : "OS::Heat::SoftwareConfig"
type : OS::Heat::SoftwareConfig
properties:
group : ungrouped
config : {get_file : fragments/configure-kubernetes-master.sh}
write_flannel_config:
type : "OS::Heat::SoftwareConfig"
type : OS::Heat::SoftwareConfig
properties:
group : ungrouped
config : {get_file : fragments/write-flannel-config.sh}
flannel_config_service:
type : "OS::Heat::SoftwareConfig"
type : OS::Heat::SoftwareConfig
properties:
group : ungrouped
config : {get_file : fragments/flannel-config.service.yaml}
enable_services:
type : "OS::Heat::SoftwareConfig"
type : OS::Heat::SoftwareConfig
properties:
group : ungrouped
config : {get_file : fragments/enable-services-master.sh}
kube_user:
type : "OS::Heat::SoftwareConfig"
type : OS::Heat::SoftwareConfig
properties:
group : ungrouped
config : {get_file : fragments/kube-user.yaml}
kube_examples:
type : "OS::Heat::SoftwareConfig"
type : OS::Heat::SoftwareConfig
properties:
group : ungrouped
config : {get_file : fragments/kube-examples.yaml}
cfn_signal:
type : "OS::Heat::SoftwareConfig"
type : OS::Heat::SoftwareConfig
properties:
group : ungrouped
config : {get_file : fragments/cfn-signal.sh}
disable_selinux:
type : "OS::Heat::SoftwareConfig"
type : OS::Heat::SoftwareConfig
properties:
group : ungrouped
config : {get_file : fragments/disable-selinux.sh}
coreos_params:
type : "OS::Heat::SoftwareConfig"
type : OS::Heat::SoftwareConfig
properties:
group : ungrouped
config:
@ -273,7 +262,7 @@ resources:
ssh_authorized_key : {get_param : ssh_authorized_key}
kube_master_init:
type : "OS::Heat::MultipartMime"
type : OS::Heat::MultipartMime
properties:
parts:
- config : {get_resource : disable_selinux}
@ -287,67 +276,55 @@ resources:
- config : {get_resource : cfn_signal}
- config : {get_resource : coreos_params}
######################################################################
#
# databases server. this sets up a Kubernetes server
#
kube_master:
type : "OS::Nova::Server"
type : OS::Nova::Server
depends_on:
- extrouter_inside
properties:
image:
get_param : server_image
flavor:
get_param : server_flavor
key_name:
get_param : ssh_key_name
image : {get_param : server_image}
flavor : {get_param : master_flavor}
key_name : {get_param : ssh_key_name}
user_data_format : RAW
user_data : {get_resource : kube_master_init}
networks:
- port:
get_resource : kube_master_eth0
- port : {get_resource : kube_master_eth0}
kube_master_eth0:
type : "OS::Neutron::Port"
type : OS::Neutron::Port
properties:
network_id:
get_resource : fixed_network
network : {get_resource : fixed_network}
security_groups:
- get_resource : secgroup_base
- get_resource : secgroup_kubernetes
- { get_resource : secgroup_base }
- { get_resource : secgroup_kubernetes }
fixed_ips:
- subnet_id:
get_resource : fixed_subnet
- subnet : {get_resource : fixed_subnet}
replacement_policy : AUTO
kube_master_floating:
type : "OS::Neutron::FloatingIP"
type : OS::Neutron::FloatingIP
depends_on:
- extrouter_inside
properties:
floating_network_id:
get_param : external_network_id
port_id:
get_resource : kube_master_eth0
floating_network : {get_param : external_network}
port_id : {get_resource : kube_master_eth0}
kube_minions:
type : "OS::Heat::ResourceGroup"
type : OS::Heat::ResourceGroup
depends_on:
- extrouter_inside
properties:
count : {get_param : number_of_minions}
removal_policies : [ {resource_list : {get_param : minions_to_remove}}]
resource_def:
type : kube node -coreos.yaml
type : kube minion -coreos.yaml
properties:
ssh_key_name : {get_param : ssh_key_name}
server_image : {get_param : server_image}
server_flavor: {get_param : server _flavor}
fixed_network _id : {get_resource : fixed_network}
fixed_subnet _id : {get_resource : fixed_subnet}
minion_flavor: {get_param : minion _flavor}
fixed_network : {get_resource : fixed_network}
fixed_subnet : {get_resource : fixed_subnet}
kube_master_ip : {get_attr : [ kube_master_eth0, fixed_ips, 0, ip_address]}
external_network _id : {get_param : external_network _id }
external_network : {get_param : external_network }
kube_allow_priv : {get_param : kube_allow_priv}
docker_volume_size : {get_param : docker_volume_size}
token : {get_param : token}
@ -359,7 +336,7 @@ outputs:
value : {get_attr : [ kube_master_floating, floating_ip_address]}
kube_minions:
value : {get_attr : [ kube_minions, kube_ node _ip]}
value : {get_attr : [ kube_minions, kube_ minion _ip]}
kube_minions_external:
value : {get_attr : [ kube_minions, kube_ node _external_ip]}
value : {get_attr : [ kube_minions, kube_ minion _external_ip]}