CRDとReconcileでテトリスするKubernetesのCustom Controllerを作った
テトリスするCustom Controllerを作りました。(正確に言うと「テトリスに似た何か」です)
単にテトリスをアプリとしてKubernetesクラスター上に載せるわけではなく、(無駄に)Custom Resourceにフィールドの状態などの情報を保存しReconcileで情報を更新することでテトリスを実装したものになります。T4s
というリソースをデプロイすることで遊べます(詳しくはREADME参照)。
マニフェストの例:
apiVersion: t4s.tkna.net/v1 kind: T4s metadata: name: t4s-sample spec: width: 11 height: 20 wait: 1000 nodePort: 30080
アーキテクチャ
t4s/design.md at master · tkna/t4s · GitHub
こんな感じのアーキテクチャで、複数のControllerが連携してピタゴラスイッチしています。特にBoard
はフィールドの情報や現在操作対象のブロックの位置情報等を持っていて、何か動きがある度にそれをReconcileで書き換えています。もはや冪等性とは?という感じですが、最終的にはGameOverというステートに落ち着くので長い目で見たら冪等と言えるかもしれません(?)
メトリクス
スコア(消した行数)はメトリクスとして見ることができます。
注意点
- 簡単のため、1 namespaceにつき
T4s
は1つのみにしています。 - 操作に若干のタイムラグがあるかもしれませんが、基本的に非同期に処理をしているのと、その他いろいろ無理をしているので大目に見てください。
- Custom Resourceをかなり高頻度で読み取り/更新します。特に、たくさんのnamespaceに
T4s
をデプロイすると動作速度が低下するか動かなくなると思いますのでご注意下さい。
参考
下記ページや書籍を参考にさせていただきました。