type
status
date
slug
summary
tags
category
icon
password
书籍

第13章

永続ストレージの割り当て

目標

永続ストレージを実装する。

学習目標

  • アプリケーションで使用するための永続ストレージをプロビジョニングする。
  • 内部コンテナレジストリの永続化設定について説明できるようにする。

セクション

  • 永続ストレージのプロビジョニング(およびガイド付き演習)
  • 内部レジストリの永続化の説明(およびクイズ)

実習

永続ストレージの割り当て
 

永続ストレージのプロビジョニング

目的

このセクションを完了すると、受講者はアプリケーションで使用するための永続ストレージをプロビジョニングできるようになります。

永続ストレージ

デフォルトでは、実行中のコンテナはコンテナ内のエフェメラル(揮発性)ストレージを使用します。Podは、一つまたは複数のコンテナで構成され、共通のストレージやリソースを共有しながらデプロイされます。Podはいつでも作成、起動、停止、破棄される可能性があり、エフェメラルストレージを使用すると、コンテナ内のファイルシステムに書き込まれたデータは、コンテナが停止すると失われます。
コンテナが停止してもデータを保持する必要があるアプリケーションをデプロイする場合、OpenShift は**Kubernetes の永続ボリューム(Persistent Volumes, PV)**を使用して、Pod に永続ストレージをプロビジョニングします。

永続ストレージのユースケース

例えば、データベースコンテナが Pod 起動時にデフォルトのエフェメラルストレージを使用しているとします。この場合、データベース Pod が破棄されて再作成されると、エフェメラルストレージも失われ、データが消えてしまいます。
しかし、永続ストレージを使用すると、データベースは Pod の外部にある永続ボリューム(Persistent Volume) にデータを保存します。仮に Pod が破棄されて再作成されても、データベースアプリケーションは同じ外部ストレージを引き続き利用できるため、データが保持されます。

アプリケーション向けの永続ストレージの提供

永続ボリューム(PV)は、OpenShift の管理者によって作成および削除されるリソースであり、クラスタ内のすべての OpenShift ノードからアクセス可能なネットワーク接続ストレージを表します。

永続ストレージの構成要素

OpenShift Container Platform は、Kubernetes の Persistent Volume(PV)フレームワーク を使用して、管理者がクラスタに永続ストレージをプロビジョニングできるようにします。開発者は Persistent Volume Claim(PVC) を使用して PV をリクエストできます。これにより、開発者はストレージ基盤の詳細を知らなくてもストレージを利用できます。
  • 永続ボリューム(PV)
    • PersistentVolume API オブジェクト によって定義されるリソース
    • クラスタ内のネットワーク接続ストレージの一部を表し、管理者が事前にプロビジョニングする
    • ノードと同様にクラスタリソースとして扱われる
    • どの Pod によって使用されるかに関係なく、独立したライフサイクルを持つ
  • 永続ボリューム要求(PVC)
    • PersistentVolumeClaim API オブジェクト によって定義される
    • 開発者がストレージをリクエストするためのリソース
    • Pod がノードリソースを消費するのと同様に、PVC は PV リソースを消費する

OpenShift がサポートする永続ストレージのプラグイン

OpenShift は、さまざまなローカルまたはネットワーク接続ストレージのバックエンドをサポートするためにプラグインを使用します。以下のストレージバックエンドをサポートしています:
  • NFS(Network File System)
  • GlusterFS
  • OpenStack Cinder
  • Ceph RBD(RADOS Block Device)
  • AWS Elastic Block Store(EBS)
  • Google Cloud Engine(GCE)Persistent Disk
  • iSCSI(Internet Small Computer System Interface)
  • Fibre Channel(ファイバーチャネル)
  • Azure Disk および Azure File
  • FlexVolume(プラグインのないストレージバックエンドの拡張を可能にする)
  • VMware vSphere
