このドキュメントで説明されているソフトウェアは、サポートされなくなったか、拡張サポートされています。
Oracleでは、現在サポートされているリリースにアップグレードすることをお勧めします。
第2章 Oracle Cloud Infrastructureストレージの使用
この章では、Oracle Cloud Infrastructureコンテナ・ストレージ・インタフェース・モジュールをインストールして使用し、Oracle Cloud InfrastructureインスタンスのOracle Cloud Native EnvironmentでKubernetesアプリケーションに動的にプロビジョニングされた永続ストレージを設定する方法について説明します。
2.1 前提条件
Kubernetesモジュールは、第2.2項、「Oracle Cloud Infrastructureコンテナ・ストレージ・インタフェース・モジュールのデプロイ」の説明に従って、--node-labels
および--node-ocids
オプションを使用して作成する必要があります。 これらのオプションは、Oracle Cloud Infrastructure CSIプラグイン(Kubernetes Cloud Controller Manager)で正しく動作するようにKubernetesノードを構成します。 これらの2つのolcnectl module createオプションは、Kubernetesモジュールの作成時に使用する必要があります。
デプロイ後にこれらの設定を追加するようにKubernetesモジュールを変更することはできません。
Oracle Cloud Infrastructure Container Storage Interfaceモジュールを設定する前に、Oracle Cloud Infrastructure環境に関する情報を収集する必要があります。 必要な最も一般的な情報は、次のとおりです:
-
Kubernetesクラスタ(コントロール・プレーンおよびワーカー・ノード)で使用される各インスタンスのOracle Cloud Identifier (OCID)。
-
リージョンの識別子。
-
テナンシのOCID。
-
コンパートメントのOCID。
-
ユーザーのOCID。
-
API署名キー・ペアの公開キーのフィンガープリント。
-
API署名キー・ペアの秘密キー・ファイル。 秘密キーはプライマリ・コントロール・プレーン・ノードにコピーする必要があります。 これは、Kubernetesモジュールの作成時に
--master-nodes
オプションにリストされた最初のコントロール・プレーン・ノードです。
Oracle Cloud Infrastructureネットワーキングまたは他のコンポーネントに関連する詳細情報が必要な場合があります。
これらの各識別子またはコンポーネントの検索の詳細は、「Oracle Cloud Infrastructureドキュメント」を参照してください。
2.2 Oracle Cloud Infrastructureコンテナ・ストレージ・インタフェース・モジュールのデプロイ
単一のolcnectl module createコマンドを使用して、KubernetesクラスタのOracle Cloud Infrastructureストレージを設定するために必要なすべてのモジュールをデプロイできます。 このメソッドは、Kubernetesクラスタのデプロイと同時にOracle Cloud Infrastructureコンテナ・ストレージ・インタフェース・モジュールをデプロイする場合に役立つことがあります。
Kubernetesモジュールの既存のデプロイメントがある場合は、Oracle Cloud Infrastructure Container Storage Interfaceモジュールのデプロイ時にそのインスタンスを指定できます。 Oracle Cloud Infrastructureストレージにアクセスする場合は、Kubernetesモジュールを設定するための特定の要件があることに注意してください。
この項では、Oracle Cloud Infrastructureコンテナ・ストレージ・インタフェース・モジュールのデプロイに必要な各コンポーネントのインストールについて説明します。
モジュールの作成時に使用可能なプラットフォームCLIコマンド・オプションの完全なリストは、「プラットフォーム・コマンドライン・インタフェース」のolcnectl module createコマンドを参照してください。
-
環境が設定されていない場合は、モジュールをデプロイできる環境を作成します。 環境の設定の詳細は、「スタート・ガイド」を参照してください。 この例の環境の名前は、
myenvironment
です。 -
Kubernetesモジュールがまだ設定またはデプロイされていない場合は、設定します。
重要--node-labels
および--node-ocids
オプションを使用して、必ずKubernetesモジュールを作成してください。 これらのオプションは、Oracle Cloud Infrastructure CSIプラグインで正しく動作するようにKubernetesノードを構成します。 これらのオプションは、Kubernetesモジュールの作成時に使用する必要があります。 デプロイ後にこれらの設定を追加するようにモジュールを変更することはできません。Kubernetesモジュールを環境に追加する方法の詳細は、「コンテナ・オーケストレーション」を参照してください。 この例のKubernetesモジュールの名前は、
mycluster
です。 -
Helmモジュールを作成してインストールしていない場合は作成します。 この例のHelmモジュールは、
myhelm
という名前で、--helm-kubernetes-module
オプションを使用してmycluster
という名前のKubernetesモジュールに関連付けられています。olcnectl module create \ --environment-name myenvironment \ --module helm \ --name myhelm \ --helm-kubernetes-module mycluster
-
新しいHelmモジュールをデプロイする場合は、olcnectl module validateコマンドを使用して、Helmモジュールをノードにデプロイできることを検証します。 たとえば:
olcnectl module validate \ --environment-name myenvironment \ --name myhelm
-
新しいHelmモジュールをデプロイする場合は、olcnectl module installコマンドを使用してHelmモジュールをインストールします。 たとえば:
olcnectl module install \ --environment-name myenvironment \ --name myhelm
Helmソフトウェア・パッケージはコントロール・プレーン・ノードにインストールされ、HelmモジュールはKubernetesクラスタにデプロイされます。
-
Oracle Cloud Infrastructureコンテナ・ストレージ・インタフェース・モジュールを作成し、
--oci-csi-helm-module
オプションを使用してmyhelm
という名前のHelmモジュールに関連付けます。 この例では、Oracle Cloud Infrastructureコンテナ・ストレージ・インタフェース・モジュールの名前はmyoci
です。olcnectl module create \ --environment-name myenvironment \ --module oci-csi \ --name myoci \ --oci-csi-helm-module myhelm \ --oci-region us-ashburn-1 \ --oci-tenancy ocid1.tenancy.oc1... \ --oci-compartment ocid1.compartment.oc1... \ --oci-user ocid1.user.oc1... \ --oci-fingerprint b5:52:... \ --oci-private-key /home/opc/.oci/oci_api_key.pem
--module
オプションは、モジュール・タイプを作成(oci-csi
)に設定します。 Oracle Cloud Infrastructureコンテナ・ストレージ・インタフェース・モジュールの名前は、--name
オプションを使用して定義します(この場合はmyoci
)。--oci-csi-helm-module
オプションは、Helmモジュールの名前を設定します。 同じ名前の既存のHelmモジュールがある場合、プラットフォームAPIサーバーはそのHelmインスタンスを使用します。--oci-region
オプションは、使用するOracle Cloud Infrastructureリージョンを設定します。 この例のリージョンは、us-ashburn-1
です。--oci-tenancy
オプションは、テナンシのOCIDを設定します。--oci-compartment
オプションは、コンパートメントのOCIDを設定します。--oci-user
オプションは、ユーザーのOCIDを設定します。--oci-fingerprint
オプションは、Oracle Cloud Infrastructure API署名キーの公開キーのフィンガープリントを設定します。--oci-private-key
オプションは、Oracle Cloud Infrastructure API署名キーの秘密キーのロケーションを設定します。 秘密キーはプライマリ・コントロール・プレーン・ノードで使用可能である必要があります。モジュールの追加時に必要なすべてのオプションを含めない場合は、オプションを指定するように求められます。
-
olcnectl module validateコマンドを使用して、Oracle Cloud Infrastructureコンテナ・ストレージ・インタフェース・モジュールをノードにデプロイできることを検証します。 たとえば:
olcnectl module validate \ --environment-name myenvironment \ --name myoci
-
olcnectl module installコマンドを使用して、Oracle Cloud Infrastructureコンテナ・ストレージ・インタフェース・モジュールをインストールします。 たとえば:
olcnectl module install \ --environment-name myenvironment \ --name myoci
Oracle Cloud Infrastructureコンテナ・ストレージ・インタフェース・モジュールは、Kubernetesクラスタにデプロイされます。
2.3 Oracle Cloud Infrastructureモジュールのデプロイメントの確認
オペレータ・ノードのolcnectl module instancesコマンドを使用して、Oracle Cloud Infrastructureコンテナ・ストレージ・インタフェース・モジュールがデプロイされていることを確認できます。 たとえば:
olcnectl module instances \
--environment-name myenvironment
INSTANCE MODULE STATE
mycluster kubernetes installed
myhelm helm installed
myoci oci-csi installed
control1.example.com node installed
...
MODULE
列のoci-csi
のエントリは、installed
状態であることに注意してください。
また、olcnectl module reportコマンドを使用して、モジュールに関する情報を確認します。 たとえば、次のコマンドを使用して、myenvironment
のmyoci
という名前のOracle Cloud Infrastructureコンテナ・ストレージ・インタフェース・モジュールを確認します:
olcnectl module report \ --environment-name myenvironment \ --name myoci \ --children
olcnectl module reportコマンドの構文の詳細は、「プラットフォーム・コマンドライン・インタフェース」を参照してください。
コントロール・プレーン・ノードでは、kubectl get scコマンドを使用して、Oracle Cloud Infrastructureプロビジョナのoci-bv
StorageClassが作成されていることを確認することもできます:
kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ...
oci-bv blockvolume.csi.oraclecloud.com Delete WaitForFirstConsumer ...
「kubectlはscを記述」コマンドを使用して、StorageClassの詳細を取得できます。 たとえば:
kubectl describe sc oci-bv
Name: oci-bv
IsDefaultClass: No
Annotations: meta.helm.sh/release-name=myoci,meta.helm.sh/release-namespace=default
Provisioner: blockvolume.csi.oraclecloud.com
Parameters: <none>
AllowVolumeExpansion: <unset>
MountOptions: <none>
ReclaimPolicy: Delete
VolumeBindingMode: WaitForFirstConsumer
Events: <none>
2.4 Oracle Cloud Infrastructureブロック・ストレージの作成
この項では、Oracle Cloud Infrastructureブロック・ストレージを作成して、Kubernetesで実行されているアプリケーションに永続ストレージを提供できることを確認する基本的なテストを示します。
-
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
persistentvolumeclaim/myoci-pvc created -
PersistentVolumeClaimは、kubectl get pvcコマンドを使用して作成できます:
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
deployment.apps/mynginx created -
「kubectlデプロイメントの取得」コマンドを使用して、アプリケーションが実行されていることがわかります:
kubectl get deployment
NAME READY UP-TO-DATE AVAILABLE AGE mynginx 1/1 1 1 63s -
「kubectlはデプロイメントの説明です」コマンドを使用して、アプリケーションが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
deployment.apps "mynginx" deleted -
次を使用して、PersistentVolumeClaimを削除できます:
kubectl delete pvc myoci-pvc
persistentvolumeclaim "myoci-pvc" deletedストレージが削除されます。
ヒントOracle Cloud Infrastructureにログインすると、ブロック・ボリュームが終了していることがわかります。
2.5 Oracle Cloud Infrastructureコンテナ・ストレージ・インタフェース・モジュールの削除
Oracle Cloud Infrastructure Container Storage Interfaceモジュールのデプロイメントを削除し、Kubernetesクラスタをそのままにしておくことができます。 これを行うには、環境からOracle Cloud Infrastructure Container Storage Interfaceモジュールを削除します。
olcnectl module uninstallコマンドを使用して、Oracle Cloud Infrastructureコンテナ・ストレージ・インタフェース・モジュールを削除します。 たとえば、myenvironment
という名前の環境でmyoci
という名前のOracle Cloud Infrastructureコンテナ・ストレージ・インタフェース・モジュールをアンインストールするには:
olcnectl module uninstall \ --environment-name myenvironment \ --name myoci
Oracle Cloud Infrastructureコンテナ・ストレージ・インタフェース・モジュールが環境から削除されます。