Kubernetes塩漬けは振袖着て泳ぐようなものですよ。

# はじめに
昨今Kubernetesはコンテナ導入時のプラットフォームとしてスタンダードになっていますが、導入前、もしくは導入後によく「Kubernetesのライフサイクルが短くてしんどい。もっと長い期間サポートしてほしい。」といった声を聞きます。Kubernetesのバージョンアップ対応がしんどいのはよく分かりますが、その解決策として「長期間サポートしてくれ」とか「いっそ塩漬けにしてしまおう」みたいな考えはKubernetesには適しません。
ただ従来のシステムインフラにおいては往々にして塩漬け運用が行われてきたため、どうしてもKubernetes環境に対しても数年スパンでの安定運用を担保してほしい心情が働いてしまうのだと思います。ただしこの考えはもう当たり前のものではなく、Kubernetesを使っていくなら **短いスパンでバージョンアップ対応が必要である** という認識を、上位層、ステークホルダー、マネージャー、実務者、パートナーの全員がきちんと認識しておく必要があります。

。。。と、ここまでKubernetes運用者なら「当たり前でしょ」と思っていることでも、改めて真顔で **Kubernetesを長期間塩漬けで運用したいんだけどどうすればいい？**　みたいな質問が飛んできたときにどう返せばいいのか意外と難しかったりします。
（実際の質問は「バージョンアップの回数をできるだけ減らしたい」とか「もっと長期間(数年単位)のサポート提供してくれるKaaSないの？」とかだと思いますが、言ってることは一緒です。）

ここではどうやってKuberentesのバージョンアップ対応は必要であると認識してもらうのかを悶々と考えてみようと思います。


※チラシの裏に書き出す内容なので雑多かつ論理破綻もしてるかと思いますがご了承ください。



# Kubernetesを塩漬けするヤバさを例えてみる
一般的にKubernetesをバージョンアップする理由は以下の通りです。
* ネガティブ要素からくる理由
    * Kubernetesのサポート期間が最大1年間であり、それに追従するため
    * 機能バグのFIX、セキュリティ脆弱性対応などマイナス要素を払拭するため
* ポジティブ要素からくる理由
    * 新機能をいち早く検証・実装し、より開発・運用を効率化するため

ただしここら辺を伝えて「なるほど、じゃあバージョンアップしなきゃね」って理解してもらえたら苦労はしないわけで、「インフラは塩漬けできるものである」という考えが定着している人にはあまり響かなかったりします。そんな人にKuberentesのバージョンアップをしないヤバさをどう伝えればいいんだろう？？と考えていた時にTwitterで以下のようなツイートを見つけました。

https://twitter.com/_Dr_ASA/status/1303179232076394496


おそらくこのツイートはKubernetesに載せるアプリの特性に関することかと思いますが、Kubernetes自体にも適用されます。このツイートを見た時に **「それな」** となったので、少しここから掘り下げてKubernetes塩漬けのヤバさを例えてみようと思います。
ここでは、 **「Kubernetesを導入する際、長期間塩漬けで運用したいんだけどどうすればいい？」** という発言を **「水に入って泳ぐ際、振袖を着て泳ぎたいんだけどどうすればいい？」** と同等のレベルで考えてみようと思います。
要は振袖で泳ごうとしている人を説得できれば、そのプロセスをKubernetes塩漬け提唱者の説得に応用できるのでは？という理論です。自分で書いてて良くわからなくなってきましたが続けます。


# 振袖で泳ぐ人を説得するには？
まず大前提として、**泳ぐ時は水着を着ましょう。** 至極当たり前ですが、これを懇切丁寧に説得することがKubernetesのバージョンアップの必要性につながると信じて考えていきます。

## そもそもなぜ泳ぎたいのか？
まずそもそも泳ぐ必要があるのか？というのは説いてもいいかと思います。例えば「暑いから涼しくなりたくて」だったらエアコンつけるとかの選択肢があります。そうすれば振袖着たままでも目的は達成できます。「泳ぐ練習がしたい」とか「泳がざるを得ない状況にある」といった理由でない限りはそのような検討をするべきなので、まずは泳ぐ目的を明確化することは大事です。

## なぜ泳ぐ際に振袖を着ておきたいのか？
泳ぐ理由があるとした場合、じゃあなんで振袖で泳ぎたいのか？を確認するでしょう。想定される理由は以下でしょうか？
* すでに振袖を着ていて、水着に着替えるのが面倒（コストを懸念）
* 新たに水着を買う必要がある（コストを懸念）
* 一度脱ぐと、また着るのが大変 or もう着られないから（リスクを懸念）

## なぜ泳ぐ際は水着を着るべきなのか？
水着を着るべき理由はいくつかあると思います。
* 水着の方が泳ぎやすいから（機能性・メリットの享受）
* 振袖は繊細でそのまま泳ぐと破れてしまうから（着替えないリスクを回避）
* 世の中のルールで、全裸で泳ぐことはNGだから（外部要因からなる必要性）

## 説得してみる

以上を踏まえ、振袖を着て泳ぎたい人に対しての説得はこんな感じでしょうか。
* 泳ぎたい理由はわかりました。あなたは泳げるようになりたいのですね。
* 振袖で泳ぎたいと考える理由もわかりました。たしかに着替える手間や、着替えることによるリスクがあることは事実です。
* しかし、それでも振袖のまま泳ぐのではなく水着を着ましょう。
* 水着を着ることでより効率的に泳ぐことができます。また振袖は水に浸かると破れたり汚れたりして、復旧できなくなります。その結果、本来着るべきタイミングで着用できなくなります。
* 水着に着替える行為を無視することで得られるメリットと比べて、上記のデメリットが致命的と考えます。
* 反面、水着を着ることのメリットは大きいです。なにより、当初の「泳げるようになる」という目的を達成するためには水着が最適な選択です。
* なお一番手間がないのは何も着ないことですが、それは法律上禁止されています。


