PR

CNDO2021、Kubernetesがない世界とある世界の違いをインフラエンジニアが解説

2021年7月29日(木)
松下 康之 - Yasuyuki Matsushita
Kubernetesがある世界とない世界を比較して、クラウドネイティブになるためのヒントを解説するセッションを紹介する。

CloudNative Days 2021 ONLINEでは、クラウドネイティブなシステムを想定するゴールとしてシステムに使われるソフトウェアを解説するセッションが主なコンテンツとなっている。今回は「クラウドネイティブではすでにデファクトスタンダードであるKubernetesを使わなくてもクラウドネイティブは実装できるのか?」を解説するセッションを紹介したい。タイトルは「Kubernetesがない世界線のCloudNativeジャーニー」で、プレゼンテーションを行ったのはあさぎ氏だ。

「Kubernetesがない世界」とある世界を比較して解説

「Kubernetesがない世界」とある世界を比較して解説

最初にレガシーなシステムにおける開発から本番環境への実装を図式で解説。ここではデベロッパーがコードを書いてGitリポジトリーへのPushを行い、JenkinsがそれをフックにしてArtifactを生成し、最終的に運用担当者が実装する流れを示している。Gitリポジトリー、Jenkinsという名前が出てくることからわかるように、このセッションにおける「レガシー」は「CI/CDまではできているが、Kubernetesが入っていない世界」を指している。

レガシーなシステムの開発から実装までを解説

レガシーなシステムの開発から実装までを解説

次にクラウドネイティブなシステムに至るまでの段階を解説したこのスライドでは、ゼロから作り直す方法と、リフト&シフトする方法について説明している。

既存システムがある状況では、ゼロから作り直す方法はビッグバンリライトとして時間だけがかかる割に既存システムと変わらないシステムができてしまうことを説明し、現実的な解として徐々にシステムを置き換えていくリフト&シフトが良いことを解説した。しかしその場合でもコードのリファクタリングは必須であり、機能や依存性の分解、テストの書き直しなどが必要になり、単にクラウドにリフトしただけではホストを変えただけのリホストになってしまうと強調した。

クラウドネイティブなコードに書き直す方法を紹介

クラウドネイティブなコードに書き直す方法を紹介

ここであらためて「クラウドネイティブとは何か?」を再確認する意味でCNCFの定義を参照し、その中で重要なキーワードを抜き出してポイントを整理した。

CNCFのクラウドネイティブの定義を紹介

CNCFのクラウドネイティブの定義を紹介

その中からクラウドネイティブにするための最終的なゴールは「素早く継続的にユーザーに価値を届ける」ことであり、そのために「変更を最小限の労力で頻繁かつ予測どおりに行う」必要があることを解説した。

ゴールは「素早く継続的にユーザーに価値を届ける」こと

ゴールは「素早く継続的にユーザーに価値を届ける」こと

このようなシステムには、スケーラブル、回復性、可観測性、堅牢な自動化、管理のしやすさ、疎結合という特性を備えたソフトウェアが必要であると説明した。

クラウドネイティブの特性とは

クラウドネイティブの特性とは

先ほどのレガシーなシステムに対比して、Kubernetesがある世界として挙げたのがこのスライドだ。ここではデベロッパーがコードをGitにPushし、それがコンテナイメージとして生成され、その実装方法をManifestとして運用担当者がコードを書いて、最終的にKubernetesが導入されたシステムに実装されていく流れを説明した。

Kubernetesがある世界の特徴

Kubernetesがある世界の特徴

Kubernetesがある世界ではコンテナによって可搬性が上がること、宣言的であることなどがメリットとして強調された形になっている。その一方、組織としてKubernetesについて理解を深め、常にその進化にキャッチアップしていく必要があることが課題として敢えて挙げられている。

Kubernetesがある世界からKubernetesを取り除いたらどうなるのかを解説

Kubernetesがある世界からKubernetesを取り除いたらどうなるのかを解説

このスライドでのポイントは、Kubernetesを取り除いてもシステムとしては実現できることだろう。「素早く継続的にユーザーに価値を届ける」というシステムのゴールに、Kubernetesの存在は前提ではないことを説明した。

Kubernetesがなくてもシステムは構築できる

Kubernetesがなくてもシステムは構築できる

この文脈では、これまで使っていたレガシーなシステムのツールを使ってコードだけをリファクタリングして整理分解すれば、Kubernetesを学ぶというコストを支払わなくてもクラウド的なシステムは作れるはずであると説明している。

Kubernetesがある世界とない世界の比較

Kubernetesがある世界とない世界の比較

このスライドではKubernetesがある世界とない世界の比較を示している。ある世界は宣言的、ない世界は命令的(手続的)で、成果物と管理対象もそれぞれ異なっていると整理して解説を行った。Kubernetesの特徴である宣言的なシステムであることには触れられている一方、Kubernetesが持つ自動修復やスケーラブルな特性をレガシーなシステムでどのように実装するのかについては触れられていないのは興味深い。

ある世界とない世界で共通することは何か

ある世界とない世界で共通することは何か

