読者の皆様へ:ノイズを減らすための一連の機能を開発しました。関心のあるトピックについて電子メールとWeb通知を受け取ることができます。新機能の詳細をご覧ください。
Atlassianは社内ツールのEscalatorをオープンソースプロジェクトとしてリリースした。これによって、コンフィギュレーションに基づいてKubernetesノードに対して先取りしたスケールアップと高速のスケールダウンを提供する。
Atlassianはコンテナを採用し、2013から2014年にかけて独自のDockerベースのPaaSを構築した。それは、自社のプラットフォームとサービスを実行するために使われた。基本的なスケジューリングとポッドの実行とは別に、オーケストレーションに対するニーズは、クラウドハードウェアの障害に対する耐性があり、負荷に応じて素早くスケールアップおよびスケールダウンすることであった。Kubernetesは必要条件を満たしたため、チームはそれをオーケストレータとして採用した。構築エンジニアリングインフラストラクチャは、最初に移行する対象の1つであり、数百のVMをプロビジョニングする作業負荷で構成されていた。
Kubernetesには2つのオートスケーラがある。一つは水平ポッドオートスケーラであり、もう一つはクラスタオートスケーラである。前者は、コンテナや関連するコンテナの集合を抽象化したものであるポッドをスケールアップしたり、スケールダウンしたりするため、基盤となる計算リソース(通常はVM)の可用性に依存する。クラスタオートスケーラは、計算インフラストラクチャ自体をスケールさせる。当然のことながら、仮想マシンのプロビジョニング時間が長くなるため、スケールアップとスケールダウンには時間がかかる。クラスタオートスケーラの遅延は、ポッドオートスケーラの遅延になる。同様に、ポッドは迅速にスケールダウンできるが、計算用VMのスケールダウンには時間がかかる。特にAtlassianのインフラストラクチャの規模の場合、アイドル状態の計算用VMは膨大なコストにつながる。Atlassianの問題はバッチ作業負荷に特有であり、スケールアップとスケールダウンの遅延に対する許容度は低い。AtlassianはKubernetes上にこれらの問題を解決するために独自のオートスケーリング機能を開発することに決めた。
Goで書かれたEscalatorは、計算用VMの容量の上限と下限の設定可能なしきい値を持っている。いくつかの設定プロパティは、「taint」と呼ばれるKubernetes機能を変更することで機能する。VMノードは、関連するマーカを持つポッドがスケジュールされないように、特定の値で「taint」(マーク)することができる。未使用のノードがマークされると、Kubernetesの標準クラスタオートスケーラによって高速に停止させられる。スケールアップ構成パラメータは、通常は100未満となる使用率で表されるしきい値であり、そのため、バッファがある。Escalatorは、使用率がしきい値に達したときに計算用VMを自動スケールし、後で起動する可能性のあるコンテナのためのスペースを確保し、高速に起動できるようにしておく。
画像提供: https://developers.atlassian.com/blog/2018/05/introducing-escalator/
AWSのようなパブリッククラウドプロバイダは、FargateのようなソリューションでVM管理の問題を解決しようとしているが、Escalatorにある設定オプションがない。計算資源のスケールアップ/ダウンは、コンテナに関して共通の問題である。計算用VMの起動に数分かかると、コンテナを起動する速度の利点が失われる。VMを稼動させ続けることで、アイドル状態となる可能性のあるVMを実行し続けるコストを払って、この問題を解決する。Escalatorは、2つのKubernetesオートスケーラのコンテキストで、バッチ処理負荷という非常に特殊な問題を解決していることは注目すべき点である。
EscalatorはKubernetes 1.8+、Golang 1.8+に対して動作することが保証されている。現在、クラウドプロバイダとしてAWSのみをサポートしている。Atlassianは、以前にSmithなどの他のKubernetes関連のプロジェクトをオープンソース化している。
Rate this Article
- Editor Review
- Chief Editor Action