関連記事: Monedula GitOps — CLI と Kubernetes のための宣言的な Kafka 管理 では、
v0.1.0リリース、リソースモデル、基本的なワークフローを紹介しています。
なぜ
Kafka の設定が一か所にまとまっていることは、めったにありません。トピックは あるスクリプトから、ACL は別のスクリプトから、スキーマはアプリケーションの パイプラインから、クォータは管理者から、Confluent RBAC のロールバインディング はさらに別のツールから生まれます。時間が経つと、稼働中のクラスタだけが システムの唯一の信頼できる記述になります — 意図して書かれたものでも、 レビューできるものでもない記述が。
monedula-gitops は、その記述を明示的なものにします。あるべき Kafka の状態を
Git に記述し、コードと同じようにレビューし、稼働中のクラスタと比較し、
クラスタをその状態へ収束させます。
Kafka はトピックだけではないので、モデルはふつう一緒に扱われるリソース — アクセスルール、コンシューマーグループ、クォータ、スキーマ、認証情報、そして Confluent Platform ではロールバインディング — までをカバーします。
1 つのモデル、2 つのランタイム
CLI と Kubernetes オペレーターは、同じリソースモデルと同じリコンサイル エンジンを使います。
- CLI — 開発マシンや CI/CD パイプラインから、マニフェストを検証し、
差分を取り、適用し、確認します。
verifyはドリフトを見つけると 0 以外の 終了コードを返すので、CI のゲートとして機能します。 - オペレーター — 同じ Kubernetes スタイルのリソースを CRD として インストールし、クラスタ内で継続的にリコンサイルします。
認証情報の与え方はランタイムごとに異なります — CLI では環境変数やファイルの 参照、オペレーターでは Kubernetes の Secret です — が、あるべき状態、 ドリフトのルール、実行のセマンティクスは一貫しています。チームはまず パイプライン駆動の変更から始め、2 つ目の設定モデルを設計することなく、 後からオペレーターを導入できます。
管理できるもの
KafkaCluster(接続、認証、デフォルト値、Schema Registry、任意の Confluent
MDS)、KafkaTopic(ライフサイクル、パーティション、設定、トピックローカルな
アクセス、スキーマ)、KafkaAccessPolicy(高度な、あるいは共有される ACL
ルール)、KafkaQuota(ユーザー、client-id、IP のクォータ)、KafkaUser
(SCRAM 認証情報)、KafkaRoleBinding(Confluent MDS/RBAC)。
よくあるケースは小さいままです。トピックとその利用を許可されたアプリケーション は 1 つのマニフェストに収まり、対応するトピックとコンシューマーグループの ACL はそこから生成されます。
apiVersion: gitops.monedula.dev/v1alpha1
kind: KafkaTopic
metadata:
name: orders
spec:
clusterRef:
name: prod
topicName: orders
partitions: 6
access:
producers:
- principal: User:svc-checkout
consumers:
- principal: User:svc-fraud
group: fraud-orders
インストール
brew install monedula-dev/tap/monedula-gitops
go install、GitHub リリースのビルド済みバイナリ、
ghcr.io/monedula-dev/monedula-gitops のコンテナイメージも利用できます。
オペレーターは Helm で oci://ghcr.io/monedula-dev/charts/monedula-gitops
からインストールします。
既存クラスタから始める
現実の環境が空であることはまずないので、import cluster は現在の Kafka の
状態を読み取り、そこからマニフェストを生成します — トピック、アクセスルール、
クォータ、スキーマ、SCRAM ユーザー、そしてサポートされている場合は Confluent
RBAC のロールバインディングまで。大事なのはラウンドトリップです。インポート
したディレクトリを同じクラスタに対して検証すると、ドリフトは報告されないはず
です。
リスクのある操作にはガードがかかっており、削除とプルーニングは明示的に 有効化しないと実行されません。リポジトリには、実行できるクイックスタートが 2 つ(Docker Compose の CLI プレイグラウンドと、ローカル Kubernetes 上の オペレーターのプレイグラウンド)と、25 個の自己完結したシナリオのカタログが 入っています。