Add option to set listener timeouts for lb created by Kuryr
The timeout-client-data and timeout-member-data configurations for Octavia listeners default to 50 seconds for load balancers created by Kuryr. This patch allows the creation and modification of load balancers handled by Kuryr with different timeouts values. Implements: blueprint configure-lb-listeners-timeout Change-Id: I99016001c2263023d1fa2637d7b5aeb23b3b2d9d
This commit is contained in:
parent
10ea869858
commit
6e7dc1bcb5
|
@ -65,6 +65,9 @@ VAR_RUN_PATH=/var/run
|
|||
# KURYR_K8S_OCTAVIA_MEMBER_MODE=L2
|
||||
# KURYR_ENFORCE_SG_RULES=False
|
||||
# KURYR_LB_ALGORITHM=SOURCE_IP_PORT
|
||||
# Uncomment to modify listener client and member inactivity timeout.
|
||||
# KURYR_TIMEOUT_CLIENT_DATA=50000
|
||||
# KURYR_TIMEOUT_MEMBER_DATA=50000
|
||||
|
||||
|
||||
# Octavia LBaaSv2
|
||||
|
|
|
@ -41,9 +41,15 @@ enable_service neutron-tag-ports-during-bulk-creation
|
|||
# VAR_RUN_PATH=/var/run
|
||||
|
||||
# OCTAVIA
|
||||
# =======
|
||||
# Uncomment it to use L2 communication between loadbalancer and member pods
|
||||
# KURYR_K8S_OCTAVIA_MEMBER_MODE=L2
|
||||
|
||||
# Uncomment to modify Octavia loadbalancer listener client and member
|
||||
# inactivity timeout.
|
||||
# KURYR_TIMEOUT_CLIENT_DATA=50000
|
||||
# KURYR_TIMEOUT_MEMBER_DATA=50000
|
||||
|
||||
# Octavia LBaaSv2
|
||||
LIBS_FROM_GIT+=python-octaviaclient
|
||||
enable_plugin octavia https://opendev.org/openstack/octavia
|
||||
|
@ -233,7 +239,7 @@ enable_service kuryr-daemon
|
|||
# Uncomment the next line to force devstack to create a new router for kuryr
|
||||
# networks instead of using the default one being created by devstack
|
||||
# KURYR_NEUTRON_DEFAULT_ROUTER = kuryr-router
|
||||
|
||||
|
||||
# Increase Octavia amphorae timeout so that the first LB amphora has time to
|
||||
# build and boot
|
||||
IMAGE_URLS+=",http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img"
|
||||
|
|
|
@ -485,6 +485,8 @@ function configure_neutron_defaults {
|
|||
iniset "$KURYR_CONFIG" octavia_defaults member_mode "$KURYR_K8S_OCTAVIA_MEMBER_MODE"
|
||||
iniset "$KURYR_CONFIG" octavia_defaults enforce_sg_rules "$KURYR_ENFORCE_SG_RULES"
|
||||
iniset "$KURYR_CONFIG" octavia_defaults lb_algorithm "$KURYR_LB_ALGORITHM"
|
||||
iniset "$KURYR_CONFIG" octavia_defaults timeout_client_data "$KURYR_TIMEOUT_CLIENT_DATA"
|
||||
iniset "$KURYR_CONFIG" octavia_defaults timeout_member_data "$KURYR_TIMEOUT_MEMBER_DATA"
|
||||
# Octavia takes a very long time to start the LB in the gate. We need
|
||||
# to tweak the timeout for the LB creation. Let's be generous and give
|
||||
# it up to 20 minutes.
|
||||
|
|
|
@ -60,6 +60,8 @@ OPENSHIFT_CNI_BINARY_URL=${OPENSHIFT_CNI_BINARY_URL:-https://github.com/containe
|
|||
KURYR_K8S_OCTAVIA_MEMBER_MODE=${KURYR_K8S_OCTAVIA_MEMBER_MODE:-L3}
|
||||
KURYR_ENFORCE_SG_RULES=${KURYR_ENFORCE_SG_RULES:-True}
|
||||
KURYR_LB_ALGORITHM=${KURYR_LB_ALGORITHM:-ROUND_ROBIN}
|
||||
KURYR_TIMEOUT_CLIENT_DATA=${KURYR_TIMEOUT_CLIENT_DATA:-50000}
|
||||
KURYR_TIMEOUT_MEMBER_DATA=${KURYR_TIMEOUT_MEMBER_DATA:-50000}
|
||||
|
||||
# Kuryr_ovs_baremetal
|
||||
KURYR_CONFIGURE_BAREMETAL_KUBELET_IFACE=${KURYR_CONFIGURE_BAREMETAL_KUBELET_IFACE:-True}
|
||||
|
|
|
@ -259,6 +259,14 @@ octavia_defaults = [
|
|||
"to the pool members. The options are: ROUND_ROBIN, "
|
||||
"LEAST_CONNECTIONS, SOURCE_IP and SOURCE_IP_PORT."),
|
||||
default='ROUND_ROBIN'),
|
||||
cfg.IntOpt('timeout_client_data',
|
||||
help=_("Frontend client inactivity timeout in milliseconds. "
|
||||
"Default: 50000."),
|
||||
default=50000),
|
||||
cfg.IntOpt('timeout_member_data',
|
||||
help=_("Backend member inactivity timeout in milliseconds. "
|
||||
"Default: 50000."),
|
||||
default=50000),
|
||||
]
|
||||
|
||||
cache_defaults = [
|
||||
|
|
|
@ -545,6 +545,8 @@ class LBaaSv2Driver(base.LBaaSDriver):
|
|||
return loadbalancer
|
||||
|
||||
def _create_listener(self, listener):
|
||||
timeout_client_data = CONF.octavia_defaults.timeout_client_data
|
||||
timeout_member_data = CONF.octavia_defaults.timeout_member_data
|
||||
request = {
|
||||
'name': listener['name'],
|
||||
'project_id': listener['project_id'],
|
||||
|
@ -552,6 +554,10 @@ class LBaaSv2Driver(base.LBaaSDriver):
|
|||
'protocol': listener['protocol'],
|
||||
'protocol_port': listener['port'],
|
||||
}
|
||||
if timeout_client_data != 50000:
|
||||
request['timeout_client_data'] = timeout_client_data
|
||||
if timeout_member_data != 50000:
|
||||
request['timeout_member_data'] = timeout_member_data
|
||||
self.add_tags('listener', request)
|
||||
lbaas = clients.get_loadbalancer_client()
|
||||
response = lbaas.create_listener(**request)
|
||||
|
|
|
@ -195,8 +195,8 @@ class TestLBaaSv2Driver(test_base.TestCase):
|
|||
# TODO(ivc): handle security groups
|
||||
m_driver._ensure_provisioned.return_value = expected_resp
|
||||
|
||||
resp = cls.ensure_listener(m_driver, loadbalancer,
|
||||
protocol, port)
|
||||
resp = cls.ensure_listener(
|
||||
m_driver, loadbalancer, protocol, port)
|
||||
|
||||
m_driver._ensure_provisioned.assert_called_once_with(
|
||||
loadbalancer, mock.ANY, m_driver._create_listener,
|
||||
|
@ -578,6 +578,41 @@ class TestLBaaSv2Driver(test_base.TestCase):
|
|||
self.assertEqual(listener, ret)
|
||||
self.assertEqual(listener_id, ret['id'])
|
||||
|
||||
def test_create_listener_with_different_timeouts(self):
|
||||
cls = d_lbaasv2.LBaaSv2Driver
|
||||
m_driver = mock.Mock(spec=d_lbaasv2.LBaaSv2Driver)
|
||||
lbaas = self.useFixture(k_fix.MockLBaaSClient()).client
|
||||
timeout_cli_data = 75000
|
||||
timeout_mem_data = 75000
|
||||
listener = {
|
||||
'name': 'TEST_NAME',
|
||||
'project_id': 'TEST_PROJECT',
|
||||
'loadbalancer_id': '00EE9E11-91C2-41CF-8FD4-7970579E5C4C',
|
||||
'protocol': 'TCP',
|
||||
'port': 5678
|
||||
}
|
||||
listener_id = 'A57B7771-6050-4CA8-A63C-443493EC98AB'
|
||||
|
||||
req = {
|
||||
'name': listener['name'],
|
||||
'project_id': listener['project_id'],
|
||||
'loadbalancer_id': listener['loadbalancer_id'],
|
||||
'protocol': listener['protocol'],
|
||||
'protocol_port': listener['port'],
|
||||
'timeout_client_data': timeout_cli_data,
|
||||
'timeout_member_data': timeout_mem_data}
|
||||
resp = o_lis.Listener(id=listener_id)
|
||||
lbaas.create_listener.return_value = resp
|
||||
CONF.set_override('timeout_client_data', 75000,
|
||||
group='octavia_defaults')
|
||||
CONF.set_override('timeout_member_data', 75000,
|
||||
group='octavia_defaults')
|
||||
|
||||
ret = cls._create_listener(m_driver, listener)
|
||||
lbaas.create_listener.assert_called_once_with(**req)
|
||||
self.assertEqual(listener, ret)
|
||||
self.assertEqual(listener_id, ret['id'])
|
||||
|
||||
def test_find_listener(self):
|
||||
lbaas = self.useFixture(k_fix.MockLBaaSClient()).client
|
||||
cls = d_lbaasv2.LBaaSv2Driver
|
||||
|
|
Loading…
Reference in New Issue