Kubernetes のストレージの概念

完了

Kubernetes は、コンテナー ベースのアプリケーションとそれに関連するネットワークおよびストレージ コンポーネントを管理するオープン プラットフォームです。 管理操作のための一連の堅牢な API によって支援され、デプロイに対して宣言型のアプローチを提供します。

Kubernetes を使ってアプリケーション コンポーネントの可用性の "オーケストレーション" と "管理" を行うために、モダンでポータブルなマイクロサービスベースのアプリケーションを構築して実行できます。

コンテナーの管理とオーケストレーション

コンテナー管理とは、多数のコンテナーを整理、追加、削除、または更新するプロセスです。 コンテナー オーケストレーターは、コンテナー化されたアプリを自動的にデプロイおよび管理するシステムです。 たとえば、オーケストレーターは、環境の変更に動的に対応してマネージド アプリのデプロイ インスタンスを増減させることや、新しいバージョンのサービスがリリースされた場合にすべてのデプロイ コンテナー インスタンスが更新されることを保証することができます。

Kubernetes アーキテクチャ

Kubernetes のアーキテクチャは、クラスター上に構築されています。 Kubernetes クラスターは、次の 2 つのコア インフラストラクチャ コンポーネントに分かれています。

  • コア Kubernetes サービスと、アプリケーション ワークロードのオーケストレーションを提供する "コントロール プレーン"。
  • アプリケーション ワークロードを実行する "ノード"。 各クラスターには少なくとも 1 つのノードがありますが、ノードの数とサイズは定義できます。 "ノード プール" は、同じ構成を共有するノードのグループです。

アプリケーション ワークロードのリソースは "ポッド" に含まれています。 Kubernetes のポッドは、アプリケーションの 1 つのインスタンスを表すエフェメラル リソースです。 これは、共有ストレージとネットワーク リソースを備えた 1 つ以上のコンテナーと、コンテナーの実行方法の仕様で構成されます。 ポッドのコンテンツは常に併置され、同じスケジュールが設定され、共有コンテキストで実行されます。

Kubernetes の永続ストレージ

前のユニットでは、バインド マウントと名前付きボリュームを通じてローカル環境でアプリケーションに永続ストレージを提供できる Windows コンテナーのサポート メカニズムについて学習しました。 ただし、Kubernetes のような分散環境で使う場合、ボリュームとバインド マウントにはいくつかの欠点があります。

ボリュームとバインド マウントは特定のホスト コンピューターに関連付けられているため、クラスター内のノード間で移植することはできません。 データが保存されているものとは異なるノード上でコンテナーがスケジュールされている場合、それにアクセスすることはできません。 さらに、ボリュームとバインド マウントは、1 つのホスト マシンの可用性と容量に依存するため、スケーラビリティや回復性がありません。

Kubernetes は、"永続ボリューム" と "永続ボリューム要求" という 2 つの抽象化を導入することで、コンテナーのストレージの課題を解決します。

永続ボリューム

永続ボリューム (PV) はクラスター内のストレージ リソースであり、Kubernetes API によって作成および管理され、個々のポッドの有効期間を超えて存在することができます。 クラスター管理者は PersistentVolume を静的に作成できます。または、Kubernetes API サーバーで "ストレージ クラス" を使って動的に作成することができます。 ノードがクラスター リソースであるのと同様に、PV はクラスター内のリソースです。 PV には、PV を使う個々のポッドから独立したライフサイクルがあります。

永続ボリューム要求

永続ボリューム要求 (PVC) は、特定の StorageClass、アクセス モード、サイズのストレージを要求します。 PVC は、ストレージ リソースの要求チェックとして機能します。 定義されたストレージ クラスに基づいて要求を満たすことができる既存のリソースがない場合、Kubernetes API サーバーは基になるストレージ リソースを動的にプロビジョニングできます。

StorageClass には、管理者が提供するストレージの "クラス" を説明する方法が用意されています。 さまざまなクラスが、サービス品質レベル、バックアップ ポリシー、またはクラスター管理者が決定した任意のポリシーにマップされる場合があります。 Kubernetes 自体は、クラスが何を表すかについて一切関知しません。

Kubernetes API サーバーが、ストレージを要求しているポッドに対して使用可能なストレージ リソースを割り当てると、PV は PVC にバインドされます。 永続ボリュームは、永続ボリューム要求に対する 1 対 1 のマッピングです。