私は Kubernetes を必要としていなかったし、おそらくあなたも必要としていません
(benhouston3d.com)Kubernetes を離れて Google Cloud Run を選んだ理由
Kubernetes 導入の背景
- 2013年にリリースしたオンライン3D編集プラットフォーム Clara.io では、ベアメタルサーバーを使ってインフラを最適化していたが、ハードウェア管理と監視に過大な作業が必要だった。
- 2018年の Threekit.com プロジェクトでは Kubernetes を選択。当時 Azure, AWS, Docker が Kubernetes を標準として採用し、主流になっていた。
Kubernetes の限界
-
コストの問題:
- 管理ノードやクラスターの冗長構成など、基本的なクラスター構築コストが大きい。
- オートスケーリングが遅く、サービスの過剰プロビジョニングが必要になり、未使用リソースのコストが発生する。
-
ワークロード管理の難しさ:
- ジョブスケジューリングが複雑で、組み込みスケジューラーや Argo も大量ジョブでは非効率。
-
複雑さの過負荷:
- 豊富な機能により、単純な作業まで複雑になる。
- Kubernetes の運用には専任の DevOps 人材が必要で、これはコスト増につながる。
Google Cloud Run への移行
Cloud Run は Kubernetes の複雑さに代わる、簡素でコスト効率の高い環境を提供する。
新しい構成
- Docker コンテナベース のインフラ:
- 自動スケーリングサービス と 長時間実行ジョブ 向けコンテナを含む。
- Cloud Run はコンテナのデプロイ、スケーリング、停止管理、ジョブ実行を自動化する。
Cloud Run の利点
-
コスト効率:
- CPU とメモリの使用時間に応じて課金される。
- アイドル状態のサービスにはコストが発生しない。
- 例: Web3D Survey サイトは月 500,000回のトラフィック を処理しながら 月額$4 で運用可能。
-
高速で安定したオートスケーリング:
- Kubernetes より速く、数秒でスケールする。
- 需要急増にも迅速に対応できる。
-
Kubernetes 管理の負担がない:
- Cloud Run は Google の Borg を基盤としており、Kubernetes クラスターの管理が不要。
-
シンプルな非同期ジョブ:
- Cloud Run Tasks を使って、自動リトライや大量ジョブの実行を簡単に行える。
Kubernetes の潜在的な問題: クラスター・ロックイン
- Kubernetes の機能に依存すると、クラスター外リソースとの統合や拡張が難しくなる。
- 特定インフラへの依存が強まり、拡張やマイグレーションが複雑になり、コストも増える。
Cloud Run 利用に関する一般的な質問
「GCP 依存は気にならないのか?」
- Docker ベースの構成なので、AWS のような別クラウドへのマイグレーションもおよそ1週間で可能。
- 現実的には、政治的要因でもない限りクラウドプロバイダーを変更することはまれ。
「Cloud Run も結局 Managed Kubernetes では?」
- Cloud Run は Knative インターフェースを使うが、Kubernetes ではなく Google の Borg 上で動作する。
- Kubernetes の複雑さを取り除き、簡素化されたインターフェースを提供する。
現在のワークフローの欠点
-
サービス名管理の不便さ:
- ローカルとサーバーで一貫した構成管理を行うための抽象化レイヤーが必要。
- Kubernetes の名前管理機能がない。
-
Cloud Run Task エミュレーション不足:
- ローカルでジョブを開発する際、ログ出力のキャプチャや追跡を含む簡単なエミュレーション環境がない。
結論
- Cloud Run はコスト、速度、拡張性、簡素化の面で最適なソリューション。
- 大企業 や複雑な要件がある場合には Kubernetes が有用なこともあるが、
- 簡素さと効率性 が重要なプロジェクトでは Cloud Run のほうがはるかに実用的。
- PS: Kubernetes に特定の拡張を追加して問題を解決することもできるかもしれないが、それは複雑さを増すだけであり、単純な必要性を超えた Kubernetes 環境に依存したくはない。
12件のコメント
万能薬なんてあるわけがありません。状況に合わせてうまく使えばいいのでしょうね(笑)
トレンドだからと無批判に kubernetes を導入すると大変になることもありますが、それでもある程度規模の大きい環境では悪くないツールだと思っています。
導入したとしても、導入して終わりではきちんと使いこなせないはずです。
そして、どんなツールでも同じですが、開発者や利用者のニーズを100%満たすことはできないので、適切なレベルの自動化は必須だと思います。
Kubernetesは一度構築してしまえばあとは楽勝だと思っていたのに…(泣)
Kubernetesは自分の飯の種で、かつてはこれこそが正解だと信じていた時期もありましたが、
時間が経つほど多くの問題を経験し、時間を無駄にしている自分に気づくようになりました。
人にはk8sを勧めますが、自分のサービスでは使わないと思います。k8sもそうですが、単にコンテナにも疲れました。
AWS を使っているなら、ECS と似たようなものだと考えればいいでしょうか?
ええ、そんな感じです。 :)
Kubernetesを使えないことが問題なのであって、Kubernetesがいまひとつだと言うのはちょっと違うと思います。
私も筆者の考えと似ています。
まだ会社の規模がkubeを使うほどではありませんし。
すべての開発者がKubeを使って運用管理できるはずだというのは、私だけの考えでした。
会社の開発者の平均的なレベルでもインフラを構築し、問題を解決できるようにガイドするほうが、より良かったです...
???: 私にはAIは必要なかったし、たぶん皆さんにも必要ないでしょう。
どんな製品にも、トレードオフになる部分はあるでしょう
マネージドサービスを使えば、特に運用管理の難しさは感じませんでしたし、、
どんなツールでもほどほどの範囲で使えば有用ですが、Kubernetes はとりわけ「複雑な設定ができること」が主な批判対象になっている気がしますね。
ほとんど何でも自分の望むとおりに作れてしまう技術だからこそ… :) 複雑に使う場合が多いから、そう感じるのかもしれませんね はははは...
Hacker Newsの意見
「クラウド技術」への不満を表明し、Kubernetes を使うと YAML ファイルを修正したりエラーを解決したりするのに多くの時間を費やすことになると述べている。クラウド統合を避けて、自分でサーバーを構築したいという意見を持っている
Kubernetes は DevOps や運用時間に加えて、かなりのインフラコストも発生する。クラウドプロバイダーのマネージド Kubernetes を使うほうがより効率的だと提案している
Kubernetes はコンテナオーケストレーションツールではなく、コンピュータクラスタを作るためのツールであり、クラスタが必要でないなら Kubernetes を使わなくてもよいと説明している
DevOps への過度な投資は減りつつあり、Kubernetes に対する批判的な見方を共有している。小規模スタートアップでは単一サーバーでも十分な場合があることを強調している
Cloud Run を使う際の注意点として、TCP 接続制限、実行環境の選択、自動スケーリング設定などに言及している
Cloud Run は小規模スタートアップに適しているが、セキュリティアーキテクチャの基本要素であるファイアウォール制御が不足していると指摘している。結局は VPC が必要になるだろうと説明している
Google Cloud Run と Kubernetes の比較は公平ではないと主張し、それぞれの長所と短所を説明している。Kubernetes は複雑な作業に適していることを強調している
Kubernetes は学習曲線が急だが、適切に使えば強力なツールであると説明している
Kubernetes に対する批判には同意せず、複雑なアプリをデプロイする際には Kubernetes API が必要になる可能性があることを強調している
Kubernetes の複雑さは主にシステム管理作業から生じるものであり、Kubernetes 自体は安定していると説明している
IaC と CM は構成を減らして管理しやすくするはずだが、実際にはより多くの労力が必要だという点を指摘している。多くの場合 Kubernetes は必要なく、優れたシステム管理者のほうが重要であることを強調している