このプロジェクトについて
gemaal
Gemaal(オランダ語でポンプステーションの意味)は、共有Kubernetesテストクラスターの健康を維持するために設計されたオーケストレーションツールです。物理的なポンプステーションが水を継続的に排出してポルダーを乾燥させるのと同様に、Gemaalは古くなった一時的なインストールを自動的に検出し、クリーンアップすることでテストクラスターを利用可能に保ちます。これにより、一時的なテストテナントが蓄積され、他のユーザーの環境が劣化することを防ぎます。
コア哲学
・ノンブロッキングクリーンアップ:Gemaalは何もインストールしません。クライアントは自分で `helm upgrade --install` を実行します。サービスは使用されなくなったリソースのみをアンインストールおよびスイープします。サービスがダウンしてもクリーンアップは遅延するだけで、クライアントのインストールループをブロックすることはありません。
・シャドウモード:デフォルトでは、サービスはシャドウモード(`dryRun: true`)で実行されます。削除アクションの計画、報告、ログ記録は行いますが、明示的に有効にされるまで実行は行われません。これによりデプロイ時の安全性が確保され、オペレーターはライブリソースに影響を与える前にクリーンアップロジックを検証できます。
・レベルトリガードウォッチャー:サービスはcronのようなループで動作し、各ティックごとにクラスターの状態をゼロから再導出します。各ネームスペースで `helm list` を使用し、オペレーターが見ているものと同じ状況を取得し、リリースをアプリ+インフラストラクチャのリングペアにグループ化し、TTLラベルに基づくガベージコレクションルールを適用します。
三つの側面
1. `gemaal`(サービス):クラスター内のウォッチャーで、以下の責任があります。
・テストテナントのTTLハウスキーピング
・リングペア対応のティアダウン(アプリケーション後にインフラストラクチャがティアダウンされることを保証)
・孤立したアーティファクトのスイープ(例:S3サブツリー)
・6つのConnectRPC RPC(Plan、ListTenants、Checkout、Extend、Sweep、Resolve)を公開
・テナント、年齢、ティア、スイープ履歴を監視するウェブコンソールを提供
2. `gemaalctl`(CLI):以下のためのコマンドラインインターフェースです。
・アイデンティティエビデンスチェーンと解決されたテナントの確認(`whoami`)
・レジャーラベルがスタンプされたクライアントサイドのHelmインストール/アンインストールの管理
・ConnectRPCを介したサービスとのやり取り(プランニング、チェックアウト、テナントライフタイムの延長)
3. Goライブラリ:テストハーネスによってインポートされ、以下に使用されます。
・スタンディングテナントの解決
・テストスイートのフェーズ(ビルド、デプロイ、セットアップ、ティアダウン)のブラケット
・アイデンティティ解決と設定の読み込みの管理
主要機能
・テナントの隔離とアイデンティティ:`tenancy.truvity.io/tier` のようなティアラベルを使用して到達可能なネームスペースを特定します。`gemaal-system` のようなシステムネームスペースは無視されます。アイデンティティは、メール、kubectlグループ、AWS SSOセッションを含むチェーンを通じて解決されます。
・ガベージコレクションルール
・最終アクティビティに基づく均一なTTL。テナントまたはティアごとに設定可能
・特定の保持ニーズに優先される `keep-until`
・アプリケーションが先にティアダウンされるリング順序のティアダウン
・グレース期間を過ぎた孤立したアーティファクトの収集
・認証と認可
・ミューテーションは、ワークロードの場合はKubernetes APIのTokenReview、人間の場合はOIDC JWTを介して認証されます。
・Checkout/Extendはオーナーまたは管理者権限が必要です。
・Sweep操作は管理者専用です。
・ウェブコンソール:バイナリに組み込まれたVite/React/MUIシングルページアプリケーションで、テナントの状態とスイープ履歴を視覚化するフリートコンソールスタックを提供します。
テストハーネスへの統合
プロジェクトは、`pkg/harness` ライブラリを使用してGoの統合テストにGemaalを組み込むことができます。ハーネスは`TestMain`でスタンディングテナントを一度解決し、専用のネームスペース内でテストを実行できるようにします。サービスはHelmリリースにスタンプされたラベルを介してクリーンアップを処理するため、テストスイート自体は(一時的なティアダウンフックを除いて)何も直接作成または削除しません。
`GEMAAL_TEST_SKIP_BUILD`、`GEMAAL_TEST_SKIP_DEPLOY`、`GEMAAL_TEST_KEEP`などの環境変数により、CI/CDパイプラインにおけるテストライフサイクルのきめ細かい制御が可能です。
AWSアクセス
サービスは、EKS Pod IdentityおよびIRSA(IAM Roles for Service Accounts)を含む標準的なAWS認証チェーンをサポートします。AWS Systems Manager(SSM)との連携によりアーティファクトストレージを行い、STSおよびポッドアイデンティティエンドポイントに対する適切な権限が必要です。
開発
・ツールチェーン:タスク管理に[devbox](https://www.jetify.com/devbox/)と[just](https://just.systems/)を使用
・コマンド
・`just check`:ビルド、テスト、リンク、脆弱性チェックを実行
・`just generate`:Protobuf定義からコードを再生成
・`just run`:例の設定に対してサービススケルトンを実行
ステータス
プロジェクトは早期開発段階(G4フェーズ)です。設計、プロトサーフェス、クライアントライブラリ、CLI、サービスは整っています。サービスはまだ本番デプロイメントを見ておらず、初期デプロイメントはシャドウモードで行われます。クライアントAPIは実際に使用されていますが、0.xのマイナーバージョン間で変更される可能性があります。
ライセンス
MITライセンス
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.