Kubernetesは、クラスター内またはクラウドコンピューティング環境でコンテナをデプロイ、運用、スケーリングするために必要なサービスと管理機能を提供する、コンテナオーケストレーションプラットフォームです。幅広い業界の組織で、標準的なコンテナオーケストレーション手法となっています。特に、コンテナ化されたアプリケーションのスケーリングを目指す組織で広く利用されています。
Kubernetesは、コンテナワークロードを柔軟に自動化、デプロイ、管理する方法を提供します。Kubernetesストレージは、Kubernetesクラスター環境内でさまざまな形態の永続的なステートフルデータ保持を可能にするため、ストレージ管理者にとって有用です。こうした環境は、ますます普及しています。
この記事では、Kubernetesと永続ストレージの概要、その仕組み、利用するメリットについて説明します。
Kubernetesとは?
明確にしておくと、Kubernetesストレージはクラウドで使われることもありますが、クラウドストレージとは別個の存在です。Googleは2014年、同社のコンテナデプロイを管理するためのオープンソースプロジェクトとしてKubernetesプラットフォームを開発しました。2016年には、プラットフォームはLinux FoundationのCloud Native Computing Foundation(CNCF)に移管され、現在では、Amazon Web Services(AWS)、Oracle、Microsoft Azure、およびGoogle Cloud Platformを含む、主要なすべてのパブリッククラウドプロバイダーが支援するマルチステークホルダープロジェクトとなっています。
Kubernetesは、移植性を備えていることから、近年重要なテクノロジーとなっています。あるパブリッククラウドで動作するKubernetesコンテナは、ほとんど、あるいはまったく変更せずに別のクラウドでも実行できます。この移植性により、マルチクラウドデプロイも可能になります。これは、複数のクラウドプラットフォームにまたがるコンテナデプロイをKubernetesでオーケストレーションするものです。
KubernetesがCloud Native Computing Foundationの基盤プロジェクトであることもあり、クラウドネイティブという言葉はKubernetesと直接結び付けて使われることがよくあります。この場合、クラウドネイティブとは、データセンター向けに構築してからクラウドに移植するのではなく、ストレージなどを含め、クラウド向けに特化して構築されたアプリケーションを指します。
アプリケーションコンテナは、移植可能な形式でアプリケーションをパッケージ化し、提供する方法です。Kubernetesで最も一般的に使われるアプリケーションコンテナの種類はDockerコンテナです。Kubernetesでは、複数のコンテナセットをデプロイ、スケーリング、複製し、高可用性とアプリケーションの安定性を実現できます。
詳しくは:Kubernetesレビュー
Kubernetesアーキテクチャ:Kubernetesの仕組み
Kubernetesは、ノードのクラスター内で「マスター・ワーカー」構造を使用すると説明できます。マスターノードはコントロールセンターとして機能し、クラスターの運用とシステム全体の状態を監視します。具体的には、実際にアプリケーションを実行するコンテナをホストする下位の「ワーカー」ノード全体で、スケジューリング、スケーリング、ワークロード全般のオーケストレーションなどを行います。通常、マスターノードはAPIサーバーを介してワーカーノードと通信します。
Kubernetesアーキテクチャは、レプリケーションと可用性を最優先に設計されています。Kubernetesアーキテクチャには、次の主要な要素が含まれます。
- Kube Master:異なるノード間で分散オーケストレーションを行うための主要な制御ポイントです。
- Node:Kube Masterから割り当てられたタスクを実行するシステムリソースです。
- Pod:1つ以上のコンテナをPod内で実行できます。各Podには、固有のIPアドレス、ネットワーク、ストレージリソースが割り当てられます。
- Replication Controller/Replica Set:指定された数のPodレプリカが常時稼働するようにします。
- Services:Podへのアクセスを可能にする安定したネットワークエンドポイントを提供し、ロードバランシングやサービスディスカバリといったメリットを実現します。
- Deployments:レプリカのロールアウト、ロールバック、スケーリングを簡単に行い、アプリケーションの管理と更新を効率化します。
- ConfigMaps and Secrets:アプリケーションコードから設定データや機密情報を分離できるため、セキュリティが向上します。
- Persistent Volumes:個々のPodのライフサイクルを超えてデータを保存し、アクセスできるようにします。
- Ingress:クラスター内のサービスへの外部アクセスをサポートし、ゲートウェイとして機能するとともに、高度なルーティングとSSA終端を可能にします。

