はじめに
OCI File Storage with Lustre がリリースされました!
Kubernetes用のCSIドライバも提供されていて、OKE用のPV/PVCも作れるようになっていますが、この記事の執筆の時点で、LustreクライアントがインストールされたOKEワーカー・ノード用のイメージが提供されていません。
ということで、LustreクライアントがインストールされたOKEワーカー・ノード用のイメージを作成して、OKEのノード・プールを作成してみたいと思います。そうすればこのノード上にデプロイされたPodはめでたくLustreをマウントできます。
作業手順
- ワーカー・ノード用イメージを作成する
- OKEのノード・プールを作成する
- PV/PVCを作成する
- PodからLustreファイル・システムにアクセスする
1. ワーカー・ノード用イメージを作成する
1-1. イメージOCIDの取得
OKEのワーカー・ノード用のイメージはOracleから提供されています。
Linux 8.xのOKE用イメージのOCIDは本来はここで取得可能です。
が、しかしながら最新のOKE 1.32.1用のイメージがまだ掲載されていません!
(近日掲載されるとは思いますが...)
ということで、最新イメージのOCIDを探さないといけないのですが、1.32.1のノード・プールを作成すると、使用しているイメージが出てきます。
イメージ名のところがリンクになっているので、ここをクリックすると詳細画面に遷移して、ここでこのイメージのOCIDが取得できます。
※ イメージのOCIDはリージョン毎に異なります。
私が検証した時点では、通常のノード・プールであれば、
Oracle-Linux-8.10-2025.02.28-0-OKE-1.32.1-760
GPUを搭載したノードプールを作成するのであれば、
Oracle-Linux-8.10-Gen2-GPU-2025.02.28-0-OKE-1.32.1-760
が選択肢となります。
1-2. インスタンスの起動 & Lustreクライアントのインストール
このイメージを使って、まずは通常のコンピュート・インスタンスとして起動します。
起動した後は、sshでログインして、Lustreクライアントをインストールします。
Lustreクライアントのインストールについては、以下のドキュメンテーションやQiitaの記事を参照して下さい。
1-3. カスタム・イメージの作成
Lustreクライアントをインストールしたインスタンスからカスタム・イメージを作成します。
コンソールのインスタンス詳細画面から「アクション」「カスタム・イメージを作成」を選択します。
ここでは "oke-woker-base-1.32.1" という名前でカスタム・イメージを作成しました。
カスタム・イメージの詳細画面でこのイメージのOCIDが確認できます。このOCIDを使ってこの後ノード・プールを作成します。
2. OKEのノード・プールを作成する
コンソールからだと、先ほど作成したカスタム・イメージを選択してノード・プールを作成することができませんが、APIとしてはサポートしていますので、CLIを使ってノード・プールを作成します。
oci ce node-pool create \
-c ocid1.compartment.oc1..aaaaaaaaxxxxxxxxxxx \
--cluster-id ocid1.cluster.oc1.iad.aaaaaaaaxxxxxxxxxxxxx \
--name Lustre_Nodepool \
--kubernetes-version v1.32.1 \
--node-shape VM.Standard.E5.Flex \
--placement-configs '[{"availability-domain": "OcIE:US-ASHBURN-AD-1","subnet-id": "ocid1.subnet.oc1.iad.aaaaaaaaxxxxxxxxxxxxxxx"}]' \
--size 2 \
--node-image-id ocid1.image.oc1.iad.aaaaaaaauxxxxxxxxxxxx \
--node-shape-config '{"ocpus": 1.0, "memoryInGBs": 8.0}' \
--ssh-public-key "ssh-rsa AAAABxxxxxxxxxxJHw== rsa-key-yyyymmdd"
OKEのコンソール画面から無事カスタム・イメージを使ってノード・プールが作成されていることを確認して下さい。
3. PV/PVCを作成する
ドキュメンテーションはこちらにあります。
3-1. PersistentVolume
volumeHandle
の部分は、File Storage with Lustre のコンソールに表示されるマウント・コマンドの情報を設定します。
# lustre-pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: lustre-pv
spec:
capacity:
storage: 31Ti
volumeMode: Filesystem
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
csi:
driver: lustre.csi.oraclecloud.com
volumeHandle: "10.0.2.66@tcp:/lustrefs"
fsType: lustre
volumeAttributes:
setupLnet: "true”
3-2. PersistentVolumeClaim
# lustre-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: lustre-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: ""
volumeName: lustre-pv
resources:
requests:
storage: 31Ti
4. PodからLustreファイル・システムにアクセスする
前述のPV/PVCをデプロイし、PVCを使ってLustreファイル・システムをマウントしたPodをデプロイします。
# lustre-pod.yaml
apiVersion: v1
kind: Pod
metadata:
name: lustre-pod
spec:
containers:
- name: busybox
image: busybox:latest
command:
- sleep
- infinity
volumeMounts:
- name: persistent-storage
mountPath: /data
volumes:
- name: persistent-storage
persistentVolumeClaim:
claimName: lustre-pvc
では、Podをデプロイして、Lustreファイル・システムにアクセスしてみましょう。
$ kubectl apply -f lustre-pod.yaml
pod/lustre-pod created
$ kubectl exec lustre-pod -- touch /data/test.txt
$ kubectl exec lustre-pod -- ls -l /data/test.txt
-rw-r--r-- 1 root root 0 Apr 29 13:41 /data/test.txt
$ kubectl exec lustre-pod -- rm /data/test.txt
$ kubectl delete pod lustre-pod
pod "lustre-pod" deleted
まとめ
カスタム・イメージはエクスポートしておけば、リージョンを超えて複数のプロジェクトで使いまわせます。
OKEのノード・プールをアップグレードしてしまうと、Lustreクライアントがインストールされていないイメージに入れ替わってしまうので注意して下さい。