さらに、以下の機能もサポートされています:
  • 動的プロビジョニングとストレージクラスの作成
  • ボリュームのセキュリティ管理
  • セレクターラベルを使用したボリュームのバインディング

永続ボリュームのアクセスモード

PV は、ストレージプロバイダーがサポートする方式でホストにマウントされます。ストレージプロバイダーごとに異なる機能があり、各 PV のアクセスモードは、そのボリュームのサポートするモードに設定されます。
例えば、NFS は複数のノードでの読み書きをサポートしますが、特定の NFS PV はサーバー側の設定によって読み取り専用に設定されることもあります。
各 PV には、そのボリュームの機能を示すアクセスモードが設定されます。
アクセスモード
CLI 略称
説明
ReadWriteOnce
RWO
1つのノードからのみ読み書き可能
ReadOnlyMany
ROX
複数のノードから読み取り専用でアクセス可能
ReadWriteMany
RWX
複数のノードから読み書き可能
PVC は、同じアクセスモードを持つ PV にバインドされます。PVC のリクエストが「RWO」だった場合、NFS PV(RWO+ROX+RWX)が存在すれば、この PV にマッチングされます。
すべてのボリュームは同じアクセスモードごとにグループ化され、**サイズ順(小さいものから順に)**でソートされます。マスターのサービスが、マッチするアクセスモードの PV を検索し、適切なサイズの PV を見つけて PVC にバインドします。

永続ボリュームのストレージクラス

PVC(永続ボリューム要求)は、オプションとして storageClassName 属性を指定することで特定のストレージクラスを要求できます。PVC に指定されたストレージクラスと同じ名前を持つ PV(永続ボリューム)のみが、その PVC にバインドされます。
クラスタ管理者は、すべての PVC に対してデフォルトのストレージクラスを設定することができ、また、ストレージクラスに対応する動的プロビジョニング機能を構成することで、PVC の要求に応じたストレージを自動的に作成することも可能です。

PV と PVC のリソース作成

PV はクラスタ内のリソースであり、PVC はそれらのリソースを要求するためのものです。PV と PVC の関係は以下のライフサイクルに従います。

1. 永続ボリューム(PV)の作成

クラスタ管理者が、クラスター内で利用可能なストレージを表す PV を作成します。これにより、OpenShift API を通じてクラスターのユーザーがストレージを利用できるようになります。

2. 永続ボリューム要求(PVC)の定義

ユーザーは、必要なストレージサイズやアクセスモード、オプションでストレージクラスを指定して PVC を作成します。クラスタのマスターは新しい PVC を監視し、一致する PV を探すか、ストレージクラスに対応するプロビジョナーが新しい PV を作成するのを待ちます。そして、見つかった PV を PVC にバインドします。

3. 永続ストレージの利用

Pod は PVC をボリュームとして利用します。クラスタは PVC にバインドされた PV を検出し、Pod にそのボリュームをマウントします。複数のアクセスモードに対応するボリュームの場合、ユーザーは Pod のボリューム設定時にどのモードで利用するか指定します。
一度 PVC が PV にバインドされると、その PV はユーザーのものとなり、必要な限り利用し続けることができます。ユーザーは Pod をスケジューリングし、PVC をボリュームとして指定することで、データを保持したまま PV にアクセスできます。

NFS を永続ボリュームとして使用する場合

OpenShift はコンテナをランダムな UID で実行するため、OpenShift ノード上の Linux ユーザーと NFS サーバー上のユーザーを直接マッピングすることはできません。そのため、NFS を OpenShift の PV として使用する場合は、以下のように設定する必要があります。
  • NFS の所有者を nfsnobody ユーザーおよびグループに設定する
  • パーミッションを rwx------(0700)に設定する
  • NFS を all_squash オプション付きでエクスポートする

NFS のエクスポート設定例

