# Operation API

## Architecture:
![image](https://github.com/tidbcloud/operationlet/blob/master/docs/img/img.png)

OperationLet 类似 Kubelet, 部署在 Shoot 内, 它会通过 controller-runtime 监听 Infra API, 等待管控面的请求, 并且会使用 label predictor 减少监听对象数量.
Operation API 需要完成几个操作:
1. 约定好的动作, 如 Pod 重启, PD 执行某些特定命令, 定义为 OperationCommandJob
2. 直接对 PD, TiDB, TiKV 的 API 进行反代, 允许支持同学进行某些自定义操作(可以参考 dashboard 的 debug page), 定义为 OperationProxyService, 由 OperationLet 更新创建好的 Proxy 相关信息, 供上层访问.
Operation API 的审批机制如下:
1. 我们可以只管理白名单来进行审批, 白名单可以使我们不需要等待动作发生才审批, 审批可以理解为在一定时间内为某个人的某个操作进行授权.
2. 定义一个 OperationAuthorizeService CRD, 里面定义好身份, 权限, 动作, 时间, 之后创造的 OperationCommandJob, OperationProxyService 才会被执行, 否则会被无视.

后续如果支持 Diagnostic API, 我们还可以添加以下 CRD:
1. DiagnosticCollectorJob, 用于收集某些 diag 数据到存储侧.
2. DiagnosticAgentService, 用于创建诊疗的 Agent 到用户侧(例如 ngm 有了 agent 能力, clinic 有了 agent 需求)
