如何部署多Flavor的Operator并保证Reconcile请求调度到对应实例
同Operator多实例部署的Reconcile请求分发方案
完全可以实现,仅需要对Operator的Reconcile逻辑做少量改造即可,具体落地步骤如下:
- 给每个Operator实例配置专属标识
部署Operator时,通过环境变量为每个实例注入对应的flavour值,比如flavour为foo的Operator的Deployment配置中添加如下参数:
flavour为env: - name: OPERATOR_FLAVOUR value: "foo"bar的实例对应修改value为bar即可。 - 新增Reconcile前置匹配逻辑
在Operator的Reconcile方法入口位置,先读取待处理CR的spec.cluster字段值,和自身的OPERATOR_FLAVOUR环境变量做校验:- 二者匹配时,正常执行后续的业务处理逻辑
- 二者不匹配时,直接终止本次Reconcile请求,返回正常响应即可,不对CR做任何修改
- 注意事项:你提供的CR示例中两个Traveller资源的
metadata.name完全相同,Kubernetes不允许同命名空间下存在同名、同API类型的资源,实际使用时请修改为不同名称,或者将两个CR部署在不同的命名空间下。
该方案改造成本极低,不需要修改CRD定义,也不需要引入额外的路由组件,完全靠Operator自身逻辑就能实现精准的请求分发,不会出现多实例争抢CR处理权限的问题。
内容的提问来源于stack exchange,提问作者Coyote
相关产品推荐
相关产品推荐

