3 Oracle Cloud Infrastructureストレージの使用
重要:
このドキュメントで説明されているソフトウェアは、Extended SupportまたはSustaining Supportにあります。 詳細は、「Oracleオープン・ソース・サポート・ポリシー」を参照してください。
このドキュメントに記載されているソフトウェアをできるだけ早くアップグレードすることをお勧めします。
Oracle Cloud Infrastructure Cloud Controller Managerモジュールは、永続データ・ストレージを作成するための次のストレージ・サービスを提供する、Kubernetesクラスタ用のコンテナ・ストレージ・インタフェース(CSI)プラグインを実装します:
- Oracle Cloud Infrastructure Block Volumeサービス
-
Oracle Cloud Infrastructure Block Volumeサービスは、動的にプロビジョニングおよび管理されるブロック・ストレージ・ボリュームを提供します。 ブロック・ストレージ・ボリュームは、50 GBから32 TBまでのサイズで作成できます。
ボリュームをKubernetesアプリケーションにアタッチした後、通常のハード・ドライブと同様の方法でボリュームを使用できます。 また、データを失うことなく、ボリュームを切断して別のインスタンスにアタッチすることもできます。
ブロック・ボリューム・ボリュームは、データ損失から保護するために自動的にレプリケートされます。
ユースケースの例、およびOracle Cloud Infrastructureブロック・ボリューム・サービスの詳細は、「Oracle Cloud Infrastructureのドキュメント」を参照してください。
- Oracle Cloud Infrastructure File Storageサービス
-
Oracle Cloud Infrastructure File Storageサービスは、スケーラブルで耐久性の高いエンタープライズ・グレードのネットワーク・ファイル・システムを提供します。 ファイル・ストレージ・サービスでは、ネットワーク・ファイル・システムのバージョン3.0 (NFSv3)プロトコルを使用します。 このサービスは、ファイル・ロック機能にNetwork Lock Manager (NLM)プロトコルを使用します。
File Storageサービスは、データ・ストレージのニーズがバイト数からバイト数に増えるにつれて、ストレージ・プロビジョニングを透過的に管理します。
何千ものインスタンスからなる大規模なコンピュート・クラスタでは、ファイル・ストレージ・サービスを使用して高パフォーマンスの共有ストレージを使用できます。
Oracle Cloud Infrastructure File Storageは、異なるフォルト・ドメインで5方向レプリケートされたストレージを使用して、自己回復性データ保護の冗長性を提供します。
サンプル・ユースケースについて、およびOracle Cloud Infrastructureファイル・ストレージ・サービスの詳細は、「Oracle Cloud Infrastructureのドキュメント」を参照してください
次の項では、各ストレージ・サービスを使用して、Oracle Cloud InfrastructureインスタンスのOracle Cloud Native EnvironmentでKubernetesアプリケーションの永続ストレージを設定する方法の例を示します。
ブロック・ストレージの作成
この項では、Oracle Cloud Infrastructureブロック・ストレージを作成して、Kubernetesで実行されているアプリケーションに永続ストレージを提供できることを確認するための基本的なテストについて説明します。
Oracle Cloud Infrastructureブロック・ストレージを使用するテスト・アプリケーションを作成するには:
-
Kubernetes PersistentVolumeClaimファイルを作成します。 コントロール・プレーン・ノードで、
pvc.yaml
という名前のファイルを作成します。 ファイルに次の内容をコピーします。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: myoci-pvc spec: accessModes: - ReadWriteOnce storageClassName: oci-bv resources: requests: storage: 50Gi
Oracle Cloud Infrastructureストレージの
accessModes
設定は、ReadWriteOnce
である必要があります。 Oracle Cloud Infrastructureブロックの最小サイズは50Giです。 -
Kubernetes PersistentVolumeClaimを作成します。
kubectl apply -f pvc.yaml
-
kubectl get pvc
コマンドを使用してPersistentVolumeClaimが作成されていることがわかります:kubectl get pvc
出力は次のようになります:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE myoci-pvc Pending oci-bv 15s
STATUS
はPending
で、アプリケーションが要求を待機していることを意味します。kubectl describe pvc
コマンドを使用して、PersistentVolumeClaimの詳細を取得できます。 たとえば:kubectl describe pvc myoci-pvc
出力は次のようになります:
Name: myoci-pvc Namespace: default StorageClass: oci-bv Status: Pending Volume: Labels: <none> Annotations: <none> Finalizers: [kubernetes.io/pvc-protection] Capacity: Access Modes: VolumeMode: Filesystem Used By: <none> Events: Type Reason Age From ... ---- ------ ---- ---- Normal WaitForFirstConsumer 2m18s (x26 over 8m29s) persistentvolume-controller ...
-
PersistentVolumeClaimを使用するKubernetesアプリケーションを作成します。
nginx.yaml
という名前のファイルを作成し、次のファイルをファイルにコピーします。apiVersion: apps/v1 kind: Deployment metadata: labels: run: mynginx name: mynginx spec: replicas: 1 selector: matchLabels: run: mynginx template: metadata: labels: run: mynginx spec: containers: - image: container-registry.oracle.com/olcne/nginx:1.17.7 name: mynginx ports: - containerPort: 80 volumeMounts: - name: nginx-pvc mountPath: /usr/share/nginx/html volumes: - name: nginx-pvc persistentVolumeClaim: claimName: myoci-pvc
-
アプリケーションを起動します:
kubectl apply -f nginx.yaml
-
kubectl get deployment
コマンドを使用して、アプリケーションが実行されていることを確認できます:kubectl get deployment
出力は次のようになります:
NAME READY UP-TO-DATE AVAILABLE AGE mynginx 1/1 1 1 63s
-
kubectl describe deployment
コマンドを使用して、アプリケーションがPersistentVolumeClaimを使用してOracle Cloud Infrastructureに永続ストレージを提供していることがわかります:kubectl describe deployment mynginx
出力は次のようになります:
... Pod Template: Labels: run=mynginx Containers: mynginx: Image: container-registry.oracle.com/olcne/nginx:1.17.7 Port: 80/TCP Host Port: 0/TCP Environment: <none> Mounts: /usr/share/nginx/html from nginx-pvc (rw) Volumes: nginx-pvc: Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace) ClaimName: myoci-pvc ReadOnly: false ...
ClaimName
は、前に作成したPersistentVolumeClaimの名前であるmyoci-pvc
であることに注意してください。kubectl get pvc
コマンドを使用して、このアプリケーションにPersistentVolumeClaimがバインドされていることがわかります:kubectl get pvc
出力は次のようになります:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE myoci-pvc Bound csi-84175067-... 50Gi RWO oci-bv 1m
ヒント:
Oracle Cloud Infrastructureにサインインすると、
VOLUME
列にリストされた名前で作成されたブロック・ボリュームが表示されます。 ブロック・ボリュームは、Kubernetesアプリケーションが実行されているコンピュート・インスタンスにアタッチされます。 -
次を使用して、テスト・アプリケーションを削除できます:
kubectl delete deployment mynginx
-
次を使用して、PersistentVolumeClaimを削除できます:
kubectl delete pvc myoci-pvc
ストレージが削除されます。
ヒント:
Oracle Cloud Infrastructureにサインインすると、ブロック・ボリュームが終了していることがわかります。
ファイル・ストレージの作成
この項では、Oracle Cloud Infrastructureファイル・ストレージ・ファイル・システムを使用して、Kubernetesで実行されているアプリケーションに永続ファイル・ストレージを提供できることを確認する基本的な例を示します。 例は次のとおりです:
-
Oracle Cloud Infrastructureでファイル・ストレージ・ファイル・システムを作成します。
-
YAMLファイルを使用して、ファイル・ストレージ・ファイル・システムのPersistentVolumeおよびPersistentVolumeClaimを作成します。
-
YAMLファイルを使用して、ボリュームへのマウントを含むポッドを作成し、ファイル・ストレージ・ファイル・システムにテスト・ファイルを書き込みます。
ファイル・システムの設定
Oracle Cloud InfrastructureのVirtual Cloud Network (VCN)にファイル・ストレージ・ファイル・システムを作成します。
ヒント:
Oracle Cloud Infrastructureでのファイル・システムのプロビジョニングに関するステップ・バイ・ステップ・ガイドは、Oracle Luna Lab 「Oracle Cloud Native Environmentでのファイル・ストレージ・サービスを使用した永続ボリュームのプロビジョニング」を参照してください。ファイル・システムを作成するには:
-
ファイル・ストレージ・ファイル・システムのVCNを構成します。 VCNの正確な構成は異なります。 シナリオの例は、「Oracle Cloud Infrastructureのドキュメント」を参照してください。
-
File Storageファイル・システムを作成します。 詳細は、「Oracle Cloud Infrastructureのドキュメント」を参照してください。
-
ファイル・システムへのネットワーク・アクセスを有効にするファイル・ストレージ・マウント・ターゲットを作成します。 詳細は、「Oracle Cloud Infrastructureのドキュメント」を参照してください。
-
Oracle Cloud Infrastructureで、次のファイル・システム属性を見つけてノートにとります。 これらは、この例でYAMLファイルを作成したり、ファイル・システムをマウントする際に必要です:
-
ファイル・システムのOCID。
-
ファイル・システムのエクスポート・パス。 この例では、エクスポート・パスを
/my-fss-export
に設定することを前提としています。 -
mountコマンド。 これらのコマンドは、ファイル・システムの「マウント・コマンド」ページに表示されます。 これらのコマンドは、エクスポートされたファイル・システムをマウントするときの例の後半で使用します。
-
マウント・ターゲットのIPアドレス。
-
ファイル・システムの使用
Oracle Cloud Infrastructureファイル・ストレージ・ファイル・システムを使用するテスト・アプリケーションを作成するには:
-
PersistentVolumeファイルを作成します。 コントロール・プレーン・ノードで、次の内容を含む
fss-pv.yaml
というファイルを作成します:apiVersion: v1 kind: PersistentVolume metadata: name: fss-pv spec: capacity: storage: 50Gi volumeMode: Filesystem accessModes: - ReadWriteMany persistentVolumeReclaimPolicy: Retain csi: driver: fss.csi.oraclecloud.com volumeHandle: <filesystem_OCID>:<mount_target_IP>:<mount_target_export_path>
ファイル・システムの
accessModes
は、ReadWriteMany
である必要があります。storage
オプションはKubernetes要件であり、含める必要があります。 ファイル・ストレージ・サービスでは、storage
に指定した値に関係なく、この値は無視され、デフォルト・サイズの新しいファイル・システムが作成されます。volumeHandle
は、ファイル・ストレージのファイル・システム属性のコロン区切りのリストで構成されます。前述のステップで説明します。 たとえば:ocid1.filesystem.oc1.iad.aaaa...:10.0.0.200:/my-fss-export
-
PersistentVolumeを作成します。
kubectl apply -f fss-pv.yaml
-
PersistentVolumesのリストを取得します。
kubectl get pv
出力は次のようになります:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE fss-pv 50Gi RWX Retain Available 47s
-
PersistentVolumeClaimファイルを作成します。
fss-pvc.yaml
というファイルを作成します。 次の内容をファイルにコピーします:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: fss-pvc spec: accessModes: - ReadWriteMany storageClassName: "" resources: requests: storage: 5Gi volumeName: fss-pv
ファイル・システムの
accessModes
は、ReadWriteMany
である必要があります。storage
オプションはKubernetes要件であり、含める必要があります。 ファイル・ストレージ・サービスでは、storage
に指定した値に関係なく、この値は無視され、デフォルト・サイズの新しいファイル・システムが作成されます。volumeName
は、PersistentVolumeファイルfss-pv.yaml
のname属性に設定されます。 -
PersistentVolumeClaimを作成します。
kubectl apply -f fss-pvc.yaml
-
PersistentVolumeClaimsのリストを取得します。
kubectl get pvc
出力は次のようになります:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE fss-pvc Bound fss-pv 50Gi RWX 33s
- マニフェスト・ファイルを作成します。
fss-pod.yaml
というファイルを作成します。 次の内容をファイルにコピーします:apiVersion: v1 kind: Pod metadata: name: app spec: containers: - name: app image: container-registry.oracle.com/os/oraclelinux:9-slim command: ["/bin/sh"] args: ["-c", "while true; do echo $(date -u) >> /data/out.txt; sleep 5; done"] volumeMounts: - name: persistent-storage mountPath: /data volumes: - name: persistent-storage persistentVolumeClaim: claimName: fss-pvc
image
オプションは、Oracle Linuxコンテナ・イメージへのレジストリのロケーションを指定します。mountPath
オプションは、永続ストレージにマウントされるディレクトリを指定します。command
オプションは、/data
ディレクトリ内のファイルout.txt
に書き込むコマンドを指定します。 -
ポッドを作成します。
kubectl apply -f fss-pod.yaml
-
ポッドのリストを取得します。
kubectl get pods
出力は次のようになります:
NAME READY STATUS RESTARTS AGE app 1/1 Running 0 21s
-
シェルをポッド内のコンテナに開きます:
kubectl exec -i -t app --container app -- /bin/bash
-
コンテナのシェルから、
tail
コマンドを使用して、コンテナが/data/out.txt
ファイルに書き込まれていることを確認します:tail -f /data/out.txt
date -u
コマンドの日時出力が端末にリストされ、コンテナの/data/out.txt
ファイルに書き込まれます。CTRL+C
を使用して、tail
プログラムを終了します。 -
exit
コマンドを使用して、コンテナ・シェルを終了します:exit
-
コンテナ内の
/data
ディレクトリがファイル・システムのエクスポート・パスにマウントされていることを確認します。 このステップでは、ファイル・システムの作成時に記載されたマウント・コマンドを使用します。-
コントロール・プレーン・ノードで、NFSクライアントをインストールします。
sudo dnf install nfs-utils
-
ローカル・ディレクトリを作成し、ファイル・システムのエクスポート・パスにマウントします。
sudo mkdir -p /mnt/my-fss-export sudo mount 10.0.0.200:/my-fss-export /mnt/my-fss-export
10.0.0.200
をマウント・ターゲットのIPアドレスに置き換えます。 -
コンテナの書込み先である
output.txt
ファイルがファイル・システムのエクスポート・パスにあることを確認します。tail
コマンドは、次の目的で使用できます:sudo tail -f /mnt/my-fss-export/out.txt
ポッドによってファイルに書き込まれる日時がリストされます。
CTRL+C
を使用して、tail
プログラムを終了します。
-
-
ポッドを削除します。 ポッドの削除後にコマンド・プロンプトが表示されない場合は、
CTRL+C
キーの組合せを使用して戻すことができます:kubectl delete pod app
-
PersistentVolumeClaimを削除します:
kubectl delete pvc fss-pvc
-
PersistentVolumeのステータスが
Released
であることを確認します:kubectl get pv
出力は次のようになります:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE fss-pv 50Gi RWX Retain Released default/fss-pvc 57m
-
PersistentVolumeを削除します:
kubectl delete pv fss-pv
-
ファイルがまだ存在することを確認します:
ls -l /mnt/my-fss-export/out.txt
-
マウントを取り外します:
sudo umount /mnt/my-fss-export
-
out.txt
ファイルが使用できなくなり、マウントが削除されたことを確認します:ls -l /mnt/my-fss-export
-
/mnt/my-fss-export
がマウントされていないことを確認します:mount | grep my-fss-export