このスライドでは両方の世界に共通する項目を挙げている。テストを書いて実行し、CI/CDを頻繁に行うことや自動化、インフラのコード化が必須のポイントとして強調されている。「分散モノリス」というのは矛盾しているような用語だが、モノリシックなアプリケーションがネットワークを介して分散連携しているようなシステムを指すのだろう。これはリファクタリング不足の産物なのかもしれない。

次にKubernetesがない世界の落とし穴として紹介したのがこのスライドだ。

Kubernetesがない世界の落とし穴とは

Kubernetesがない世界の落とし穴とは

ここでは、デベロッパーと運用が分離しながらもオーバーラップする領域があることでオーバーヘッドが発生し、開発から実装までのサイクルが素早く回らないことを最初の欠点として挙げている。だが実際にはその問題を解決している例もある。CloudNative Day Tokyo 2020でメルペイが発表したセッションでは、開発から運用までも同じチームが行うことでサイクルを加速し、異なるチームにおいても使うツールや言語を統一して技術スタックの差をなくしていることを解説している。

参考:CNDT2020シリーズ:メルペイのマイクロサービスの現状をSREが解説

メルペイの手法は、あらゆる企業に適用できるものではないだろう。しかしあさぎ氏も次のスライドで開発から運用までを同じチームで行うことやツールやインフラの共通化を提案しており、この発想が現実的な解として理解されていることがわかる。

解説策を提案

解説策を提案

特に組織についてはTeam Topologiesを引用して複数のチームについて解説を行った。

このスライドにおけるStream-aligned Teamは開発から運用までを行う。Enabling Teamは機械学習など特化した分野での開発を支援する専門チームであり、Platform Teamはプラットフォーム自体の運用管理を行うものだ。Platform Teamの役割は単にインフラを運用するのではなく、開発チームがセルフサービスで運用を行えるようなプラットフォームを開発して提供するというものであり、レガシーな運用チームとは大きく異なる部分だろう。

参考:Team Topologies

落とし穴に対する新しい組織の構成

落とし穴に対する新しい組織の構成

さらにその組織の持つ役割についても言及し、レガシーな世界からクラウドネイティブの世界への移行に際し、組織がどう変わっていくのかを説明した。

クラウドネイティブを実装できる新しい組織体制

クラウドネイティブを実装できる新しい組織体制

ここではStream-aligned Teamが開発から運用までをカバーし、それを専門チームであるSREが支援するという形態を取っている。MicrosoftのMark Russnovich氏が「Kubernetesはデベロッパーにとっては難しい」として提案したアプリケーションオペレーターという中間的な役割の考え方を導入すれば、アプリケーションオペレーターもの開発チームに含まれることになるのだろう。

そしてKubernetesがない世界においては、Kubernetesに対する学習コストが不要になる代わりにKubernetesが担っている役割を自身で開発もしくは用意する必要があること、組織も変化に対応できるように変わっていく必要があることなどを示した。Kubernetesがなくてもクラウドネイティブになることは可能であるが、実際には難しいことを指摘した。

「ない世界」の欠点を再確認

「ない世界」の欠点を再確認

最後にまとめとして、クラウドネイティブにKubernetesは必ずしも必須ではないが、Kubernetesに乗ることで不要な労力をなくすことができる、開発チームが運用までカバーすることなどを解説してセッションを終えた。

まとめ

まとめ

このセッションであさぎ氏の解説する「レガシー」が、比較的新しいシステムに見えてしまうのは筆者がこの業界を長く見ているからかもしれない。

組織の構成にまで踏み込んで解説していることは興味深いと言える。日本の企業ではDevOpsが組織の壁に阻まれてしまう例も多数存在することを考えると「組織の構造がソフトウェアにも反映する」というコーンウェイの法則を理解した上で、それを打破するためには組織もツールも変わっていくしかないという提案として有効だろう。

著者
松下 康之 - Yasuyuki Matsushita
フリーランスライター&マーケティングスペシャリスト。DEC、マイクロソフト、アドビ、レノボなどでのマーケティング、ビジネス誌の編集委員などを経てICT関連のトピックを追うライターに。オープンソースとセキュリティが最近の興味の中心。

連載バックナンバー

クラウドイベント
第15回

CNDO2021、CNCFの提供するクラウドネイティブランドスケープを解説するセッションを紹介

2021/8/5
クラウドネイティブランドスケープを中心にCNCFの活動を解説したセッションを紹介する。
設計/手法/テストイベント
第14回

CNDO 2021、技術的負債を現場のエンジニアが対処する方法を解説

2021/8/2
時間の経過とともに溜まってしまう技術的負債に、現場のエンジニアはどう対処するべきかをAWSのエバンジェリストが解説したセッションを紹介する。
クラウドイベント
第13回

CNDO2021、Kubernetesがない世界とある世界の違いをインフラエンジニアが解説

2021/7/29
Kubernetesがある世界とない世界を比較して、クラウドネイティブになるためのヒントを解説するセッションを紹介する。

Think IT会員サービス無料登録受付中

Think ITでは、より付加価値の高いコンテンツを会員サービスとして提供しています。会員登録を済ませてThink ITのWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

他にもこの記事が読まれています