Agodaは最近、macOSインフラをKubernetesと統合した方法を詳述した。これは、Kubernetes環境内でmacOSワークロードを管理するために設計されたツールであるmacOS Virtualization Kubelet (macOS-vz-Kubelet)を開発することで実現された。
Agodaのスタッフソフトウェアエンジニア(クラウドプラットフォーム)であるVitalii Horbachov氏は、ブログ投稿を通じてその経緯を詳しく説明した。Agodaは開発のためにAppleのインフラに大きく依存しており、以前は継続的インテグレーション(CI)プロセスのために200台のMac Minisを管理していた。しかし、従来の方法では、特にApple Siliconの登場後、スケーラビリティとパフォーマンスの問題に直面しており、QEMU/KVMのような既存の仮想化フレームワークにも一定の制限があった。以前のKubernetesソリューションは不十分で、インフラの一部しかサポートされず、主に仮想デバイスファームに焦点を当てており、CI/CDに使用されるビルドマシンには対応していなかった。
これらの課題を克服するため、KubernetesがネイティブのmacOSワークロードを直接管理できるよう、AgodaはmacOS-vz-Kubeletを開発した。このプロジェクトはGoを用いて構築され、AppleのVirtualization Frameworkを活用して、Apple Siliconハードウェアの性能を完全に継承したmacOS仮想マシン(VM)を実行する。このソリューションは旧来の方法を置き換えるだけでなく、macOSワークロードを持つPodのシームレスなデプロイを可能にしている。
出典:ネイティブmacOSワークロードをKubernetesに統合した方法
この特徴の一つは、ハイブリッドランタイムPodを作成する能力であり、最初のコンテナがmacOS VMで、追加のコンテナはDockerによって管理される。この設定により、macOS VMがビルド環境として機能し、Dockerコンテナがログ記録やアーティファクトのアップロードなどの補助的なタスクを処理する効率的なCIワークフローが実現される。
このプロジェクトでは、macOS VMイメージ用に特別に設計されたカスタムOpen Container Initiative(OCI)準拠フォーマットを導入している。このフォーマットにより、Apple社の仮想化フレームワーク(例:macosvm)に準拠したツールを使用して、効率的なイメージの作成、パッケージ化、管理が可能になる。
Agodaは最近、モノリシックなGraphQL APIからマイクロサービス・アーキテクチャに移行するために型破りなアプローチを採用したことで話題になった。Agodaのアソシエイト開発マネージャーであるNuman Hanif氏は、このアプローチによって混乱が最小限に抑えられ、フルスタックをよりコントロール可能になり、アジャイルでモダンな開発原則とアーキテクチャをよりよく整合可能だとInfoQにて述べた。
Horbachov氏はさらに、Apple社の仮想化フレームワークに内在するネットワーキングの課題について詳しく説明した。デフォルトでは、VMはNATネットワーキングを使用するが、AgodaはリモートIP経由でVMへの直接アクセスを可能にするため、DHCPによるブリッジドネットワーキングを実装した。これは、カスタムMACアドレスをVMインターフェイスに割り当て、ネットワーク・トラフィックを監視してIPアドレスを取得することで実現した。
基盤となるmacOSホストの管理に関しては、Agodaはデータセンター内のMac Minisの初期設定とセットアップにJAMFのようなモバイルデバイス管理(MDM)ソリューションを採用した。これにはユーザーアカウントのセットアップ、OS管理、アップデートが含まれる。
Horbachov氏は最後に、macOS-vz-Kubeletの導入は、Agodaのインフラ内でmacOSワークロードを大規模に管理するための重要なステップであると述べた。
興味のある読者は、macOS-vz-Kubeletの機能に関する包括的なドキュメント、使用ガイド、実際のアプリケーションを示す例を含むプロジェクトリポジトリへ進むとよい。そこには、機能に関する包括的なドキュメント、使用ガイド、macOS-vz-Kubelet の実際のアプリケーションを示す例が含まれている。この旅はAgodaのPlugged In Tech Podcastにおいても議論されている。