以下のように /etc/exports にエントリを追加します。
syncasync のどちらのオプションを使用しても OpenShift は正常に動作しますが、高遅延の環境では async を使用すると NFS への書き込みが速くなる ため推奨されます。
  • async:データがディスクに書き込まれる前に NFS サーバーがクライアントへ応答するため、高速。
  • sync:データがディスクに書き込まれてから NFS サーバーがクライアントへ応答するため、安全性が高いが遅い。

NFS ストレージの制限と SELinux の設定

PV のサイズ制限について

  • NFS のファイルシステムのサイズやユーザークォータは OpenShift に影響しません。
  • PV のサイズは PV のリソース定義内で指定されますが、実際のファイルシステムがそれより小さくても、PV は作成され、PVC にバインドされます。
  • 逆に、PV のサイズが実際のファイルシステムより大きい場合でも、OpenShift は PV のサイズを制限しません。つまり、コンテナはファイルシステム全体の空き領域を利用できる状態になります。
  • OpenShift では、プロジェクトごとのストレージクォータや配置制限を設定することで、リソースの割り当てを制御できます。

SELinux の設定

デフォルトの SELinux ポリシーでは、コンテナが NFS にアクセスできません。そのため、以下の設定を OpenShift の各ノードで行う必要があります。
この設定は OpenShift インストーラーによって自動的に適用されますが、手動で設定が必要な場合もあります。

リクレームポリシー(Reclamation Policies)

NFS は OpenShift Container Platform の リサイクルプラグイン(Recyclable Plug-in) を実装しています。PV のリクレーム(再利用)ポリシーは、PV ごとに設定することが可能です。

リクレームポリシーの種類

ポリシー
説明
Retain(保持)
デフォルトの設定。PVC が削除されても PV は削除されず、そのデータはそのまま残る。管理者が手動で PV を削除または再利用する必要がある。
Recycle(再利用)
PVC が削除されると、PV のデータを rm -rf で削除し、PV を新しい PVC にバインドできる状態にする。

ファイルベースのボリュームと補助グループ(Supplemental Groups)

補助グループ(Supplemental Groups)は、Linux の通常のグループ ID(GID)を指します。Linux ではプロセスは UID(ユーザー ID)、GID(グループ ID)、および複数の補助グループを持つことができます。これらの属性はコンテナのメインプロセスに対して設定可能です。
  • 補助グループ(Supplemental Groups):NFS や GlusterFS などの共有ストレージにアクセス制御を適用するために使用される。
  • fsGroup:Ceph RBD や iSCSI などのブロックストレージにアクセス制御を適用するために使用される。
OpenShift の共有ストレージプラグインは、ターゲットストレージの POSIX パーミッションに合わせてボリュームをマウントします。そのため、コンテナのメインプロセスの UID や GID を、ターゲットストレージの所有者 ID に一致させる必要があります。

ノードVMでのNFSのマウント状況確認

ノードVMで以下のコマンドを実行すると、NFSのエクスポートリストが表示されます。
出力例:
この例では、/var/export/nfs-demo がエクスポートされており、すべてのクライアント(*)からアクセス可能になっています。

NFSサーバーの設定

サービスVM上のNFSサーバーで、エクスポート設定ファイル /etc/exports.d/nfs-demo.conf を確認すると、次のように記述されています:
また、ディレクトリのパーミッションとSELinuxコンテキストを確認すると:
この出力は、NFS共有ディレクトリ /var/export/nfs-demo の所有者が UID=10000000、グループが GID=650000 であることを示しています。
一般的に、コンテナは root 権限で実行するべきではありません
この設定では、UID 10000000 または GID 650000 で実行されないコンテナは NFS へのアクセスが拒否されます

ブロックストレージにおける fsGroup の使用

ファイルシステムのグループを指定する fsGroup は、Pod の「ファイルシステムグループ」のIDを定義し、コンテナの補助グループとして追加されます。
fsGroupブロックストレージ に適用されるのに対し、supplementalGroups共有ストレージ(NFSなど) に適用されます。
  • 共有ストレージ(NFS、GlusterFS など)
    • supplementalGroups を設定してアクセス権を調整する
  • ブロックストレージ(Ceph RBD、iSCSI、クラウドストレージ など)
    • fsGroup を使用して権限を設定する
