第73节 一次大型的 review 现场:Generic event mechanism
❤️💕💕记录sealos开源项目的学习过程。k8s,docker和云原生的学习。Myblog:http://nsddd.top
[TOC]
why
最近网易 森哥 花了一个月多的时间终于把 Generic event mechanism 设计出来了,我赶紧去 review 了一下设计方案和代码,希望从中学习到设计精髓。
- issue:https://github.com/horizoncd/horizon/issues/147
- Google docs:https://docs.google.com/document/d/1kE_BMVr4sYucQiSOT8LdEObAsoOtkhL5TL0NhvsML4I/edit?usp=sharing
- PR:https://github.com/horizoncd/horizon/pull/155
设计思路
文档思路:
- Horizon发布下一批和发布完成时需要发送通知给用户
- 外部用户也需要更多的事件
需求分析:
- 用户使用自动发布功能,自动发布下一批和发布完成或者失败时,需要发送通知给发布的触发者。
- 外部需要Horizon提供更多的Webhook,比如上下线,重启等事件
事件分析:
Rollout
当rollouts发布下一批时,发送SetStepIndex事件
4h39m | Normal | SetStepIndex | rollout/bad2good-setweight-onlycheck-newrs | Set Step Index to 1 |
---|---|---|---|---|
- 当rollouts发布完成后,将发送SettingStableRS事件
4h39m | Normal | SettingStableRS | rollout/bad2good-setweight-onlycheck-newrs | Completed all steps |
---|---|---|---|---|
Argo Application
发布成功时,状态由Progressing转变为Healthy
17h | Normal | ResourceUpdated | application/horizon-cs-4-regression | Updated health status: Progressing -> Healthy |
---|---|---|---|---|
发布失败时,状态由Progressing变为Degraded
18h | Normal | ResourceUpdated | application/horizon-cs-4-regression | Updated health status: Progressing -> Degraded |
---|---|---|---|---|
发布下一批时,状态由Suspended转变为Progressing
15h | Normal | ResourceUpdated | application/for-argocd-dfldsflsj | Updated health status: Suspended -> Progressing |
---|---|---|---|---|
整体设计:
- Horizon中添加监听Event的逻辑,监听配置资源的Event,Horizon应该监听region表中所有启用的集群
- 将监听资源产生的Event写入数据库中
- Webhook job取出event,发送相应的Webhook
- 开发
ReleaseAdapter
组件,监听webhook,并发送通知给相关用户
Event | Description | Status |
---|---|---|
Generic event mechanism | Horizon listens to events on Kubernetes and supports sending related events through Webhooks | Designing |
PR 思路:
大致做了三件事:
- 添加 k8s event package 以 侦听 k8s 事件并将其写入数据库。
- 使用 informer 列出资源树中的所有 pod,大大减轻了 kube API 服务器的压力。
- 添加清理作业以定期清理 Webhook 日志和事件。
END 链接
✴️版权声明 © :本书所有内容遵循CC-BY-SA 3.0协议(署名-相同方式共享)©