機械翻訳について

このドキュメントで説明されているソフトウェアは、サポートされなくなったか、拡張サポートされています。
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コマンドを参照してください。

Oracle Cloud Infrastructureコンテナ・ストレージ・インタフェース・モジュールをデプロイするには:
  1. 環境が設定されていない場合は、モジュールをデプロイできる環境を作成します。 環境の設定の詳細は、スタート・ガイドを参照してください。 この例の環境の名前は、myenvironmentです。

  2. Kubernetesモジュールがまだ設定またはデプロイされていない場合は、設定します。

    重要

    --node-labelsおよび--node-ocidsオプションを使用して、必ずKubernetesモジュールを作成してください。 これらのオプションは、Oracle Cloud Infrastructure CSIプラグインで正しく動作するようにKubernetesノードを構成します。 これらのオプションは、Kubernetesモジュールの作成時に使用する必要があります。 デプロイ後にこれらの設定を追加するようにモジュールを変更することはできません。

    Kubernetesモジュールを環境に追加する方法の詳細は、コンテナ・オーケストレーションを参照してください。 この例のKubernetesモジュールの名前は、myclusterです。

  3. Helmモジュールを作成してインストールしていない場合は作成します。 この例のHelmモジュールは、myhelmという名前で、--helm-kubernetes-moduleオプションを使用してmyclusterという名前のKubernetesモジュールに関連付けられています。

    olcnectl module create \
    --environment-name myenvironment \
    --module helm \
    --name myhelm \
    --helm-kubernetes-module mycluster 
  4. 新しいHelmモジュールをデプロイする場合は、olcnectl module validateコマンドを使用して、Helmモジュールをノードにデプロイできることを検証します。 たとえば:

    olcnectl module validate \
    --environment-name myenvironment \
    --name myhelm
  5. 新しいHelmモジュールをデプロイする場合は、olcnectl module installコマンドを使用してHelmモジュールをインストールします。 たとえば:

    olcnectl module install \
    --environment-name myenvironment \
    --name myhelm 

    Helmソフトウェア・パッケージはコントロール・プレーン・ノードにインストールされ、HelmモジュールはKubernetesクラスタにデプロイされます。

  6. 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署名キーの秘密キーのロケーションを設定します。 秘密キーはプライマリ・コントロール・プレーン・ノードで使用可能である必要があります。

    モジュールの追加時に必要なすべてのオプションを含めない場合は、オプションを指定するように求められます。

  7. olcnectl module validateコマンドを使用して、Oracle Cloud Infrastructureコンテナ・ストレージ・インタフェース・モジュールをノードにデプロイできることを検証します。 たとえば:

    olcnectl module validate \
    --environment-name myenvironment \
    --name myoci
  8. 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コマンドを使用して、モジュールに関する情報を確認します。 たとえば、次のコマンドを使用して、myenvironmentmyociという名前の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で実行されているアプリケーションに永続ストレージを提供できることを確認する基本的なテストを示します。

Oracle Cloud Infrastructureストレージを使用するテスト・アプリケーションを作成するには:
  1. 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です。

  2. Kubernetes PersistentVolumeClaimを作成します。

    kubectl apply -f pvc.yaml
    persistentvolumeclaim/myoci-pvc created
  3. PersistentVolumeClaimは、kubectl get pvcコマンドを使用して作成できます:

    kubectl get pvc 
    NAME        STATUS    VOLUME   CAPACITY   ACCESS MODES   STORAGECLASS   AGE
    myoci-pvc   Pending                                      oci-bv         15s

    STATUSPendingで、アプリケーションが要求を待機していることを意味します。

    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  ...

  4. 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
  5. アプリケーションを起動します:

    kubectl apply -f nginx.yaml
    deployment.apps/mynginx created
  6. kubectlデプロイメントの取得コマンドを使用して、アプリケーションが実行されていることがわかります:

    kubectl get deployment
    NAME      READY   UP-TO-DATE   AVAILABLE   AGE
    mynginx   1/1     1            1           63s
  7. 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アプリケーションが実行されているコンピュート・インスタンスにアタッチされます。

  8. 次を使用して、テスト・アプリケーションを削除できます:

    kubectl delete deployment mynginx 
    deployment.apps "mynginx" deleted
  9. 次を使用して、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コンテナ・ストレージ・インタフェース・モジュールが環境から削除されます。