このドキュメントで説明されているソフトウェアは、サポートされなくなったか、拡張サポートされています。
Oracleでは、現在サポートされているリリースにアップグレードすることをお勧めします。
第3章 Glusterストレージの使用
この章では、Gluster Container Storage Interfaceモジュールをインストールして使用し、Oracle Cloud Native EnvironmentでGluster Storage for Oracle LinuxおよびHeketiを使用してKubernetesアプリケーション用に動的にプロビジョニングされる永続記憶域を設定する方法について説明します。
3.1 前提条件
Gluster Storage for Oracle Linuxクラスタを設定し、すぐに使用できる状態にする必要があります。 HeketiをGlusterクラスタにインストールする必要もあります。 Platform API ServerはHeketi APIと通信して、Glusterボリュームをプロビジョニングおよび管理します。
Glusterボリュームは必要に応じて動的にプロビジョニングされるため、作成する必要はありません。
Glusterの設定の基本要件は次のとおりです:
-
Glusterクラスタの各ノードにGlusterをインストールします。
-
Glusterネイティブ・クライアント(FUSE)メソッドを使用してボリュームにアクセスするようにクラスタを設定します。
-
Heketiをインストールし、Glusterクラスタを作成します。
-
オペレータ・ノードからHeketi APIに接続できることを確認します。
Gluster Storage for Oracle LinuxおよびHeketiのインストールおよび設定については、「Oracle® Linux: Gluster Storage for Oracle Linuxユーザー・ガイド」を参照してください。
3.2 Glusterモジュールのデプロイ
単一のolcnectl module createコマンドを使用して、KubernetesクラスタのGlusterストレージを設定するために必要なすべてのモジュールをデプロイできます。 このメソッドは、Kubernetesクラスタのデプロイと同時にGluster Container Storage Interfaceモジュールをデプロイする場合に役立つことがあります。
Kubernetesモジュールの既存のデプロイメントがある場合は、Gluster Container Storage Interfaceモジュールのデプロイ時にそのインスタンスを指定できます。
この項では、Gluster Container Storage Interfaceモジュールのデプロイに必要な各コンポーネントのインストールについて説明します。
モジュールの作成時に使用可能なプラットフォームCLIコマンド・オプションの完全なリストは、「プラットフォーム・コマンドライン・インタフェース」のolcnectl module createコマンドを参照してください。
-
環境が設定されていない場合は、モジュールをデプロイできる環境を作成します。 環境の設定の詳細は、「スタート・ガイド」を参照してください。 この例の環境の名前は、
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クラスタにデプロイされます。
-
Gluster Container Storage Interfaceモジュールを作成し、
--gluster-helm-module
オプションを使用してmyhelm
という名前のHelmモジュールに関連付けます。 この例では、Gluster Container Storage Interfaceモジュールの名前はmygluster
です。olcnectl module create \ --environment-name myenvironment \ --module gluster \ --name mygluster \ --gluster-helm-module myhelm \ --gluster-server-url https:\\mygluster.example.com:8080
--module
オプションは、モジュール・タイプを作成(gluster
)に設定します。 Gluster Container Storage Interfaceモジュールの名前は、--name
オプションを使用して定義します(この場合はmygluster
)。--gluster-helm-module
オプションは、Helmモジュールの名前を設定します。 同じ名前の既存のHelmモジュールがある場合、プラットフォームAPIサーバーはそのHelmインスタンスを使用します。--gluster-server-url
オプションは、Heketi APIサーバーのロケーションを設定します。この例ではhttps:\\mygluster.example.com:8080
です。 このオプションのデフォルトはhttp://127.0.0.1:8080
であるため、Heketiがオペレータ・ノード上にHTTPを使用している場合は、このオプションを含める必要はありません。ヒント「カール」を使用して、オペレータ・ノードからHeketi APIに到達できることを確認します。次に例を示します:
curl -w "\n" https:\\mygluster.example.com:8080/hello
または、HTTPを使用してオペレータ・ノード上にHeketiがある場合:
curl -w "\n" http:\127.0.0.1:8080/hello
次の結果が表示されます:
Hello from Heketi.
モジュールの追加時に必要なすべてのオプションを含めない場合は、オプションを指定するように求められます。
--gluster-server-user
や--gluster-secret-key
などのデフォルト値を使用しない場合、含める必要があるオプションのコマンド・オプションがいくつかあります。 -
olcnectl module validateコマンドを使用して、Gluster Container Storage Interfaceモジュールをノードにデプロイできることを検証します。 たとえば:
olcnectl module validate \ --environment-name myenvironment \ --name mygluster
-
olcnectl module installコマンドを使用して、Gluster Container Storage Interfaceモジュールをインストールします。 たとえば:
olcnectl module install \ --environment-name myenvironment \ --name mygluster
Gluster Container Storage Interfaceモジュールは、Kubernetesクラスタにデプロイされます。
3.3 Glusterモジュールのデプロイメントの確認
オペレータ・ノードのolcnectl module instancesコマンドを使用して、Gluster Container Storage Interfaceモジュールがデプロイされていることを確認できます。 たとえば:
olcnectl module instances \
--environment-name myenvironment
INSTANCE MODULE STATE
mycluster kubernetes installed
myhelm helm installed
mygluster gluster installed
control1.example.com node installed
...
MODULE
列のgluster
のエントリは、installed
状態であることに注意してください。
また、olcnectl module reportコマンドを使用して、モジュールに関する情報を確認します。 たとえば、次のコマンドを使用して、myenvironment
のmygluster
という名前のGlusterコンテナ・ストレージ・インタフェース・モジュールを確認します:
olcnectl module report \ --environment-name myenvironment \ --name mygluster \ --children
olcnectl module reportコマンドの構文の詳細は、「プラットフォーム・コマンドライン・インタフェース」を参照してください。
コントロール・プレーン・ノードでは、kubectl get scコマンドを使用して、GlusterfsプロビジョナのStorageClassが作成されていることを確認することもできます:
kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ...
hyperconverged (default) kubernetes.io/glusterfs Delete Immediate ...
この場合、StorageClassの名前はhyperconverged
(デフォルトの名前)になります。
「kubectlはscを記述」コマンドを使用して、StorageClassの詳細を取得できます。 たとえば:
kubectl describe sc hyperconverged
Name: hyperconverged
IsDefaultClass: Yes
Annotations: meta.helm.sh/release-name=mygluster,meta.helm.sh/release-namespace=defau...
Provisioner: kubernetes.io/glusterfs
Parameters: restauthenabled=true,resturl=http://...:8080,restuser=admin,secretName=a...
AllowVolumeExpansion: <unset>
MountOptions: <none>
ReclaimPolicy: Delete
VolumeBindingMode: Immediate
Events: <none>
3.4 Gluster Volumeの作成
この項では、Glusterボリュームを作成して、Kubernetesで実行されているアプリケーションに永続ストレージを提供できることを確認する基本的なテストを示します。
-
Kubernetes PersistentVolumeClaimファイルを作成します。 コントロール・プレーン・ノードで、
pvc.yaml
という名前のファイルを作成します。 ファイルに次の内容をコピーします。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: mygluster-pvc spec: accessModes: - ReadWriteMany resources: requests: storage: 1Gi
-
Kubernetes PersistentVolumeClaimを作成します。
kubectl apply -f pvc.yaml
persistentvolumeclaim/mygluster-pvc created -
PersistentVolumeClaimは、kubectl get pvcコマンドを使用して作成できます:
kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE mygluster-pvc Bound pvc-59f70... 1Gi RWX hyperconverged 18skubectl describe pvcコマンドを使用して、PersistentVolumeClaimの詳細を取得できます。 たとえば:
kubectl describe pvc mygluster-pvc
Name: mygluster-pvc Namespace: default StorageClass: hyperconverged Status: Bound Volume: pvc-59f7047b-9287-4163-9cff-c669cfbd4970 Labels: <none> Annotations: pv.kubernetes.io/bind-completed: yes pv.kubernetes.io/bound-by-controller: yes volume.beta.kubernetes.io/storage-provisioner: kubernetes.io/glusterfs Finalizers: [kubernetes.io/pvc-protection] Capacity: 1Gi Access Modes: RWX VolumeMode: Filesystem Used By: <none> Events: Type Reason Age From Message ---- ------ ---- ---- ------- Normal ProvisioningSucceeded 73s persistentvolume-controller Successfully provi... -
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: mygluster-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 16s -
「kubectlはデプロイメントの説明です」コマンドを使用して、アプリケーションがPersistentVolumeClaimを使用してGlusterfsに永続ストレージを提供していることがわかります:
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 ... ClaimName: mygluster-pvc ReadOnly: false -
次を使用して、テスト・アプリケーションを削除できます:
kubectl delete deployment mynginx
deployment.apps "mynginx" deleted -
次を使用して、PersistentVolumeClaimを削除できます:
kubectl delete pvc mygluster-pvc
persistentvolumeclaim "mygluster-pvc" deleted
3.5 Glusterモジュールの取り外し
Gluster Container Storage Interfaceモジュールのデプロイメントを削除し、Kubernetesクラスタをそのままにしておくことができます。 これを行うには、環境からGluster Container Storage Interfaceモジュールを削除します。
olcnectl module uninstallコマンドを使用して、Gluster Container Storage Interfaceモジュールを削除します。 たとえば、myenvironment
という名前の環境でmygluster
という名前のGluster Container Storage Interfaceモジュールをアンインストールするには:
olcnectl module uninstall \ --environment-name myenvironment \ --name mygluster
Gluster Container Storage Interfaceモジュールは環境から削除されます。