2022-03-30 设计k8s的redis-operator中的controller的设计模式
2023-09-27 14:25:42 时间
目录
需要注意k8s-apis向注册者广播事件, 需要使用双向通信
摘要:
operator中的controller是一个非常好的设计模式的淬炼对象, 本文对其中有意思的设计做一些记录.
设计思想:
一. 观察者模式
主要表现在informs与k8s-apis的交互上
- 第一步先使用list拿到所有的资源类型
- 第二步使用watch,向k8s-apis的etcd注册监听事件
- 第三步, 当k8s的etcd的资源有所变化, 则利用etcd的watch机制对注册者进行广播
需要注意k8s-apis向注册者广播事件, 需要使用双向通信
- 直接使用socket, 变体websocket. socket的双向通道是由两个单向通道组合而成
- 利用http的chrunk流传输功能, 持续不断的的响应
二. 状态器模式
主要为controller中对CRD资源的持续检测
- CRD资源在某一时刻只能存在一个特定的状态
- 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
}
相关文章
- Redis学习秘籍
- 41分布式电商项目 - 关于Redis的几个问题
- 38分布式电商项目 - Linux下安装Redis
- Redis 6.0多线程介绍
- ubuntu 18.04 安装 Redis-server
- Kubernetes(K8s)(五)——在K8s集群上搭建redis和docker的留言簿
- Redis缓存相关问题总结
- redis缓存击穿、缓存穿透、缓存雪崩解决方案
- 大数据学习——本地安装redis
- Redis分布式锁
- Redis实战之Redisson使用技巧详解
- Redis_Spring与Jedis的集成
- Redis__WindowsServer主从服务部署及调用实例
- Keepalived+Redis高可用部署(第二版)
- 【Redis】Redis 是如何保证高可用的?(背诵版)