Kubernetes = Disrupter?
ビジネスにおけるディスラプター
ビジネスにおけるディスラプターの話は以下エントリで記述しました。
下記の記事も詳しかったので併せて確認するとよいかと思います。
この記事で出てくる同質化は、私のエントリででてくるイミテーションと同じ意味です。つまり模倣のことです。
ディスラプターは企業の経営資源を負債化し、意味のないものに変えます。リーダー企業は通常、イミテーション(同質化)によってそれを防ぐのですが、イミテーションできない状況にわざと持ち込むことをディスラプターは実施します。
経営資源が意味のないものになるということは人や店舗や販売スタッフ、タクシー、ホテルなどが不要になるわけです。しかし不要になったからと言ってすぐに解雇したり売却できるわけではありません。
運用におけるディスラプター
ふっとあることを思いつきました。
運用のプロセスを Value Stream Mapping を使用して可視化し、リードタイムを計測してみたらどうでしょうか。
例えば、アプリケーションがダウンしたときに実施している運用の Value Stream Mapping を記述したとします。仮に下記のようになったとします。
あなたはどこにボトルネックを見つけて改善するようにしますか ?承認の箇所ですか?このままだとお客様がシステムを再利用可能になるまで2時間のリードタイムがあります。
Kubernetes によるディスラプト
Kubernetes を使うとこのプロセス全部不要になります。
承認をワークフロー化して何分短縮できた!とかいうレベルではありません。全部が不要です。
Kubernetes はコンフィグレーション(yaml)で宣言した状態でなくなった場合、それをもとに戻そうとする機能があります。
問題があったときに自動で修復してくれるプラットフォーム Kubernetes があったら、顧客が障害復旧で待っているリードタイムは極限にまで短縮されます。下手するとアプリが落ちたことすら気づかないレベルかもしれません。
下手な短縮をして 125分のリードタイムが 60 分になりました!とは比べものにならない衝撃です。
Kubernetes は経営資源であるオペレーターの仕事を奪ってしまいました。しかし誰も悲しみません。運用者にはほかにも様々な仕事があるためです。
上記はアプリが落ちていたケースを想定していましたが、仮にある特定のアプリにアクセスが集中して(メモリをかなり消費して)システム全体がスローダウンしているケースで考えてみましょう。
アプリが展開されているプラットフォームがクラウドのようなオートスケール可能な環境だったらよかったのにと思うかもしれません。オンプレでは事態が収束するのをぼーっと見ているだけでしょうか。
Kubernetes を適用するとアプリケーションの状況に応じて自動でスケールアウト、スケールインをさせることができます。スケールアウトした場合はもちろん前段に LB を配置していますよ。
これまたオペレーターの仕事を奪ってしまいました。
ほかにもいろいろ実現できます。例えば、
- 動作させながらローリングバージョンアップするのに手順が複雑すぎて絶対どこかで間違えるが、Kubernetes を入れたら一瞬でした。
- 構成情報を収集しようと思ったら、Kubernetes が etcd にすでに持っていました。
- サービス間同士が連携している図を描画しようと思ってたんですが、自動でマッピングされてビジュアライズされてました。
- AB テストやカナリアデプロイやろうとしたら LB の設定やデプロイが大変だったんですが、Kubernetes を使うと設定レベルで実現できました。
上げたらきりがありません。
ただし、Kubernetes 上でアプリを動作させるためにはある程度のお作法にのっとる必要があります。
クラウドネイティブということ
上記のように Kubernetes を使うと回復性のあるプラットフォームを実現でき、たとえアプリが落ちたとしても、プラットフォームが自動であるべき姿に復旧してくれます。
そこにわざわざ人が介入してオペレーションを実施する必要はありません。人が実施するべきなのはもっと他の事、繰り返される手動オペレーションをコードによって自動化すること等です。
コンテナという言葉を聞いただけで毛嫌いするのではなく、自分たちのプロセスがコンテナによってどう変革されるのかを真剣に考えてみてはいかがでしょうか。
私の周りには金融でコンテナなんてという、脳みそレガシーの人であふれかえっています。そんな人たちばかりの今だからこそ、他社をディスラプトできるチャンスなのではないでしょうか。
今こそクラウドネイティブな企業になるチャンスです(クラウドを使っていることをクラウドネイティブと言っている勘違いさんがよくいますが、クラウドネイティブは CNCF できちんと定義されている言葉です)。
クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。 このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ、および宣言型APIがあります。
これらの手法により、回復性、管理力、および可観測性のある疎結合システムが実現します。 これらを堅牢な自動化と組み合わせることで、エンジニアはインパクトのある変更を最小限の労力で頻繁かつ予測どおりに行うことができます。
Cloud Native Computing Foundationは、オープンソースでベンダー中立プロジェクトのエコシステムを育成・維持して、このパラダイムの採用を促進したいと考えてます。 私たちは最先端のパターンを民主化し、これらのイノベーションを誰もが利用できるようにします。
単純にクラウドを使っていても上記のような頻繁に変更を最小限の労力で予測通りに行うことはできません。これはクラウドネイティブとは呼びません。
このアプリは絶対落とさないでください #こんなのクラウドネイティブぢゃない
落ちてもいいけどすぐ復旧するよ! by Kubernetes