新的对象模型的 LBaaS 驱动程序接口变更¶
包含您的 Launchpad 蓝图的 URL
https://blueprints.launchpad.net/neutron/+spec/lbaas-objmodel-driver-changes
即将到来的 Juno 版本的 LBaaS 对象模型和 API 变更将需要一些驱动程序接口变更,用于新的对象和向后兼容性。
新的接口包括 create_load_balancer(以及其余的 CRUD 操作)和 create_listener。Create_vip 将被移除,并将在旧版驱动程序的 shim 层中支持。M:N 健康监控关联也将被移除。
新的对象模型和 API 蓝图:https://blueprints.launchpad.net/neutron/+spec/lbaas-api-and-objmodel-improvement
此蓝图不涵盖新的 TLS 或 L7 功能的变更。
问题描述¶
随着即将到来的 LBaaS 对象模型和 API 变更,我们将需要新的接口用于后端负载均衡驱动程序,以及一个 shim 层,以便在弃用期间让旧版驱动程序继续工作。
提议的变更¶
加载驱动程序时,neutron 将确定它是一个新的对象模型驱动程序还是一个旧版驱动程序,并根据情况选择合适的实现/shim 类。
新的驱动程序接口方法将传递带有属性的对象,而不是像 icehouse 驱动程序那样传递字典。为了方便起见,最初这些对象将是标准的 neutron sqlalchemy 对象,但未来不保证完整的 sqlalchemy 功能。基本的属性和依赖对象查找将长期支持。
新的驱动程序接口将由实现 create、update 和 delete 方法的处理器类组成。示例,可能会更改
sample_driver.py
class SampleDriver(LoadBalancerAbstractDriver):
def __init__(self):
self.load_balancer = MyLoadBalancerManager(self)
self.listener = MyListener(self)
self.member = ef.MemberHandler(self)
self.stats = xyz.foo.StatsGatherer(self)
self.health_monitor = HMHandler(self)
class MyLoadBalancerManager(BaseManager):
def __init__(self, driver):
self.driver = driver
def create(self, context, lb_obj):
print("create")
def update(self, context, lb_obj):
print("update")
def delete(self, context, lb_obj):
print("delete")
支持的驱动程序处理器:* load_balancer * listener * pool * member * health_monitor * stats
以下旧版驱动程序方法将被转换/支持。每个方法旁边的注释说明了与现有行为的不同之处。
create_vip - 上述一个 load_balancer 和 listener 对象的组合。
update_vip
delete_vip
create_pool - 首先创建的对象
update_pool
delete_pool
stats
create_member
update_member
delete_member
update_pool_health_monitor
create_pool_health_monitor
delete_pool_health_monitor
旧版驱动程序 shim 的限制
负载均衡器上不支持多个 listener。
listener 上不支持多个 pool。
不支持健康监控的多对多关联。
不支持 member 对象上的子网 ID。
驱动程序中断
在相关驱动程序(embrane、radware)的维护者更新驱动程序之前,对 ldb.Vip 的一些引用将会中断。这些驱动程序的测试将被暂时禁用,直到修复为止。
备选方案¶
对于驱动程序的向后兼容 shim 层,一种建议的替代方案是创建一个完全独立的新 LBaaS 扩展/插件,使用完全独立的数据库表,并让两者同时存在。这将涉及重复的驱动程序和数据库表。我们决定不使用这种方法,并且 lbaas api/驱动程序变更的通用实施计划
使用在旧模型和新模型之间具有合并字段的数据库表创建新的 LBaaS 扩展。
更改旧扩展的前端以“转换”为对新模型的操作。
更改驱动程序以使用新模型。
从数据库中弃用/删除未使用的旧模型字段。
弃用/删除旧前端。
数据模型影响¶
无,请参阅对象模型蓝图。
REST API 影响¶
无,请参阅对象模型蓝图。
安全影响¶
无,与当前驱动程序实现相同的影响。
通知影响¶
无。
其他最终用户影响¶
无。
性能影响¶
无,与当前驱动程序实现相同的影响。
其他部署者影响¶
升级到新的 LBaaS 将涉及数据库迁移;请参阅对象模型蓝图。旧版 LBaaS 驱动程序将继续工作,除非尝试将多个 listener 添加到负载均衡器,否则将失败。
开发人员影响¶
当前的 LBaaS 驱动程序维护者最终需要更新他们的驱动程序以使用新的接口。
实现¶
负责人¶
工作项¶
修改驱动程序上方的层以调用新的入口点。
修改驱动程序上方的层以调用旧版驱动程序接口方法,用于旧版驱动程序,并根据需要转换新的对象模型。
带有新接口的新 abstract_driver。
更新参考 haproxy 驱动程序将在另一个蓝图中进行。
依赖项¶
测试¶
针对旧版驱动程序的现有测试将继续通过,除非测试 M:N 健康监控关系。
当更新参考驱动程序时,将添加用于新入口点的测试。
如“提议的变更”中所述的损坏的驱动程序将导致测试被禁用,直到驱动程序修复为止。
文档影响¶
无。