ディスカッション (11件)
Kubernetes関連の採用面接を数多くこなす中で、私が痛感した「現場で本当に求められる知識」についてまとめました。ただ公式ドキュメントを読んでいるだけでは見えてこない、実践的な洞察を共有します。
Kubernetesはすっかり定着した感があるよね。自分で構築・運用しようとしない限り、小規模なKubernetesクラスタの管理なんて大した手間じゃない。みんなもう随分前のことを忘れてるみたいだけど、昔はサーバー管理って本当に面倒だったんだ。結局のところ、Kubernetesは「退屈なテクノロジー(Boring Technology)」になりつつあるんだと思うよ。
2人目のエンジニア(CTO以外で初めての採用)を雇った段階でk8sを採用するだって?それはCTOの優先順位がずれているという警告サインだよ。ユーザーの問題を解決するより、インフラいじりを楽しんでるだけじゃないかな。
1年前ならKubernetesはやりすぎだと言ったかもしれないけど、今ではどうだろうね?お気に入りのGPTにマニフェストを書かせればいいし、Telepresenceを使ってメインアプリをクラスタに放り込んだり、コンテナから直接実行したりできる。まるで90年代みたいにコンテキストやクラスタを切り替えるのも簡単だよ。僕がDocker ComposeやDockerを嫌う理由の一つは分離が不十分なこと。もちろん深く突き詰めればできるけど、ローカルのk8sならワークスペースごとにクラスタを立ち上げれば、PostgreSQLのポート競合に悩まされることもない。LLMが出る前は一貫性のあるYAMLを書くのは本当に苦痛だったけど、今の開発規模ならタダ同然で手に入るようなものだよ。
ソロ開発者であっても、k8sと手動のインフラとの間には埋めがたい溝がずっとあって、それをうまく埋められるものは今までなかった。Herokuみたいなサービスがあれだけ人気だったのは、それが理由の一つだと思う。
スタートアップで実際にこれを決断したことがある(エンジニアチームが30人くらいで、モノリスと10個くらいのサポートサービスがある状態だった)。記事で理由が述べられていたとしても、自分なら二度とやらないな。構成の統一はいいんだ。当時はAnsibleでプロビジョニングしたEC2インスタンスでアプリを動かしていて、新しいサービスを立ち上げるたびにEC2をセットアップするのは骨が折れるプロセスだったから。でもk8sは本当に面倒なんだ。初心者が気づいていないと思うけど、k8sは全然「バッテリー内蔵(すぐに使える)」じゃない。マネージドクラスタをセットアップしても、ingressやcert-manager、external dnsといったコントローラーを追加でインストールしなきゃいけない。そして、それらすべてのプロセスを維持し続ける責任がこっちに来る(重要なリソースのwebhookコントローラーが落ちないことを祈るしかない!)。しかも3ヶ月に一度はクラスタだけでなく、それら全てのコントローラーのメジャーアップデートもしなきゃいけない。しかも平気で破壊的変更を入れてくるからね。それに、k8sのネットワークやDNSレイヤーは、ほとんどのスタートアップには不要なほど複雑すぎる(EKSを使っているなら、CoreDNSのスケーリングとモニタリングについては必ず読んでおいてね)。市場には、そんな複雑さを抜きにして、宣言的な方法でインスタンスにコンテナをデプロイできて、ちゃんとしたLTSバージョンがあるシンプルなソリューションが欠けていると思う。そういうツールはどこかにあるんだろうけど、k8sが全てを吸い尽くしてしまっている感じだよ。
これ、K8sというよりIaC(Infrastructure as Code)の動きに関する話だよね。K8sだろうがCDKやTerraformだろうが関係なくて、記事で言及されてるメリットはどれを使っても享受できるはず。一貫したデプロイパターンがあって、追跡可能で、ロールバックができて、本番環境への承認チェックがあるっていうのは最高だよね。誰かの頭の中にしかない古い慣習に縛られなくて済むのもいい。それに、コードを読めばどう動くか分かるっていうのも最高。たいてい最新の状態になっていて、デプロイ可能なわけだし。
いや、彼らがKubernetesを選んだメリットは十分理解できるよ。ただ、そのメリットを得るためだけに、自分には必要のない問題を解決するために設計された、めちゃくちゃ複雑な巨大システムを運用しなきゃいけないのがどうもね。
「私が話を聞いたCTOたちは愚かな選択をしていない。彼らは現実の問題を解決しているのだ」――記事の内容とは関係ないけど、この文の構成、いかにもLLMが書いたっぽいな。
自分は個人的にK8sの大ファンなんだけど、「複雑」っていう意見には同意する。ただそれは、アプリケーションのデプロイ自体が複雑なものだからだよ。(断っておくけど、cert-managerやArgoCD、external-secretsなんかを全部セットアップしなきゃいけないなんてルールはないんだ。VPSを使うような層なら、暗号化もしてない.envを置いてSSHで更新するようなやり方で満足するだろうけど、Kubernetesを選んだ途端にGitOpsの正攻法をとろうとして、設定することが多すぎると文句を言うのが面白いよね :) あと、記事の投稿者が「CTOが唯一の開発者でなくなったらKubernetesを使え」と結論付けていたのは笑った。
最近これが加速してる理由は、AIエージェントがK8sクラスターを立ち上げるのがめちゃくちゃ上手いからだよ。DevOpsの仕事を劇的にシンプルにしてくれた。面倒だからと後回しにしていた作業――ゼロトラストを実現するためにクラスター内のすべてのアプリでLet's Encryptを使ってユニークな証明書を作成したり、すべての設定に対してパーミッションやセキュリティプロファイルを構成したりといった作業(そもそも立ち上げる手間は言うまでもなく)――が、今や全部簡単にできるようになったんだ。