ブロックストレージは基本的に 1つの Pod に専用で割り当てられるため、コンテナの UID/GID が直接ストレージデバイスに適用されます。
これは、NFS のような共有ストレージとは異なり、複数のPodで共有することを前提としていません。

SELinux とボリュームのセキュリティ

OpenShift のほぼすべてのセキュリティコンテキスト制約(SCC)は、SELinuxの MustRunAs ポリシーを使用しています。(例外:privileged SCC)
この MustRunAs ポリシーにより、Pod には特定の SELinux コンテキストが適用されます。
SELinuxのラベル設定は、Pod の securityContext.seLinuxOptions に記述できます。
これにより、Pod 内のプロセスに適用する ユーザー、ロール、タイプ、レベル を指定できます。

SELinuxContext オプション

設定
説明
MustRunAs
seLinuxOptions が設定されている必要がある(事前定義された値がない場合)。デフォルトで seLinuxOptions を使用し、値を検証する。
RunAsAny
デフォルトなし。どの seLinuxOptions でも指定可能。

追加のリファレンス

永続ストレージの設定に関する詳細情報は、以下の Red Hat OpenShift ドキュメントを参照してください。
📌 インストールと設定ガイド
📌 クラスタ管理ガイド(リソースクォータ関連)
📌 開発者向けガイド(永続ボリューム関連)
📌 アーキテクチャガイド(ストレージの基本概念)

 
相关文章
RedHat EX200 本番近い試験問題集
Lazy loaded image
RedHat EX200 本番試験問題集(有料版)
Lazy loaded image
82- 第17章:導入総復習-3:OpenShiftにマルチコンテナデプロイのラボ
Lazy loaded image
81- 第17章:導入総復習-2:docker,KubernetesおよびOpenShiftのラボ
Lazy loaded image
80- 第17章:導入総復習-1:総合レビュー
Lazy loaded image
79- 第16章:OpenShiftの管理と監視-8:ラボ
Lazy loaded image
57- 第13章:永続ストレージの割り当て-2:永続ストレージプロビジョニングの演習55- 第12章:OpenShiftリソースへのアクセス制御-5:ラボ
Loading...
みなみ
みなみ
一个普通的干饭人🍚
最新发布
令和5年秋期 午後問1
2025-5-3
令和2年秋期 午後問1
2025-5-2
第1回:オリエンテーション/意思決定と会計情報
2025-4-30
第1回:イントロダクション
2025-4-30
第1回:イントロダクション
2025-4-30
宅建業法の基本と免許-59問
2025-4-30
公告

🎉 欢迎访问我的博客 🎉

🙏 感谢您的支持 🙏

📅 本站自 2024年9月1日 建立,致力于分享在 IT・MBA・不动产中介 等领域的学习与实践,并推动 学习会 的自主开展。
📖 博客语言使用比例
🇯🇵 日语 90% 🇨🇳 中文 8% 🇬🇧 英语 2%

📚 主要内容

💻 IT・系统与开发

  • 系统管理:Red Hat 等
  • 容器与编排:Kubernetes、OpenShift
  • 云计算:AWS、IBM Cloud
  • AI 入门:人工智能基础与实践
  • 技术笔记与考证经验

🏠 不动产 × 宅建士

  • 宅建士考试笔记

🎓 MBA 学习笔记

  • 管理学、经济学、财务分析等

🔍 快速查找内容(标签分类)

由于网站目前没有专门的设计,可能会导致查找信息不便。为了更快找到你感兴趣的内容,推荐使用以下标签功能 进行搜索!
📌 定期更新,欢迎常来看看!
📬 有任何建议或想法,也欢迎留言交流!