Kubernetesにより、クラスター内またはクラウドコンピューティング環境でコンテナをデプロイし、スケーリングできます。
Kubernetesの永続ストレージの仕組み
Kubernetesが初めて開発された当初は、主に永続ストレージを必要としないステートレスアプリケーションに使われていました。しかし現代のKubernetesは事情が異なり、ステートフルアプリケーションと永続ストレージを十分に管理できます。
Kubernetesストレージについて理解しておくべき重要な概念がいくつかあります。まず、ストレージシステムへの接続ポイントとなるContainer Storage Interface(CSI)があります。また、永続ストレージオブジェクトなど、ストレージを要求して接続するために利用できる、Pod内のストレージ有効化機能もあります。
Container Storage Interface
CSIはKubernetesに比較的最近追加された機能ですが、ストレージの管理と接続を大幅に簡素化します。
CSI以前は、新しいストレージデバイスを利用可能にするために、ストレージデバイスドライバーをKubernetesのコアコードに直接統合する必要があり、より多くの時間がかかりました。CSIは、複数のメリットをもたらす拡張可能なプラグインアーキテクチャを提供します。
Container Storage Interfaceの主な要素は次のとおりです。
- 拡張可能なプラグインフレームワーク:ストレージドライバーはプラグインとして提供され、Kubernetesにハードコードされていません。
- 更新:CSIにより、ストレージハードウェアおよびソフトウェアベンダーはドライバーを容易に更新できます。
- セキュリティ:CSIでは、Kubernetesとストレージの間の抽象化がより明確になるため、セキュリティが強化されます。
Kubernetesの永続ストレージオブジェクト
CSIはストレージデバイスをKubernetesクラスターに接続する方法を提供しますが、Kubernetesアプリケーションがストレージにアクセスするには、依然としてサポートが必要です。そのため、永続ストレージオブジェクトを定義するための重要な概念がいくつかあります。
- Pod:Podを使用して、永続ストレージボリュームをコンテナにマウントできます。
- PersistentVolumeClaim(PVC):アプリケーションがストレージを要求するときはPVCとして要求し、ストレージボリュームをPodで使用できるようにします。PVCは手動でプロビジョニングすることも、ポリシーによって動的にプロビジョニングすることもできます。
- PersistentVolume(PV):PVは、Kubernetesで永続ストレージを定義するための管理オブジェクトです。PVは、Container Storage Interface(CSI)を介して接続された実際の物理ストレージへのポインターを提供します。
- StorageClass:StorageClassオブジェクトは、同じ特性を持つPVの集合であり、アプリケーションがデプロイメントに適した種類のストレージを取得できるようにします。
- StatefulSet:Kubernetesはレジリエンスを重視して構築されているため、StatefulSetオブジェクトは設定可能な数のPodレプリカを実行し、各PodにはPVCテンプレートから独自のPVCが割り当てられます。各Podは安定した識別情報を持ち、スケールアップまたはスケールダウンできます。
Kubernetesのメリット
Kubernetesは、コンテナ化されたアプリケーションの管理プロセスを改善しようとする組織に、次のような重要なメリットをもたらします。
- スケーラビリティ:Kubernetesはクラスター全体のワークロードのスケーリングと分散を自動化するため、アプリケーションはワークロードの増加に対応しながら高可用性を維持できます。
- 自動化:Kubernetesのインフラストラクチャとアプリケーションの設定は、具体的な命令を使用する宣言型の方法で定義されます。これにより、複製、バージョン管理、自動化を簡単に行えます。
- 効率性:Kubernetesは、リソース割り当てを最適化し、コストを削減してパフォーマンスを最大化することで、リソース効率を高められます。
- コンテナの移植性:基盤となるアプリケーションインフラストラクチャを事実上意識せずに済むため、Kubernetesアプリケーションは異なる環境で実行できます。オンプレミスのデータセンターとクラウドリソースを組み合わせたハイブリッドネットワーク構成を利用する組織にとって、特に価値の高いメリットです。
- 自己修復:Kubernetesはコンテナの障害を検出すると、自動的に再起動したり、場合によっては置き換えたりできるため、レジリエンスとフォールトトレランスが向上します。
- コミュニティのサポート:オープンソースリソースであるKubernetesは、常に進化するコミュニティからの知見、新しいプラグイン、最新のツールやベストプラクティスの恩恵を受けています。
結論:Kubernetesと永続ストレージ
Kubernetesは急速に発展しているテクノロジーであり、クラウドベンダーと企業の双方に採用され、よりアジャイルでスケーラブルなアプリケーション提供を可能にしています。Kubernetesストレージを適切に構成すれば、データベースやアプリケーションデータを多くのアプリケーションで作成・アクセスできるようになり、速度と効率性をさらに高められます。
次の記事:Kubernetesの代替製品トップ8