親愛なる友よ、君は Kubernetes を作ってしまった
(macchaffee.com)-
友人への手紙
- Kubernetes を避けようとしていたのに、結局は似たようなシステムを作ることになった経緯を説明する内容。
- 友人は「退屈な技術」を選び、シンプルなコンテナ実行を望んでいたが、結局は複雑なスクリプトや設定によって問題が発生した。
- Docker Compose に切り替えてもすべての問題を解決できるわけではなく、デプロイ、ローリングアップデート、ロールバック、スケーリングのために別のソリューションが必要だと気づく。
-
サーバー拡張とネットワークの複雑性
- 2 台目のサーバーへ拡張する必要性を感じるようになる。
- Tailscale のようなオーバーレイネットワークを使ってサービスディスカバリを試みる。
- ネットワークの複雑さを解決しようとするが、結局はさらに多くの問題に直面する。
-
保守と自動化
- スクリプトを作った本人が休暇に入ったり退職したりしたら、複雑な設定や文書化されていない設定変更を誰が管理するのか、という疑問が生じる。
- カスタムスクリプトの保守問題を解決するため、Ansible を使って VM をイミュータブルかつバージョン管理可能にする。
- Kubernetes を使わないのだから、より簡単に保守できるはずだと考える。
-
コンテナ生成とセキュリティの問題
- プログラムから別のコンテナを生成する必要が出てくる。
- Docker ソケットを Web アプリにマウントするのはセキュリティ上危険なため、それを解決するための別サービスを書く。
- Docker API の安全な部分だけを公開する別サービスを書いて問題を解決する。
-
結論
- 結局、自分たちは Kubernetes に似たシステムを構築していたのだと気づく。
- 標準の設定フォーマット、デプロイ方法、オーバーレイネットワーク、サービスディスカバリ、イミュータブルノード、API サーバーを含む複雑なシステムが完成する
- 結局、自分たちは Kubernetes に似たシステムを構築していたのだと気づく。
-
PS
- Kubernetes を置き換えるより良いソリューションが存在する可能性を否定するものではない。
- ただし、Kubernetes を複雑だと決めつける前に、それが解決しようとしている問題を十分に理解することを勧めている.
8件のコメント
デプロイの引き継ぎを解決するためにKubernetesを導入するという話は、あまりよく理解できませんね。
保守と自動化がコードレベルで容易に行えます。
Infrastructure as Codeも可能です。
EKSのようなマネージドk8sサービス環境では、ロードバランサーもあり Route 53 との連携も可能ですが、セルフホスティングのk8sはロードバランサーの実装もなく、DNS連携もかなり限定的なんですよね。k8s運用チームが別にある会社では、おっしゃるような利点が実際に成り立つのかもしれません。
ぱっと聞くと悪くないソリューションに見えますが、実際に使ってみるとあらゆる状況で動くわけではありません
k8sの運用チームがなくても使いやすいです。EKSを使えば大丈夫です。
ソースコードさえ渡せば引き継ぎは終わりだという主張と同じではないでしょうか? 業務マニュアルと業務遂行の履歴は、やはり依然として必要だと思います。
Infra as Code 自体、ソースコードさえ渡せば終わらせるためにあるものではありますよね。
もちろん、どんなコードでも同じように基本的なドキュメント化はされているべきですが。
ソースコードがよく書かれていて、ドキュメントがしっかりしていれば可能です。
業務マニュアルや業務遂行の履歴が別にあれば役に立つでしょうが、それはこの記事とは別の話のようですね。
Hacker Newsの意見
複数の会社でシェルスクリプトを使ってデプロイを成功させた経験がある
KubernetesではYAMLファイルを管理するために2〜3人の専任担当者が必要になる
単純なものが脆弱だという考えは誤りである
Kubernetesが必要ない場合もある
シェルスクリプトでiptablesルールやsysctlの編集を簡単に管理できる
Kubernetesを批判するのは非専門的だ
自前システムの制約はすべてコストであり、汎用ソリューションの柔軟性はすべて利点であるという前提は誤りである
Kubernetesの問題は、無数のオープンソースライブラリがシステムを理解しにくくし、バグを引き起こすことだ
Kubernetesの学習曲線を乗り越えた人たちは、複雑さはそこまでひどくないと言う