Kubernetes リソース管理における GitOps 自動化と Porch の技術的考察

はじめに

Kubernetes は現代のクラウドネイティブアーキテクチャにおいて不可欠な技術であり、特に電信業界(Telco)では大規模なクラウド環境の運用管理が求められる。しかし、數千から數萬の Kubernetes クラスターを管理する際には、リソースの個別設定やテンプレートの統合、手動操作によるデプロイの課題が顕在化する。このような背景を踏まえ、GitOps と Kubernetes リソース管理を統合したソリューションとして、Google が開発した Porch が注目されている。本記事では、Porch の技術的特徴、GitOps との統合方法、および実際の運用における利點と課題を解説する。

Porch の技術的特徴と機能

Kubernetes リソース管理の課題

Cloud Run 環境において、大規模な Kubernetes クラスター管理には以下の課題が存在する:

  • スケーラビリティの問題:個々のクラスターに個別設定を施す必要があり、管理が複雑化する。
  • リソース制限:クラスターのリソース制約と、オープンソースプロジェクト、內部リポジトリ、サードパーティの Kubernetes マニフェストの統合が困難。
  • 手動操作の限界:大量のクラスターの設定やデプロイが手動で行われ、Git リポジトリのマージがボトルネックとなる。

Porch の設計と機能

Porch は、Kubernetes のスケーラビリティと GitOps の自動化を実現するためのツールであり、以下の主要な機能を提供する:

  • パッケージ管理:アップストリームとダウンストリームリポジトリをサポートし、パッケージの検索、CRUD操作、バージョン管理を可能にする。
  • パッケージ変體生成:関數チェーンとワイルドカードを用いて Kubernetes リソースを変體生成し、個別カスタマイズ可能なデプロイパッケージを生成。
  • 関數評価:Kubernetes リソース(KRM)に対して関數処理を行い、ハッシュマップやカスタムロジックをサポート。
  • 承認フロー:パッケージ提案とデプロイフローを提供し、Argo CD、Flux CD などの GitOps ツールと統合。
  • データの一貫性:Git と Porch のデータマッピングを最適化し、不一致を減少させ、解析効率を向上。

パフォーマンスとアーキテクチャの改善

  • 高速デプロイ:電信業界の短いメンテナンスウィンドウに対応し、バーストモードで大量のパッケージを短時間にデプロイ。
  • データベースストレージ:パッケージの組み合わせとカスタマイズ段階でデータベースを用い、Git とのインタラクションを最小限に抑え、Git 操作の負荷と不安定性を軽減。
  • プライベートリポジトリサポート:プライベートリポジトリのパッケージ管理とアップグレードをサポート。
  • 非同期 API 操作:Kubernetes API サーバーの 34 秒操作制限に対応し、長時間の変更プロセスを非同期処理で実現。

GitOps 統合とデプロイフロー

KPT パッケージフォーマット

Porch は Kubernetes リソースモデル(KRM)に基づく YAML ファイルでパッケージを構成し、DRY(Don't Repeat Yourself)原則を遵守する。これにより、リソース定義の重複を迴避し、自動化を容易にする。

デプロイパッケージの生成

パッケージ変體(package variant)を用いて、カスタマイズロジックや外部入力(ユーザー設定や自動化レイヤー)に基づく微調整されたデプロイパッケージを生成。

ハイドレーションプロセス

「乾燥した」ブループリントパッケージを「溼った」デプロイパッケージ(wet package)に変換し、すべてのデプロイに必要な設定を含め、GitOps ツールを介して Kubernetes クラスターに同期。

コントローラー統合

Kubernetes API インターフェースを提供し、Git で管理されるリソースを操作可能にし、Kubebuilder などの既存のコントローラー開発環境と互換性を確保。

今後の方向性と改善點

  • 三方向マージサポート:アップストリーム変更とユーザー設定変更のマージロジックを改善し、Git マージ時の衝突を迴避。
  • 効率的な內部ストレージ:データベースストレージと Git とのインタラクションメカニズムを継続的に最適化。
  • 非同期 API 操作:長時間操作の安定性とパフォーマンスを向上させる。
  • 非機能的特性の強化:システムのレジリエンス、スケーラビリティ、信頼性を向上。

Nephio と Telco Cloud プロジェクト

Nephio の目標

Telco Cloud の自動化を支援し、Helm Charts を統合して強力なリソース管理能力を提供することを目的としている。プロジェクトは Helm Charts のサポートを含むが、テンプレート化の問題を解決する必要がある。

産業界のフィードバックと課題

  • Ericson と Nokia のフィードバック:Porch の改善にリソースを投資しているが、バージョン 4 の機能が未完成な點が課題。
  • Dodge Telecom の経験:Ericson と Nokia と協力して Telco Cloud オペレータを構築したが、Helm の制限により成功しなかった。
  • Porch の安定性と機能:産業界のニーズに満たないため、コミュニティの貢獻とテストが求められている。

技術実踐とコミュニティ貢獻

GitOps の実踐原則

Git を唯一の真実のソース(Git as the single source of truth)として、Kubernetes リソースの直接的な変更を避ける。Porch の API を通じてリソースを管理し、変更の追跡性と GitOps フローを確保。

コミュニティの參加と開発

開発者に Porch の開発、テスト、ドキュメンテーション作成への參加を奨勵。バージョン 4 はバージョン 2 に比べて大幅な改善があり、バージョン 5 はより大規模な問題を解決する予定。GitHub 上での貢獻と issue 解決數は増加しており、コミュニティの活発さが確認されている。

結論

Porch は Kubernetes リソース管理における GitOps 解決策を提供するが、テンプレート化、非同期操作、安定性の問題を解決する必要がある。Helm Charts と Porch のリソースモデルには本質的な違いがあり、産業界は自動化と既存ツールの間でバランスを取る必要がある。Nephio プロジェクトは Helm と Porch の強みを統合するが、産業界の協力とコミュニティ貢獻が目標達成の鍵となる。

推薦閱讀