An open API service indexing awesome lists of open source software.

https://github.com/strrl/sample-controller-rabbit


https://github.com/strrl/sample-controller-rabbit

Last synced: about 1 month ago
JSON representation

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

- 在兔子数量少于期望值的时候, 会找出适婚年龄的兔子来繁衍.
- "埋葬" 死亡的兔子.