エンプラ企業におけるK8s DrivenなCloudNative Journeyを思う年の瀬
このエントリーは 以下のアドベントカレンダーの記事です
背景
現在、エンプラ企業のお客さんに対してSREとしてCloudNativeな技術やk8sを使用して支援を行なっているがその中でkubernetesそもそもの利用について少し考える機会があった。
k8sにおける技術的・組織的課題はどの組織においてもあるが、ステークホルダーが多岐にわたるエンプラ企業ではその課題はさらに多くなり、また解決も難しくなる。
課題に対して深く長く向き合うほど、元々あったk8s導入のモチベーションや本来のk8s利用意義を見失いがちである。
認識を揃え、課題解決の議論を深めるには、一人一人が組織におけるk8sの利用意義、k8s利用における理想状態を言語化しておく必要があると案件を通じて感じた。
では、いったいどんな課題があるのか・・・
エンプラ企業のk8s利用における課題(一例)
-
技術的課題
- k8sを動かすのに必要なリソースのコスト
- 成長する組織・サービスに対するスケーラビリティ
- 現行運用ソフトウェアとのインテグレーション
- アプリケーションモダナイゼーションに向けたチャレンジ
-
組織的課題
- 組織がサイロ化しており、オーナーシップを持てる人が限定されてしまう
- サービス数が多く各サービスを配慮しながら進めるのでは、調整やコミュニケーションのコストがかかり、即効性のある成果が出しにくい
- 認識統一への障壁が多く、常に同じゴールイメージの同期が取りづらい
-
その他
- ~~設計書、~~仕様書、~~申請など関係各所に納品が求められ、意思決定に必要以上のアウトプットが必要
- (組織・サービスによっては)単純に人員不足
これら課題を「どう解決するか」という議論は少々込み入った話になるので、ここではしないが、そもそものk8sの利用意義から逆算すればこれら課題へのアプローチが見えてくるかもしれないことを思い、k8sの利用意義を改めて考え直してみる。
K8sを使うモチベーション
まず、k8sの特徴を極シンプルかつ抽象化して表現すると以下になるのではないかと思う。
- Declarative(宣言的) API
- Reconciliation loop
- Custom Resource / Eco System
では、エンプラ企業におけるk8sの利用意義とはどのようなものなのか。
他にもいろいろとあると思うが、第一層としてまず認知・認識しておくべきことは概ね下記にあると考えた。
(※ここでいう「利用意義」とは「k8s利用により組織が特に恩恵を受けること」)
- コンテナオーケストレーション
- 複数のコンテナ(Pod)を効率よく管理し、 負荷分散、 ネットワーク設定、 シークレット管理等の設定を宣言的に管理することが可能
→ 組織のガバナンスや権限移譲がされやすくなる
- 複数のコンテナ(Pod)を効率よく管理し、 負荷分散、 ネットワーク設定、 シークレット管理等の設定を宣言的に管理することが可能
- スケーラビリティ
- 動的なスケーリングが可能であり、 需要に応じて自動でリソースを調整できる
→ システムに対して、コスト効率を良く柔軟性を持たせられる
- 動的なスケーリングが可能であり、 需要に応じて自動でリソースを調整できる
- ポータビリティ
- オンプレ基盤やクラウドプロバイダーに依存せず、 環境に依存しない運用が可能
→ モダナイゼーションを図るリフト&シフトのような、異なるインフラ環境への移行が簡略化される
- オンプレ基盤やクラウドプロバイダーに依存せず、 環境に依存しない運用が可能
- リソース効率
- CPUやメモリなどのリソースを最適に使用し、 コンテナ間でリソース共有できるため、 実行環境における効率的なリソース使用が可能
→ ワークロード整備における運用負荷の低減
- CPUやメモリなどのリソースを最適に使用し、 コンテナ間でリソース共有できるため、 実行環境における効率的なリソース使用が可能
- DeploymentとRollback
- 柔軟なデプロイ方式やReconciliation loopの特性により、リリース精度の向上、 必要に応じた迅速なロールバックの実現が可能
→ リリースに対する安定性・安全性の担保により開発生産性の向上
- 柔軟なデプロイ方式やReconciliation loopの特性により、リリース精度の向上、 必要に応じた迅速なロールバックの実現が可能
k8sリソースは宣言的であるという性質上、理想状態(Desired State)への回帰が担保されている
組織統制の取りにくいエンプラ企業では特に、k8sの利用意義「k8s利用の理想状態(Desired State)」を定義し、ステークホルダー間で目線を揃えておくことが重要である
k8sリソースの理想状態を定義するものとしてManifestファイルが存在するが、「組織におけるk8s利用意義と理想状態」 もマニフェストのように言語化し、明確にしておくことが大切であると感じる
(↑本来はここからスタートする方が良いが、スモールスタートだと疎かになりがち)
k8sにおけるテクニカルな支援をする者は、Manifestfileを書けるだけでなく、組織におけるk8sの利用意義から言語化できた方が品質が向上する
簡単に言うと・・・
Kubernetesの特徴としてManifestファイルにk8sリソースのDesired Stateを宣言する
k8sリソースだけではなくそれらを利用する意義もマニフェスト(公約)のように言葉にしてみんなが認識しておくことが大切!
Cloud Nativeへの道のり
CloudNativeの定義は人によって様々だと思うが、”テクニカル”な意味での、「Cloud Native」とは何だろうか?気になったので調べてみると・・・
CNCF曰く以下のように定義されている
https://github.com/cncf/toc/blob/main/DEFINITION.md#日本語版
クラウドネイティブ技術は、パブリッククラウド、プライベートクラウド、ハイブリッドクラウドなどの近代的でダイナミックな環境において、スケーラブルなアプリケーションを構築および実行するための能力を組織にもたらします。
このアプローチの代表例に、コンテナ、サービスメッシュ、マイクロサービス、イミュータブルインフラストラクチャ、および宣言型APIがあります。
これらの手法により、回復性、管理力、および可観測性のある疎結合システムが実現します。 これらを堅牢な自動化と組み合わせることで、エンジニアはインパクトのある変更を最小限の労力で頻繁かつ予測どおりに行うことができます。
Cloud Native Computing Foundationは、オープンソースでベンダー中立プロジェクトのエコシステムを育成・維持して、このパラダイムの採用を促進したいと考えてます。 私たちは最先端のパターンを民主化し、これらのイノベーションを誰もが利用できるようにします。
ポイントを捉えると以下のように解釈できるのではないだろうか
- 疎結合である
- 復元力がある
- 管理しやすい
- 可観測である
- 堅牢な自動化により、頻繁かつ期待通りに最小限の労力で大きな変更が可能
CNCFのプロダクト例を見てみると、成熟度に違いはあるが、上記ポイントを満たす現在のGraduated Projectは以下のようになっている(カッコいい。語彙力)
CNCFのTrail Mapを見てみて分かるように、実践的なCloudNativeを目指すには長く険しい道のりが待っており、一息に実現することは、ほとんど現実的ではない。
特にエンプラ企業においては、現在のシステム運用を維持しながら、許容される変更量・リスクはより限定される。また変更を受け入れられる文化も同時に醸成していく必要がある。
とはいいつつも、私たちがSREの実践を通してきた培ってきたプラクティスである 「小さく始めること」 は、クラウドネイティブを実践する1つの方法であるk8sに適応させられるものでもあると考える。
k8sを導入した既成事実を作ってから徐々に文化を変えていくのもまた道であると思うし、意思決定に時間がかかるエンプラ企業においてはなおさら、まずは「納品」という最初の壁を超えていくことが大事なのかもしれない
k8s周辺エコシステムやツール群は、日々便利なOSSがアップデートされ続けている。
全てをOSSのみで構成する必要は全くない、むしろk8s導入の既成事実作りにはマネージドサービスやサードパーティの商用サービスを使用したほうが敷居は低くなる。
(導入後、第2章として待つ、オペレーション業務、k8sを保守する辛みからは避けられないが。)
ただ、この部分にOSSや周辺エコシステムを使用することでクラウドネイティブな自動化は加速する
エンプラ企業がCloudNativeになるために取り組まなければならないこと
ここまで、k8s利用意義や、CloudNativeの定義からエンプラ企業への実践法を探ってきたが、個人的には、エンプラ企業がCloudNative体質な組織となるために本当に取り組まなければならないことは以下だと考える
- DevOpsしながらステークホルダーへの「納品」を忘れない
- CloudNativeな状態を絶え間なく、継続して目指そうとする文化の醸成
まずは組織に携わる1人1人が、k8sの利用意義、ひいてはその上のCloudNativeを目指す意義を考えて言語化することで文化の醸成に一歩近づくのではないかと感じる
参考
エンプラにKubernetesを導入してみて分かった4つのLessons Learned
Kubernetes再入門 - K8s活用するならこれだけは知っておきたいこと -
全てがクラウドネイティブで良いのか。その謎を明らかにすべく我々はエンプラの奥地に向かった
「VM 時代の開発とKubernetes による Cloud Native な開発のこれから」Infra Study Meetup #2 / infrastudy2-k8s
Discussion