[suse] add support of LBaaS v2

Add support of LBaaS v2 to suse k8s driver.
This patch also allows suse k8s cluster to be created
without enabling LBaaS.

Change-Id: I5de4059aa1185973be1c556a4b7565c62f76f9f9
Partial-Bug: #1622949
This commit is contained in:
yatin 2016-10-13 12:59:25 +05:30
parent 29ca630978
commit c00d197954
3 changed files with 95 additions and 30 deletions

View File

@ -16,6 +16,7 @@ import os
import magnum.conf import magnum.conf
from magnum.drivers.common import k8s_template_def from magnum.drivers.common import k8s_template_def
from magnum.drivers.common import template_def
CONF = magnum.conf.CONF CONF = magnum.conf.CONF
@ -49,6 +50,12 @@ class JeOSK8sTemplateDefinition(k8s_template_def.K8sTemplateDefinition):
extra_params=extra_params, extra_params=extra_params,
**kwargs) **kwargs)
def get_env_files(self, cluster_template):
if cluster_template.master_lb_enabled:
return [template_def.COMMON_ENV_PATH + 'with_master_lb.yaml']
else:
return [template_def.COMMON_ENV_PATH + 'no_master_lb.yaml']
@property @property
def template_path(self): def template_path(self):
return os.path.join(os.path.dirname(os.path.realpath(__file__)), return os.path.join(os.path.dirname(os.path.realpath(__file__)),

View File

@ -354,49 +354,89 @@ resources:
# load balancers. # load balancers.
# #
api_loadbalancer:
type: Magnum::Optional::Neutron::LBaaS::LoadBalancer
properties:
vip_subnet: {get_resource: fixed_subnet}
api_listener:
type: Magnum::Optional::Neutron::LBaaS::Listener
properties:
loadbalancer: {get_resource: api_loadbalancer}
protocol: {get_param: loadbalancing_protocol}
protocol_port: {get_param: kubernetes_port}
api_pool:
type: Magnum::Optional::Neutron::LBaaS::Pool
properties:
lb_algorithm: ROUND_ROBIN
listener: {get_resource: api_listener}
protocol: {get_param: loadbalancing_protocol}
api_monitor: api_monitor:
type: OS::Neutron::HealthMonitor type: Magnum::Optional::Neutron::LBaaS::HealthMonitor
properties: properties:
type: TCP type: TCP
delay: 5 delay: 5
max_retries: 5 max_retries: 5
timeout: 5 timeout: 5
pool: { get_resource: api_pool }
api_pool:
type: OS::Neutron::Pool
properties:
protocol: {get_param: loadbalancing_protocol}
monitors: [{get_resource: api_monitor}]
subnet: {get_resource: fixed_subnet}
lb_method: ROUND_ROBIN
vip:
protocol_port: {get_param: kubernetes_port}
api_pool_floating: api_pool_floating:
type: OS::Neutron::FloatingIP type: Magnum::Optional::Neutron::FloatingIP
depends_on: depends_on:
- extrouter_inside - extrouter_inside
properties: properties:
floating_network: {get_param: external_network} floating_network: {get_param: external_network}
port_id: {get_attr: [api_pool, vip, port_id]} port_id: {get_attr: [api_loadbalancer, vip_port_id]}
etcd_loadbalancer:
type: Magnum::Optional::Neutron::LBaaS::LoadBalancer
properties:
vip_subnet: {get_resource: fixed_subnet}
etcd_listener:
type: Magnum::Optional::Neutron::LBaaS::Listener
properties:
loadbalancer: {get_resource: etcd_loadbalancer}
protocol: HTTP
protocol_port: 2379
etcd_pool:
type: Magnum::Optional::Neutron::LBaaS::Pool
properties:
lb_algorithm: ROUND_ROBIN
listener: {get_resource: etcd_listener}
protocol: HTTP
etcd_monitor: etcd_monitor:
type: OS::Neutron::HealthMonitor type: Magnum::Optional::Neutron::LBaaS::HealthMonitor
properties: properties:
type: TCP type: TCP
delay: 5 delay: 5
max_retries: 5 max_retries: 5
timeout: 5 timeout: 5
pool: { get_resource: etcd_pool }
etcd_pool: ######################################################################
type: OS::Neutron::Pool #
# resources that expose the IPs of either the kube master or a given
# LBaaS pool depending on whether LBaaS is enabled for the cluster.
#
api_address_lb_switch:
type: Magnum::ApiGatewaySwitcher
properties: properties:
protocol: HTTP pool_public_ip: {get_attr: [api_pool_floating, floating_ip_address]}
monitors: [{get_resource: etcd_monitor}] pool_private_ip: {get_attr: [api_loadbalancer, vip_address]}
subnet: {get_resource: fixed_subnet} master_public_ip: {get_attr: [kube_masters, resource.0.kube_master_external_ip]}
lb_method: ROUND_ROBIN master_private_ip: {get_attr: [kube_masters, resource.0.kube_master_ip]}
vip:
protocol_port: 2379 etcd_address_lb_switch:
type: Magnum::ApiGatewaySwitcher
properties:
pool_private_ip: {get_attr: [etcd_loadbalancer, vip_address]}
master_private_ip: {get_attr: [kube_masters, resource.0.kube_master_ip]}
###################################################################### ######################################################################
# #
@ -414,7 +454,7 @@ resources:
type: kubemaster.yaml type: kubemaster.yaml
properties: properties:
api_public_address: {get_attr: [api_pool_floating, floating_ip_address]} api_public_address: {get_attr: [api_pool_floating, floating_ip_address]}
api_private_address: {get_attr: [api_pool, vip, address]} api_private_address: {get_attr: [api_loadbalancer, vip_address]}
ssh_key_name: {get_param: ssh_key_name} ssh_key_name: {get_param: ssh_key_name}
server_image: {get_param: server_image} server_image: {get_param: server_image}
master_flavor: {get_param: master_flavor} master_flavor: {get_param: master_flavor}
@ -468,8 +508,8 @@ resources:
fixed_network: {get_resource: fixed_network} fixed_network: {get_resource: fixed_network}
fixed_subnet: {get_resource: fixed_subnet} fixed_subnet: {get_resource: fixed_subnet}
network_driver: {get_param: network_driver} network_driver: {get_param: network_driver}
kube_master_ip: {get_attr: [api_pool, vip, address]} kube_master_ip: {get_attr: [api_address_lb_switch, private_ip]}
etcd_server_ip: {get_attr: [etcd_pool, vip, address]} etcd_server_ip: {get_attr: [etcd_address_lb_switch, private_ip]}
external_network: {get_param: external_network} external_network: {get_param: external_network}
kube_allow_priv: {get_param: kube_allow_priv} kube_allow_priv: {get_param: kube_allow_priv}
docker_volume_size: {get_param: docker_volume_size} docker_volume_size: {get_param: docker_volume_size}
@ -502,7 +542,7 @@ outputs:
str_replace: str_replace:
template: api_ip_address template: api_ip_address
params: params:
api_ip_address: {get_attr: [api_pool_floating, floating_ip_address]} api_ip_address: {get_attr: [api_address_switch, public_ip]}
description: > description: >
This is the API endpoint of the Kubernetes server. Use this to access This is the API endpoint of the Kubernetes server. Use this to access
the Kubernetes API from outside the cluster. the Kubernetes API from outside the cluster.

View File

@ -85,10 +85,12 @@ parameters:
api_public_address: api_public_address:
type: string type: string
description: Public IP address of the Kubernetes master server. description: Public IP address of the Kubernetes master server.
default: ""
api_private_address: api_private_address:
type: string type: string
description: Private IP address of the Kubernetes master server. description: Private IP address of the Kubernetes master server.
default: ""
http_proxy: http_proxy:
type: string type: string
@ -156,6 +158,20 @@ resources:
handle: {get_resource: master_wait_handle} handle: {get_resource: master_wait_handle}
timeout: {get_param: wait_condition_timeout} timeout: {get_param: wait_condition_timeout}
######################################################################
#
# resource that exposes the IPs of either the kube master or the API
# LBaaS pool depending on whether LBaaS is enabled for the bay.
#
api_address_switch:
type: Magnum::ApiGatewaySwitcher
properties:
pool_public_ip: {get_param: api_public_address}
pool_private_ip: {get_param: api_private_address}
master_public_ip: {get_attr: [kube_master_floating, floating_ip_address]}
master_private_ip: {get_attr: [kube_master_eth0, fixed_ips, 0, ip_address]}
###################################################################### ######################################################################
# #
# software configs. these are components that are combined into # software configs. these are components that are combined into
@ -282,17 +298,19 @@ resources:
port_id: {get_resource: kube_master_eth0} port_id: {get_resource: kube_master_eth0}
api_pool_member: api_pool_member:
type: OS::Neutron::PoolMember type: Magnum::Optional::Neutron::LBaaS::PoolMember
properties: properties:
pool_id: {get_param: api_pool_id} pool: {get_param: api_pool_id}
address: {get_attr: [kube_master_eth0, fixed_ips, 0, ip_address]} address: {get_attr: [kube_master_eth0, fixed_ips, 0, ip_address]}
subnet: { get_param: fixed_subnet }
protocol_port: {get_param: kubernetes_port} protocol_port: {get_param: kubernetes_port}
etcd_pool_member: etcd_pool_member:
type: OS::Neutron::PoolMember type: Magnum::Optional::Neutron::LBaaS::PoolMember
properties: properties:
pool_id: {get_param: etcd_pool_id} pool: {get_param: etcd_pool_id}
address: {get_attr: [kube_master_eth0, fixed_ips, 0, ip_address]} address: {get_attr: [kube_master_eth0, fixed_ips, 0, ip_address]}
subnet: { get_param: fixed_subnet }
protocol_port: 2379 protocol_port: 2379
outputs: outputs: