CNDT2021、Kubernetes上のステートフルアプリに関する深い考察をゼットラボのエンジニアが解説

2021年12月2日(木)
松下 康之 - Yasuyuki Matsushita
CloudNative Days Tokyo 2021、ゼットラボの坂下氏がKubernetes環境でもステートフルアプリが可能であることを解説するセッションを紹介。

CloudNative Days Tokyo 2021から、ステートフルなアプリケーションをKubernetes環境下で実行する際のポイントを解説したセッションを紹介する。ヤフージャパンの技術開発会社であるゼットラボのエンジニア坂下幸徳氏によるセッションのタイトルは「ステートフルアプリ on Kubernetesの現在と今後の展望」というものだ。サブタイトルの「~ステートフルの苦手意識を吹っ飛ばそう~」に坂下氏の想いが現れていると言えるだろう。

Kubernetesでは難しいとされてきたステートフルアプリの実装と永続的ストレージについて、実際はそれほど難しいものではないということをさまざまな角度から解説する内容となっている。元日立製作所で2018年からゼットラボに移っている坂下氏は、さまざまなカンファレンスでスピーカーをしている経験豊富なエンジニアだ。坂下氏のストレージやコンテナ、Kubernetes関連のソフトウェアに関わってきた経験が滲み出てくる深い考察を伴った内容となっており、特定のソフトウェアの機能を解説するだけではない深みのあるセッションとなった。

セッションを行う坂下氏

セッションを行う坂下氏

坂下氏は20分という短い時間の中で「コンテナでステートフルアプリは難しいは風評」であり、すでに多くのソフトウェアがKubernetes上でのコンテナを本番環境で使っていること、そしてKubernetesの永続的ストレージの基本、仮想マシンとの性能比較、ステートフルアプリを運用する際のポイント、MySQLを例にとってスケールアウトの概要解説、Kubernetesでのスケールアウトの方法論、ステートフルアプリに要求される稼働率についての考察、さらに自身の経験から作り上げたステートフルアプリに至るまでのトレイルマップ、Kubernetes環境でのストレージ技術の動向などを解説している。

「コンテナでステートフルアプリ」はもう当たり前

最初に紹介したのは「Kubernetesではステートフルアプリは難しい」という認識に関するスライドだ。

ステートフルアプリを仮想マシンで使うのはもう当たり前

ステートフルアプリを仮想マシンで使うのはもう当たり前

ステートフルアプリを仮想マシンで実行することは、2009年頃の認識では当たり前ではなかったが、2021年現在では仮想マシンはベアメタルなどと同様に選択肢のひとつとなっていることを紹介している。コンテナ上でステートフルアプリを使うことに積極的でない人は性能や設定の難しさなどを理由に挙げているが、それは風評ではないのか? という問題提起を行っている。

CNCFの調査では既に55%が本番環境でステートフルアプリをコンテナ上で使っている

CNCFの調査では既に55%が本番環境でステートフルアプリをコンテナ上で使っている

CNCFの調査の結果を挙げて、すでに半分以上の企業がステートフルアプリをコンテナ上で利用していることを紹介。CNCFのメンバーは先進的であることを差し引いても、すでに忌避することではないと解説した。またコンテナ上でステートフルアプリを使うためのOperatorも数多く作成されていることを合わせて紹介した。

OperatorHub上に数多く登録されているステートフルアプリの例

OperatorHub上に数多く登録されているステートフルアプリの例

Kubernetesの永続的ストレージ

次にKubernetesの永続的ストレージの基本を解説し、PersistentVolumeClaim(PVC)、PersistentVolume(PV)、StorageClass(SC)というシンプルな階層構造となっていることを紹介した。

Kubernetesの永続的ストレージの概要

Kubernetesの永続的ストレージの概要

コンテナ(Pod)から物理的なストレージに至る経路についても1枚のスライドで解説を行い、ここでもシンプルな構成になっていることを紹介した。

Kubernetesのストレージに至るパスを解説

Kubernetesのストレージに至るパスを解説

コンテナと仮想マシンのストレージ性能比較

ここでベアメタル、仮想マシン、Kubernetesのアプリケーションからストレージに至るまでの仕組みを解説し、コンテナのそれが実際にはシンプルな構成になっていること、仮想マシン上にKubernetesを実装する場合は2階建ての構成になることを解説した。

ベアメタル、コンテナ、仮想マシンのストレージの概要を紹介

ベアメタル、コンテナ、仮想マシンのストレージの概要を紹介

そしてIBMが2015年に公開したIEEEの論文を使ってベアメタルとコンテナ、仮想マシンによるIO性能の比較を紹介し、実際には仮想マシンよりもコンテナ実装のほうが性能高いことを解説した。

実際にはコンテナよりも仮想マシンのほうがIO性能は低いという論文を紹介

実際にはコンテナよりも仮想マシンのほうがIO性能は低いという論文を紹介

参考:An updated performance comparison of virtual machines and Linux containers

運用のポイント

ここまででコンテナ、Kubernetesで永続的ストレージを避ける理由として挙げられる「難しい」と「遅い」がいずれも正しくないことを解説した坂下氏は、次に運用面に踏み込んで解説を行った。

永続的ストレージを使うアプリの運用面でのポイントを解説

永続的ストレージを使うアプリの運用面でのポイントを解説

データを利用するアプリケーション側は、キャッシュにデータを残したまま終わらないようにする配慮が必要であること、スケールアウトするためのレプリケーションなどにも必要な操作があることなどを紹介した。

次のスライドではMySQLを例に挙げて1つのインスタンスからレプリケーションを行う一般的な操作を解説。ここでも実際に運用に関わっている経験が生きている内容となった。

MySQLを例に挙げてレプリケーションを解説

MySQLを例に挙げてレプリケーションを解説

その上で、Kubernetes環境でその操作を行う場合のパターンを紹介。ここでは2番目にKubernetesの特徴であるReconciliation Loopに注目して解説を行っている。

Kubernetesの自律性を解説

Kubernetesの自律性を解説

Kubernetesの特徴である自律性については、同じくゼットラボのエンジニアがGoogleのBorgの生い立ちなどから考察を行っているので、そちらも参考にして欲しい。

参考:これから学ぶKubernetesのReconciliation Loop

稼働率に関する考察

そしてここからはステートフルアプリに求められる永続性の根拠となる稼働率についても考察を行っている。例えば1年に1回だけ1時間停止する場合と、毎月5分だけ停止する場合が同じ稼働率99.988%となることを紹介。これまでのステートフルアプリに求められる稼働率の考え方について、年に一回だけ停止するようなシステムを求める考え方ではなく、常にアプリケーションや利用頻度が変化するような場合についてはMTBF(平均故障間隔)を短くする方法、つまりKubernetesのようなシステムを想定するべきであると解説した。

稼働率の考え方の違いを紹介

稼働率の考え方の違いを紹介

ステートフルアプリ実装のトレイルマップ

次のスライドは、坂下氏が考えるステートフルアプリをKubernetesで実装する場合のステップをトレイルマップとして紹介したものだ。これは、CNCFによるクラウドネイティブなシステムへのステップを紹介しているトレイルマップを参考にした発想だろう。

ステートフルアプリを実装するステップを紹介

ステートフルアプリを実装するステップを紹介

ここではファイル共有、バックアップ、シングル構成とマルチ構成のPodによるステートフルアプリ、Operatorによる実装などの各ステップを解説した。

マルチ構成のMySQLのレプリケーションを紹介

マルチ構成のMySQLのレプリケーションを紹介

ここではアプリケーションの特性、利用されるデータベースの種類などによってさまざまな方法があることを語り、必ずしも1つの方法でカバーできないことを強調した。

またRed Hatなどが推進するKubernetes運用のためのフレームワークOperatorにも言及し、利用するのは容易だが実際にOperatorを開発するにはノウハウが必要であることを解説した。

Operatorによる自律的な運用管理を解説

Operatorによる自律的な運用管理を解説

エッジ向けストレージ

ここまででKubernetes上でのステートフルアプリの運用面での解説を終え、次に坂下氏が注目しているエッジ向けのストレージ、そしてKubernetesのSIGであるStorageから発生したワーキンググループで議論されているアプリケーションの視点から、バックアップを実装する機能の進展を解説した。

エッジ向けのストレージを解説

エッジ向けのストレージを解説

エッジ向けではSoftware Defined Storage(SDS)がネイティブにコンテナ対応していること、IoTの基盤である省電力CPUであるARMへの対応が始まっていることなどを紹介した。

Data Protection WGで議論されている内容を紹介

Data Protection WGで議論されている内容を紹介

これはベンダーに依存しないニュートラルなアーキテクチャーでバックアップのあるべき姿を実装しようという試みだと思われるが、「実際に今足らないコンポーネントは何か?」「どうあるべきか?」などを議論の上でKEP(Kubernetes Enhancement Proposal)についても紹介し、現材進行形の機能拡張についても解説を行った。

バックアップに関する計画されている機能拡張

バックアップに関する計画されている機能拡張

KEPとは:https://github.com/kubernetes/enhancements/blob/master/keps/README.md

バックアップに関する機能拡張の提案を紹介

バックアップに関する機能拡張の提案を紹介

最後にまとめとして、コンテナ(Kubernetes)でステートフルアプリを動かすのは選択肢のひとつであることを再度、強調してセッションを終えた。単にKubernetesの機能を紹介するだけではなく、業界動向や推奨する手順を解説するなど、経験豊富なエンジニアとしての考察がまとめられた充実した内容となった。

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

連載バックナンバー

仮想化/コンテナイベント
第17回

CNDT2021、CNCFの元TOCメンバーがOSSにおける標準の重要性を解説

2022/2/22
AppleのシニアエンジニアKatie Gamanji氏が、クラウドネイティブにおける標準の重要性を解説したセッションを紹介する。
セキュリティイベント
第16回

CNDT2021、メルカリがマイクロサービスのセキュリティを強固にするための施策を解説

2022/2/1
CNDT2021から、メルカリのエンジニアによるマイクロサービスのセキュリティを強化する施策を解説するセッションを紹介する。
システム開発イベント
第15回

CNDT2021、クラスター運用自動化をGitOps的に行う方法論をサイバーエージェントのエンジニアが解説

2022/1/28
CNDT2021から、サイバーエージェントのエンジニアによる、GitOps的にクラスター運用自動化を行う際のポイントを解説したセッションを紹介する。

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

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