Kafka on KubernetesのStrimziConから新機能を解説するセッションを紹介
StrimziCon 2024のセッションから、LittleHorseというクラウドサービスのベンチャーがマルチテナンシーをStrimziで実装した経験を解説したセッションを紹介する。登壇したのはLittleHorseの創業者であるColt McNealy氏だ。
動画は以下のURLから参照可能だ。
●動画:Partial Multi-Tenancy on Kafka Using Strimzi at LittleHorse
タイトルは「Partial Multi-Tenancy on Kafka Using Strimzi at LittleHorse」、Strimziを使ってマルチテナンシーを実装したユースケースの解説だ。LittleHorseはKafkaをベースにしたワークローを使ったマイクロサービスアプリケーションのホスティングを行う会社で、ワークフローの実装にKubernetes上のKafkaを使っている。より詳細な情報はLittleHorseのドキュメントサイトに公開されているので参照して欲しい。
●LittleHorseの公式サイト:https://www.littlehorse.io/
●ドキュメントサイト:LittleHorse Overview
このセッションの目的は、Strimzi/Kafkaを使ってKafkaクラスターをマルチテナントで使えるかどうかを検証するというものだ。
このスライドでは、LittleHorseのユーザーからはそれぞれ個別のKafkaクラスターを使っているような体験をさせたいというゴールが提示されている。
しかしLittleHorseとしては、同じクラスター内に複数のユーザーを収納して提供することがリソースの有効活用と運用サイドの労力を削減するために必要だということが説明された。
そのために必要なポイントを以下に示した。
「トピックの管理」「暗号化」「アクセスコントロール」「ノイジーネイバー問題」そして「クラスターのリバランシングによるスムーズな運用」の5つが要点となる。この内、暗号化とアクセスコントロールは同時に解決できることがこの後、解説された。冒頭に「Peace、Freedom、Justice、Security」というコンセプトが挙げられていたが、それらを上記の5つで実現したいというのがMcNealy氏の意図だ。
この後に何度も出てくる「KafkaのCLIで実現できるがそれは避けたい」という発想は、別のセッションで解説されたUnidirectional Topic Operatorと同じだろう。要するにKubernetesに沿った運用方法を行うためにはコントロールプレーン、つまり指示系統が必ずKubernetesからKafkaに向かう一方向だけにしたいという発想だ。
このオペレータによってKafkaのトピックの作成などがカスタムリソースを使って行えるようになり、Kubernetes→Kafkaの一方向になる。
この操作が一方向だけになることにより、GitHubで宣言的に必要な環境定義を行い、それをArgoCDなどのツール経由でKafkaを操作するというクラウドネイティブな運用方法が可能になる。
暗号化については、複数のユーザーが共存するというマルチテナンシーが目指すゴールであれば、アプリケーション間だけではなく他のさまざまな部分においても必要となる。そして当然だが、アクセスコントロールについても同様にマルチテナンシーを目指した機能が必要になることを説明した。
またアクセスコントロールについても、KafkaのユーザーのACLにプレフィックスを追加することで疑似的に分離させることが可能になることを説明した。いわゆるRole Based Access Controlとは異なるが、より簡易に行うための選択だ。
その他の機能として認証の部分について説明。StrimziからKeycloakを使う例は日立製作所のエンジニアが解説している記事を参照されたい。
●参考:コンテナ上のマイクロサービスの認証強化 ~StrimziとKeycloak~
またStrimziのブログ記事でもKeycloakを使った認証が解説されている。
●参考:Kafka authentication using OAuth 2.0
マルチテナンシーを実装する際の必要な機能の最後の部分としてバランシング問題を解説。その前提として、CPUタイムやストレージなどについては個別にクォータを設定することができないというKafkaの限界を説明した。
またクォータが設定できたとしても、クラスターのブローカーがアンバランスの状態であれば、意味がないとして、次のスライドを例として挙げた。
この状態になった場合、より良い状態はブローカーの保持するパーティションが均等に配分されることであると説明。実際にマニフェストの表記を見せて解説を行った。
リバランスを実現するためにはいくつかの選択肢があると説明したが、その中からLittleHorseが選択したのはCruise-ControlというLinkedInが開発し、公開しているオペレータだ。
●参考:https://github.com/linkedin/cruise-control
スライドではFancy Kubernetes Operatorとして表現されているが、LinkedInが巨大なKafkaクラスターの運用に使っているCruise-Controlの実績は大きいだろう。
StrimziはKafkaをKubernetes上で実装するためのオペレータであるために、すべての操作や運用のための発想がKubernetesメインになるのは自然だろう。ZooKeeperを廃止してKRaftに移行するのも、運用が難しいKafkaをKubernetesに任せるためには正しい方向性だ。マルチテナンシーについてはまだ改善の余地がありそうだが、LittleHorseのやり方は参考になると思われる。
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- StrimziCon 2024番外編、KafkaのリバランスをKubernetesのオペレータで実行するCruise Controlを紹介
- Kafka on KubernetesのStrimziConから新機能を解説するセッションを紹介
- Kafka on Kubernetesを実現するStrimziに特化したカンファレンスStrimziCon 2024からキーノートを紹介
- StrimziCon 2024からブラジルのネットバンクにおけるKafkaクラスター移行のセッションを紹介
- コンテナ上のマイクロサービスの認証強化 ~StrimziとKeycloak~
- KubeCon Europe前日のプレカンファレンスKubeSec Enterprise Summit
- KubeCon EU 2021でRed Hatが発表した複数のKubernetesを制御するkcpを紹介
- RustとWASMで開発されKubernetesで実装されたデータストリームシステムFluvioを紹介
- 「kind」でローカル環境にKubernetesクラスターを構築する
- KubeCon North America:座談会で見えてきた退屈なKubernetesの次の世界