2022-03-30 设计k8s的redis-operator中的controller的设计模式

本文解析了Operator中的两种设计模式:观察者模式与状态器模式。观察者模式体现在informs与k8s-apis的交互上,通过双向通信实现资源变化的监听与广播。状态器模式用于Controller对CRD资源状态的持续检测与控制,确保资源状态符合预期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

摘要:

设计思想:

一. 观察者模式

主要表现在informs与k8s-apis的交互上

需要注意k8s-apis向注册者广播事件, 需要使用双向通信

二. 状态器模式

主要为controller中对CRD资源的持续检测

例如:


摘要:

operator中的controller是一个非常好的设计模式的淬炼对象, 本文对其中有意思的设计做一些记录.

设计思想:

一. 观察者模式

主要表现在informs与k8s-apis的交互上

  1. 第一步先使用list拿到所有的资源类型
  2. 第二步使用watch,向k8s-apis的etcd注册监听事件
  3. 第三步, 当k8s的etcd的资源有所变化, 则利用etcd的watch机制对注册者进行广播

需要注意k8s-apis向注册者广播事件, 需要使用双向通信

  1. 直接使用socket, 变体websocket. socket的双向通道是由两个单向通道组合而成
  2. 利用http的chrunk流传输功能, 持续不断的的响应

二. 状态器模式

主要为controller中对CRD资源的持续检测

  1. CRD资源在某一时刻只能存在一个特定的状态
  2. controller需要控制让CRD资源达到yaml文件描述的状态

例如:

需要在不同状态中控制行为

	switch instance.Status.InstanceStatus {
	case STATUS_ON_START:
		return r.ReconcileCheckSts(ctx, req, instance)
	case STATUS_IN_CHECK_DELETE:
		return r.ReconcileCheckDelete(ctx, req, instance)
	case STATUS_IN_PROCESS_DELETE:
		return r.ReconcileProcessDelete(ctx, req, instance)
	case STATUS_IN_CHECK_STS:
		return r.ReconcileCheckSts(ctx, req, instance)
	case STATUS_IN_CREATE_STS:
		return r.ReconcileInCreatekSts(ctx, req, instance)
	case STATUS_IN_CHECK_PODS:
		return r.ReconcileCheckPods(ctx, req, instance)
	case STATUS_IN_CHECK_SERVICE:
		return r.ReconcileCheckService(ctx, req, instance)
	case STATUS_IN_CREATE_SERVICE:
		return r.ReconcileInCreateService(ctx, req, instance)
	case STATUS_IN_CHECK_REDIS_HA:
		return r.ReconcileCheckRedisHA(ctx, req, instance)
	case STATUS_IN_CREATE_REDIS_HA:
		return r.ReconcileCheckRedisHA(ctx, req, instance)
	case STATUS_IN_FIX_REDIS_SERVER:
		return r.ReconcileCheckRedisHA(ctx, req, instance)
	case STATUS_IN_FORCE_REDO_POD:
		return r.ReconcileCheckRedisHA(ctx, req, instance)
	case STATUS_IN_CHECK_NORMAL:
		return r.ReconcileCheckNormal(ctx, req, instance)
	default:
		r.Logger.Info(fmt.Sprintf("ReconcileHandleStatus fail, unknow status: %d\n", instance.Status))
		return ctrl.Result{RequeueAfter: time.Second * TIME_INTERVAL_NORMAL}, nil
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟世者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值