https://github.com/strrl/sample-controller-rabbit
https://github.com/strrl/sample-controller-rabbit
Last synced: about 1 month ago
JSON representation
- Host: GitHub
- URL: https://github.com/strrl/sample-controller-rabbit
- Owner: STRRL
- Created: 2020-02-29T09:28:35.000Z (about 5 years ago)
- Default Branch: master
- Last Pushed: 2020-03-09T05:05:27.000Z (about 5 years ago)
- Last Synced: 2025-03-19T08:46:06.990Z (about 1 month ago)
- Language: Go
- Size: 58.6 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.MD
Awesome Lists containing this project
README
# sample-controller-rabbit
## 前言
最近在学习 k8s 中 CRD, controller 相关的东西, 但是又接触不到项目, 没有什么可以值得真正上手写一写的东西.
所以自己想了一个这个叫做 sample-controller-rabbit 的项目, 利用 kubernetes controller 的一些特性, 来做一些有意思(无聊)的事情.
## 设定
在一个假设的只有兔子的世界(CRD, rabbit-world)中, 生活着一群可爱的兔子(CRD rabbit), 兔子在这个世界中生活, 繁衍, 死亡.
兔子以兔子窝(CRD rabbit hole)为单位分批生存, 兔子窝可以理解为一个家庭. 同一个窝里面有父(1)母(1)以及孩子(0..n).
兔子有以下几个属性:
- 名字
- 性别
- 第 n 代兔子窝有以下几个属性:
- 名字
规则:
- 世界最开始有一个兔子窝(eden), 里面有两只兔子(adam eve).
- 现实世界每过一分钟, 视为兔子的年龄增加 1.
- 兔子窝中的父母会每增加 1 年龄, 生一批新兔子.
- 年龄合适(值域[3, 6])的两只异性兔子会选择建立新的兔子窝, 并繁育后代.
- 兔子每次繁衍后代会增加[2, 4]只新的兔子, 性别比例 1:1.
- 当种群数量超过某个阈值时, 兔子的繁衍欲望会为 0, 不再有新的兔子产生.
- 当兔子大于 12 岁时, 兔子会以 ( 当前年龄 - 12 ) / 12 的几率死亡.## 设计与实现
我想要的效果是设定一个兔子种群数量的预期值, 然后兔子们以某种规则慢慢 scale 到预期的数量.
而且兔子也并不是稳定的, 随时有兔子死亡.
### 兔子
兔子要有一个 POD, 提供 WEB 服务, 输出自己的状态. 并在自己死亡的时候 kill 掉自己.
兔子的属性以及繁衍欲望等相关的数据通过 Downward API 交给兔子得知.
### 上帝 controller
- 在兔子数量少于期望值的时候, 会找出适婚年龄的兔子来繁衍.
- "埋葬" 死亡的兔子.