BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース AsanaのKubernetes導入とKubeAppフレームワークの開発

AsanaのKubernetes導入とKubeAppフレームワークの開発

原文(投稿日:2021/03/23)へのリンク

チーム用作業管理プラットフォームのAsanaは、同社のKubernets導入についての振り返りを行った。同社ソフトウェアエンジニアのTony Liang氏が、Kubernetesアプリケーションの作成とメンテナンスを体系化するフレームワークのKubeAppsを開発した経緯について、詳しく説明している。

Asanaのインフラストラクチャプラットフォームチームは現在、同社のモノリスインフラストラクチャとは分離した形で、Kubernetesを使用したサービスのデプロイや管理を行っている。Kubernetes導入まで使用していたモノリシックなアーキテクチャは、同社のレガシなデプロイメントシステムと相まって、スケーリングに問題を抱えていた。さらに、新たなサービスの追加時にデプロイメントが不安定になるというリスクもあった。

プラットフォームチームは、Kubernetesを使いたいというエンジニアリングチームの意向を受け入れることにした。このフレームワークを採用した目標は、アプリケーション開発者が他の既存サービスの影響を受けることなく、サービスの構築や更新をできるようにすることだった。このようなアプリケーションエンジニアリング主導のアプローチで注目すべきなのは、先日のInfoQのQ&AでもKubernetesの専門家たちが強調していたように、導入の成功には開発者の支持が不可欠であるという点だ。

それでもチームには、Kubernetesを導入しただけでは解決できない、いくつかの問題に対処する必要があった。まず、AWSのリソース管理は、Kubernetesのスコープを越えている。また、すべてのサービスにわたってメトリクス収集とシークレット許可を行うだけでは単純過ぎる。さらに、継続的デリバリのためには、アプリケーションロジックをイメージ内にパッケージして、使用可能な状態でコンテナレジストリに用意しておく必要がある。

そのためAsanaのチームは、KubeAppsというフレームワークを、当初はデプロイメントに関する処理を行う目的で開発した。すべてのKubeAppはハードウェア要件、pod定義、サービスアプリケーションのセットとして定義される。KubeAppのコンフィギュレーションはPythonコードとして記述されているため、プログラムによる構成情報の生成や外部リソースの管理を容易に行うことができる。

KubeAppは継続的デリバリ用パイプラインを通じて、Bazel DockerイメージまたはDockerfileイメージの構築とプッシュを行う。アプリケーションのコードはこれらのイメージに内包されている。各KubeAppは、AWSの管理するElastic Kubernetes Service(EKS)経由で、それぞれのKubernetesクラスにデプロイされる。クラスタ毎にひとつのKubeAppが存在することにより、クラスタ障害の影響を最小化している。

マネージドKubernetesサービスの採用も、同じく専門家の意見に沿ったものだ — 多くの企業がクラスタのメンテナンスをクラウドプロバイダに委託したり、EKSやGoogle Kubernetes Engine(GKE)、Azure Kubernetes Service(AKS)といったマネージドサービスを利用している。

下の図は、AsanaのKubeAppデプロイメントを示したものだ。中央の管理ハブであるkubecontrolが、cron経由で、あるいは開発者のトリガによって、アップデートを実行する。

出典: https://blog.asana.com/2021/02/kubernetes-at-asana/

KubeAppの生成やアップデートはkubecontrolを通じて起動される。アプリケーション仕様に従って、KubeApp用の新たなEKSクラスタを生成するために、一連のリソース要求が行われる。続いてイメージビルダサービスが、指定されたコードバージョンに従ったDockerイメージをコンパイルした上で、そのイメージをElastic Container Registry(ECR)にコミットする。必要なリソースがすべて構築されると、Kubernetesクラスタにコンポーネント仕様が提供され、必要なDockerコンテナがデプロイされる。

KubeAppsはブルー/グリーンデプロイメントを実装しており、ローンチして構成するために新たなEKSクラスタを必要とする。最新のKubeAppが検証された後、トラフィックが新しいクラスタにシフトされ、古いクラスタは廃棄される。

可観測性の見地からは、KubeApp Management Console (KMC)がデプロイメントの履歴情報を記録する。同社チームは、ユーザがKubeAppと対話するための集中型WebベースインターフェースとしてKMCを使用する予定である。

Asanaでは60以上のKubeAppが稼働中だが、EC2インスタンスのモノリスもまだ残っている。インフラストラクチャプラットフォームチームチームはKubeAppsフレームワーク上に新たな機能構築を続けており、より多くのアーキテクチャタイプやインフラストラクチャプロバイダにサポートを拡張している。

同じように開発者中心のアプリケーションフレームワークを開発している企業は他にもある。例えばNetflixには"Paved Road Platform as a Service"があり、ShopifyはHerokuライクなフレームワークをKubernetes上に構築している。

この記事に星をつける

おすすめ度
スタイル

特集コンテンツ一覧

BT