2 Oracle Cloud Infrastructureストレージの使用
重要:
このドキュメントで説明されているソフトウェアは、Extended SupportまたはSustaining Supportにあります。 詳細は、「Oracleオープン・ソース・サポート・ポリシー」を参照してください。
このドキュメントに記載されているソフトウェアをできるだけ早くアップグレードすることをお勧めします。
この章では、Oracle Cloud Infrastructure Cloud Controller Managerモジュールをインストールして使用し、Oracle Cloud Infrastructureインスタンス上のOracle Cloud Native EnvironmentのKubernetesアプリケーションに対して動的にプロビジョニングされる永続ストレージを設定する方法について説明します。
前提条件
Oracle Cloud Infrastructure Cloud Controller Managerモジュールを設定する前に、Oracle Cloud Infrastructure環境に関する情報を収集する必要があります。 必要な最も一般的な情報は、次のとおりです:
-
リージョンの識別子。
-
テナンシのOCID。
-
コンパートメントのOCID。
-
ユーザーのOCID。
-
API署名キー・ペアの公開キーのフィンガープリント。
-
API署名キー・ペアの秘密キー・ファイル。 秘密キーはプライマリ・コントロール・プレーン・ノードにコピーする必要があります。 これは、Kubernetesモジュールの作成時に
--master-nodes
オプションにリストされた最初のコントロール・プレーン・ノードです。
Oracle Cloud Infrastructureネットワーキングまたは他のコンポーネントに関連する詳細情報が必要な場合があります。
これらの各識別子またはコンポーネントの検索の詳細は、「Oracle Cloud Infrastructureドキュメント」を参照してください。
Oracle Cloud Infrastructure Cloud Controller Managerモジュールのデプロイ
Oracle Cloud Infrastructureアプリケーション・ロード・バランサを使用するようにOracle Cloud Infrastructure Cloud Controller Managerモジュールをすでにインストールしている場合は、ストレージをプロビジョニングするために別のモジュールを作成する必要はありません。 Oracle Cloud Infrastructure Cloud Controller Managerモジュールは、Oracle Cloud Infrastructureストレージ・バランサとロード・バランサの両方をプロビジョニングするために使用されます。
単一のolcnectl module create
コマンドを使用して、KubernetesクラスタにOracle Cloud Infrastructureストレージを設定するために必要なすべてのモジュールをデプロイできます。 このメソッドは、Kubernetesクラスタのデプロイと同時にOracle Cloud Infrastructure Cloud Controller Managerモジュールをデプロイする場合に便利です。
Kubernetesモジュールの既存のデプロイメントがある場合は、Oracle Cloud Infrastructure Cloud Controller Managerモジュールをデプロイするときにそのインスタンスを指定できます。
この項では、Oracle Cloud Infrastructure Cloud Controller Managerモジュールのデプロイに必要な各コンポーネントのインストールについて説明します。
モジュールの作成時に使用可能なプラットフォームCLIコマンド・オプションの完全なリストについては、「プラットフォーム・コマンドライン・インタフェース」のolcnectl module create
コマンドを参照してください。
Oracle Cloud Infrastructure Cloud Controller Managerモジュールをデプロイするには:
-
環境が設定されていない場合は、モジュールをデプロイできる環境を作成します。 環境の設定方法の詳細は、スタート・ガイドを参照してください。 この例の環境の名前は、
myenvironment
です。 -
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 Cloud Controller Managerモジュールを作成し、
--oci-ccm-helm-module
オプションを使用してmyhelm
という名前のHelmモジュールに関連付けます。 この例では、Oracle Cloud Infrastructure Cloud Controller Managerモジュールの名前はmyoci
です。olcnectl module create \ --environment-name myenvironment \ --module oci-ccm \ --name myoci \ --oci-ccm-helm-module myhelm \ --oci-region us-ashburn-1 \ --oci-tenancy ocid1.tenancy.oc1..unique_ID \ --oci-compartment ocid1.compartment.oc1..unique_ID \ --oci-user ocid1.user.oc1..unique_ID \ --oci-fingerprint b5:52:... \ --oci-private-key /home/opc/.oci/oci_api_key.pem
--module
オプションは、モジュール・タイプを作成(oci-ccm
)に設定します。 Oracle Cloud Infrastructure Cloud Controller Managerモジュールの名前は、--name
オプションを使用して定義します(この場合はmyoci
です)。--oci-ccm-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 Cloud Controller Managerモジュールをノードにデプロイできることを確認します。 たとえば:olcnectl module validate \ --environment-name myenvironment \ --name myoci
-
olcnectl module install
コマンドを使用して、Oracle Cloud Infrastructure Cloud Controller Managerモジュールをインストールします。 たとえば:olcnectl module install \ --environment-name myenvironment \ --name myoci
Oracle Cloud Infrastructure Cloud Controller Managerモジュールは、Kubernetesクラスタにデプロイされます。
Oracle Cloud Infrastructure Cloud Controller Managerデプロイメントの確認
オペレータ・ノード上でolcnectl module instances
コマンドを使用して、Oracle Cloud Infrastructure Cloud Controller Managerモジュールがデプロイされていることを確認できます。 たとえば:
olcnectl module instances \ --environment-name myenvironment INSTANCE MODULE STATE mycluster kubernetes installed myhelm helm installed myoci oci-ccm installed control1.example.com node installed ...
MODULE
列のoci-ccm
のエントリは、installed
状態であることに注意してください。
また、olcnectl module report
コマンドを使用して、モジュールに関する情報を確認します。 たとえば、次のコマンドを使用して、myenvironment
のmyoci
という名前のOracle Cloud Infrastructure Cloud Controller Managerモジュールを確認します:
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 describe 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>
Oracle Cloud Infrastructureブロック・ストレージの作成
この項では、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 persistentvolumeclaim/myoci-pvc created
-
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 deployment.apps/mynginx created
-
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 deployment.apps "mynginx" deleted
-
次を使用して、PersistentVolumeClaimを削除できます:
kubectl delete pvc myoci-pvc persistentvolumeclaim "myoci-pvc" deleted
ストレージが削除されます。
ヒント:
Oracle Cloud Infrastructureにログインすると、ブロック・ボリュームが終了していることがわかります。
Oracle Cloud Infrastructure Cloud Controller Managerモジュールの削除
Oracle Cloud Infrastructure Cloud Controller Managerモジュールのデプロイメントを削除し、Kubernetesクラスタをそのままにできます。 これを行うには、環境からOracle Cloud Infrastructure Cloud Controller Managerモジュールを削除します。
olcnectl module uninstall
コマンドを使用して、Oracle Cloud Infrastructure Cloud Controller Managerモジュールを削除します。 たとえば、myenvironment
という名前の環境でmyoci
という名前のOracle Cloud Infrastructure Cloud Controller Managerモジュールをアンインストールするには:
olcnectl module uninstall \ --environment-name myenvironment \ --name myoci
Oracle Cloud Infrastructure Cloud Controller Managerモジュールは環境から削除されます。