Coinbaseは先頃、Kubernetesを自社のテクノロジスタックから除外した理由について記事に書いた。同社ではコンテナを採用しているが、運用はVM上で行っている。そのデプロイメントには、VM内でサービスを自動スケーリンググループとしてデプロイする、オープンソースソリューションのOdinを使用している。Kubenetesの採用は、同社が現在運用しているデプロイメントパイプラインに対して、不要な複雑性を追加することになるのだ。さらに同社は、直接Kubernetesを選択するよりも、FargateやECSなど別の選択肢を優先して検討していた。現時点では、Kubernetesは自社に適したツールではない、とCoinbaseは説明する。
技術的な観点からは、KubernetesはCoinbaseの顧客の問題を何ら解決しないのみならず、かえって新たな問題を発生させることにもなりかねない。例えば、サービスの実行に必要なインフラストラクチャを構築するために、専門のチームを新たに用意する必要がある。現行のセキュリティプラクティスもKubernetesに移行しなければならない。さらに、Coinbaseの見解として、EKSやGKEといったクラウドプロバイダが提供する管理サービスは、まだ十分な完成度に達していない。例えば、クラスタのアップグレードが必要な場合、現在よりも"はるかに多くの運用上の重点"が必要になるのだ、と同社では述べている。
CoinbaseがKubernetesを使用しない件について、自身の意見を求められたKelsey Hightower氏は、次のように回答している。
Coinaseは、自社に適した独自のプラットフォームを開発し、運用しています。同社の提供している分析結果には、見るべきものがあります。私がここから得た大きな収穫は、ユーザに対してKubernetesクラスタの独自管理を求めることは、VMのみを必要とするユーザにハイパーバイザの独自管理を求めるようなものである、ということです。
Coinbaseの既存のテクノロジスタックは、EC2インスタンス内で動作するコンテナを中心に構成されている。アプリケーションサービス検索に関しては、Route53をアプリケーションロードバランサやEnvoyと併用している。サービスのスケール管理は、自動スケールグループ(ASG)を通じて行う。ステップ機能を通じたデプロイメントをスケジュールするために、ラムダ関数も使用している。Coinbaseでは、自社のサービスをASGとしてデプロイするために独自開発したオーケストレーションプラットフォームであるOdinと、UI経由でデプロイメントを管理する社内ツールのCodeflowを使用している。Odinは、ヘルスチェックを用いて漸進的なデプロイメントを行うために必要なすべてのロジックを備えると同時に、必要であればロールバックの実施も可能である。
Coinbaseでは、KubernetesのYAMLマニフェストに似たJSONによるマニフェストを通じて、インスタンスタイプやセキュリティグループなど、サービスの希望状態仕様を定義している。これに関して、同社エンジニアリングディレクタのDrew Rothstein氏は次のように述べている。
Codeflowによるボタンひとつのデプロイとロールバック、定義済のヒューリスティックに基づくスケーリング(AWSカスタムメトリクスと標準的なCPUメトリクスをサポート)、ASG内でVMが停止ないし不調になった場合の再スケジュール/移動といった、Kubernetesと同じ主要機能を実現しています。
現在のCoinbaseには、コンテナオーケストレーションの高度なユースケースを満足する必要がないため、サービスのオーケストレーションにKubernetesを使用する計画は一切ない。その代わりとして、Kubernetesを直接採用する前に、他の選択肢を評価したいという意向を持っている。例えば、同社のインフラストラクチャはAWS内で動作していることから、FargateやECSといった管理サービスを評価する予定である。加えて、現在の同社のニーズはOdinがすでに満たしているので、Kubernetesにスイッチしても、エンジニアにとって大きなメリットはないと思われる。
さらに、Coinbaseのこの決定は主としてカスタマニーズに基づいたものである。この点についてRothstein氏は、次のように述べている。"私たちの現在のプラットフォームへの参入障壁が大幅に変わり、それが明確な差別要因になるようであれば、異なるプラットフォームの採用についても検討することになるでしょう。" Coinbaseはオーケストレーションプラットフォームの変更を導入する理由付けとして、カスタマを重視しているのだ。カスタマの潜在的ニーズとは、例えばデプロイ時間の短縮であったり、カナリアやブルー/グリーンを越えるさまざまなデプロイメントパターンを持つことであったり、現在の環境からの複雑なサービスメッシュとのインタラクションであたりする。
最後にCoinbaseは、Kubernetesが悪いツールだとは思わない、ただ単に、自社に適したツールではなかったということだ、と表現している。課題は存在するが、Kubernetesは素晴らしいツールであり、KnativeやFargateといったプロジェクトで抽象化レベルを向上させることにより、さらに多くの課題を解決することができるのだ。