3 Oracle Cloud Infrastructureストレージの使用
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: 50GiOracle 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 15sSTATUSは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-pvcimageオプションは、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.txtdate -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-export10.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