ここで大事なのが、「常識的にNGでしょ」というスタンスをいかに見せずに説得することです。
振袖着て泳ぐという当たり前に考えてNGなことを、こんなに丁寧に説得できたわけです。Kubernetesの塩漬けがNGなことも説得できる気がしてきましたよね？

# ではKubernetesでは？
ここまで一気に書いてきてまじで何書いてるの状態でしたが、走り切ります。

## なぜKubernetesを使うのか？
振袖着て泳ぐ人に「そもそもなんで泳ぐの？」って聞いたのと同様に、Kubernetesを塩漬けしたい人がいたら「そもそもなんでKubernetes？」と聞いてみてください。意外とここに目的がない、もしくはKubernetesを導入しなくても別の方法で満たせる目的である可能性があります。ここでコンテナ化の本来のメリットである「開発スピードの向上」や「自律化機能による運用コスト削減」などの回答が得られるのであれば、もう少し踏み込んでいきます。

## なぜKubernetesを塩漬けしたいのか
なぜ塩漬けしたいのかを考えてみましょう。
ここでも理由を突き詰めていくと「リスクの回避」と「コスト増の回避」に大別されるかと思います。
* リスク
    * バージョンアップ後の仕様変更によるサービス影響
    * バージョンアップ失敗によるクラスター故障
    * 新しいソフトウェアバグの混入による動作不良
* コスト
    * リスク排除のための検証コスト
    * バージョンアップ作業のためのメンテナンスウィンドウ確保の調整コスト
    * バージョンアップの作業コスト

## なぜKubernetesをバージョンアップするべきなのか
冒頭でも軽く触れましたが、こちらも説得するためにはきちんと根拠を並べていきましょう。
### 新機能の追加
Kubernetesは日々開発が行われ、開発・運用の効率化を促進するための新機能が追加されていきます。Kubernetes導入の目的を継続的に達成するためには、新機能をうまく活用していくことが必要です。

### セキュリティ対策
Kubernetesではたびたびセキュリティパッチが提供されます。利用者は定期的にセキュリティパッチを適用することで脆弱性を突いた攻撃を防御することができます。

### バグのFIX
Kuberntesはソフトウェアのため、バグが混入している可能性があります。バグの対応は基本的にパッチリリースを適用（アップグレード）する形になります。なお性能向上や安定化もパッチリリースに含まれます。

### サポート
Kubernetesにおける上記の対応は、リリース後1年間行われます。逆に1年を過ぎるとセキュリティの脆弱性やバグが発見されてもバックポートされません。

以上より、コンテナ導入効果の最大化には、Kuberneetsの継続的なアップグレードが必要です。


## 説得してみる
せっかくなので、振袖の際の文言を流用して作ってみましょう。
* Kubernetesを使う理由はわかりました。あなたは開発スピードを向上させたいのですね。
* Kubernetesを塩漬けしたい理由もわかりました。たしかにバージョンアップという変更リスクがあることは事実です。すなわち、あなたは開発スピードだけでなく、システムの信頼性も担保したいのですね。
* しかし、それでもKubernetesは継続的にバージョンアップしましょう。
* Kubernetesをバージョンアップすることでより開発の効率化が図れます。またバージョン固定するとサポート切れでセキュリティ対策やバグFIXが行われなくなります。その結果、システム障害やセキュリティ事故につながります。
* Kubernetesを塩漬けすることで得られるメリットと比べて、上記のデメリットが致命的と考えます。
* 反面、Kubernteseを継続的にバージョンアップするメリットは大きいです。なにより、当初の「開発スピードの向上」と「信頼性の担保」という目的を達成するためには継続的なバージョンアップが最適な選択です。
* なお理想はバージョンアップしなくても信頼性が担保されることですが、Kubernetesのサポートライフサイクルの関係上、それは実現されません。

ふむ、それっぽくはまとまった気がします。

## 懸念を払拭するファクター
Kubernetesの場合は振袖のケースと違い、相手の懸念を払拭するための手段があり、ネット上や書籍に知見がまとまっていたりします。こういった要素も上記の説得と共にインプットしてあげると良いかと思います。

### リスク
* バーションアップの仕様変更によるサービス影響→開発環境や検証環境で事前に確認する
* バージョンアップ失敗によるクラスター故障→B/Gデプロイメントで故障時の切り戻しを実現する
* 新しいソフトウェアバグの混入による動作不良→塩漬けでも多少なりのリスクはある。そもそもそういったものに対応できるためにバージョンアップの手法を確立しておくことが重要

### コスト
* リスク排除のための検証コスト→テストの自動化やチェックポイントの明確化で検証を効率化する
* バージョンアップ作業のためのメンテナンスウィンドウ確保の調整コスト→B/Gデプロイメントでアプリ無停止を実現する
* バージョンアップの作業コスト→作業の自動化



# おわりに
なんとか走りきりました。前半の振袖のくだりいらないんじゃね？と思いましたが、きっと意味のあることだと信じてます。
冒頭のツイートは「常識的にNGなんだぜ」ということが言いたかったのだと思います。2000%同意ですが、Kubernetes塩漬けを提唱する人は「振袖で泳ぐことが良し」とされてきた文化を正しく生き抜いた方々なので、きちんと順序立てて説得することが必要です。つまり相手の思いを汲み取ることが説得の第一歩です。
皆さんも一緒に根気強くKubernetesのバージョンアップの必要性を訴求していきましょう。