Cloud Penguins

Flying penguins in the cloud.

CloudNative Days Fukuokaで、クラウドネイティブについて考え直してみた

4/16に福岡で開催されたCloudNative Days Fukuoka で登壇しました。昨年12月のJapan Container Daysでの登壇でベストスピーカー賞を頂いたこともあり、CNDFのキーノートで登壇しないかとお声がけいただいたのです。

普段は特定の技術についての登壇が多い自分ですが、今回はキーノートでの発表。そこで、より全体的な『そもそもクラウドネイティブとは』という話をしました。

speakerdeck.com

このテーマ、以前からどこかで話したいと思っていたんですよね。

このエントリーでは、↑の発表資料を基に、時間の都合で削った部分の補足を行っています。一度資料に目を通してからお読みください。

お前らのクラウドネイティブは間違っている

いきなり石を投げられそうな見出しですが。本当にクラウドネイティブな開発を実践されている方々に喧嘩をふるつもりは全くありません。それよりも問題だと思っているのが、クラウドネイティブな商材を扱っているベンダーや、ITジャーナリストな方々が訛伝している『クラウドネイティブ観』。

  • クラウドネイティブ開発ではマイクロサービスアーキテクチャで開発を行う
  • クラウドネイティブ開発ではコンテナ技術を活用し、Kubernetes上で運用する

みたいな決めつけが本当に多い。どことは言わないけれど。それっぽいキーワードで検索すれば大量に出てくると思います。

ソフトウェアアーキテクチャのみならず組織論まで踏み込んだ考え方であるマイクロサービス。柔軟性に富み、拡張性も高く非常に優れたプラットフォームであるKubernetes。これらを採用すること自体が間違いだとは言わないですし、むしろ積極的に検討すべきだと思います。が、ありとあらゆるケースにフィットする、いわゆる銀の弾丸なんてどこにも存在しません。 自身を顧みないままマイクロサービスやKubernetes採用したところで、辛さしか生みません。マジで。

Cloud Native ≠ Kubernetes

ここについては、去年のJKD v18.04で発表したこの資料で詳しく説明しています。

www.slideshare.net

KubernetesをはじめCaaSは柔軟性や拡張性に優れる一方、運用者や開発者が担わなければいけない要素が多いのです。今回の発表で言うと、『人間の関与を要求しがち』なプラットフォームなんですね。

クラウドネイティブのマインドが育っている企業であれば、Kubernetesを使っても適切な自動化を行い、生産性を高めることが出来るでしょう。ですが、そうでないフェーズの企業がKubernetesを使うとどうなるかはお察しの通り。

もしあなたが運用の中で kubectl apply を手で叩くシーンがあるのならば、何かがおかしいと考えた方が良いです。そしてその状況をすぐに改善できないと感じるのであれば、おそらくKubernetesを採用したことが間違いだったと言えるでしょう。

Kubernetes完全ガイドにもこう書いてあります。

Kubernetesを実運用する場合、手動でkubectlコマンドを実行することはほとんどありません。手動でのオペレーションはヒューマンエラーが発生しやすいことや、管理できるリソース数に限界があるため、推奨しません

Kubernetes完全ガイド 4.5.7 Pruneによるリソースの削除 より引用

Kubernetesを使わなくても、様々なPaaSやマネージドのコンテナ運用サービスがあります。そういったOpinionatedなサービスを活用したほうが、生産性が向上するケースが多いのです。

クラウドネイティブを、DevOpsを、自動化を理解したいのならばFactorioをプレイしよう

「コンテナやKubernetes採用するのも大事ですけど、ちゃんとCIやCDやるのも大事ですよ。むしろそこからですよ」 と話すと「いや、自分はコード書くわけじゃないんでそこは分からないんで・・・」 と返されることがあります。いやプラットフォームの改善するのにそこを理解しようとしないのは甘えでは・・・。

とはいえ事情は人それぞれなので、手っ取り早く自動化のエッセンスを理解する方法として、Factorioというゲームプレイをお勧めします。

store.steampowered.com

未知の星に不時着したプレイヤーが、資源を掘り、機械を作り、星を開拓していくゲームなのですが、このゲームでとにかく大事なのが自動化。 手で資源を掘って資材を作ってなんてやってると、いつまで経っても開拓が進みません。

そうこうしているうちに、星に棲んでいた生物に襲撃されます。作った機械は破壊され、かろうじて作った機関銃で対処するのが精一杯という状態に陥ります。もう開拓どころでなく、日々生き延びるだけで手一杯。


Factorio - Trailer

そうならないためにも、とにかく自動化しまくるのです。資源掘るのも、資材を作るのも、機械を組み立てるのも、全て自動化。 襲いかかってくる敵もタレットで迎撃。弾丸の供給やダメージを受けた防壁の修復も全て自動化。こうすると、序盤では考えられなかった速度で開拓が進んでいきます。

これ、今回話したクラウドネイティブの話と非常に似ているんですよね。運用していると、ありとあらゆる問題が起きます。そういった問題に都度対応していたのでは、時間がいくらあっても足りません。結果として、集中して作業できる時間が奪われ、価値のある行動(サービスの開発)は遅々として進まなくなり、ライバルに叩き潰されて終了。

ボトルネックはどこにでも発生しうること、特に人間が関わった時点でそこはボトルネック化確定というシビアな現実を実感する上でもお勧めのゲームです。

FactorioがDevOpsについて教えてくれる4つのこと datahovel.com

ちょっと前には、これを採用に活用している企業も話題になりました。

news.denfaminicogamer.jp

本当はFactorioの話もキーノートに入れたかったんですが、発表時間に収まらないこと、話の焦点がブレる可能性もあり泣く泣く削りました。 今このエントリーを書いているのは、ぶっちゃけこの話がしたかったからです。

CloudNative Days Tokyoもでもお待ちしています

7月の22日と23日には、CloudNative Days Tokyoが開催されます。CFPの採択も終わり、もう間もなく申し込みページがオープンする予定です。

今回、Kubernetes完全ガイドでも有名な@amsy810と一緒にCo-chairを務めることになりました。役に立つセッション、ワクワクするセッションを数々揃えていますので、みなさま是非お越しくださいませ。