はじめに
OCIのKubernetesサービス OKE(Container Engine for Kubernetes )のPV(Persistent Volume)として、File Storage Service(FSS)を使用する場合の設定方法を確認します。
以下のマニュアルに沿って実施します。
使用するOKE環境はこちらです。
$ kubectl get node
NAME STATUS ROLES AGE VERSION
10.0.10.211 Ready node 108d v1.24.1
事前準備
File Storage Serviceの作成
使用するFSSは事前に作成しておきます。
OCIコンソールのストレージ→ファイル・ストレージからファイル・システムの作成をクリックしてFSSを作成します。
セキュリティルールの設定
今回の環境は、シナリオA: 同じサブネット内のマウント・ターゲットとインスタンスに当たりますので、マニュアルの通りにセキュリティリストを設定します。
PVの設定と使用
PVの作成
マニュアルにあるマニフェストをそのまま使用してPVを作成します。
volumeHandleは以下のように環境に合わせて設定する必要があります。
volumeHandle: <FileSystemOCID>:<MountTargetIP>:<path>
apiVersion: v1
kind: PersistentVolume
metadata:
name: fss-pv
spec:
capacity:
storage: 50Gi
volumeMode: Filesystem
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
csi:
driver: fss.csi.oraclecloud.com
volumeHandle: ocid1.filesystem.oc1.uk_london_1.aaaaaaxxxxxxxxxxxxxxxxwiljt:10.0.10.xx:/FileSystem-20230111-0418-01
$ kubectl apply -f pv.yaml
persistentvolume/fss-pv created
$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
fss-pv 50Gi RWX Retain Available 11s
PVCの作成
これもマニュアルの通りに作成します。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: fss-pvc
spec:
accessModes:
- ReadWriteMany
storageClassName: ""
resources:
requests:
storage: 50Gi
volumeName: fss-pv
$ kubectl apply -f pvc.yaml
persistentvolumeclaim/fss-pvc created
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
fss-pvc Bound fss-pv 50Gi RWX 13s
$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
fss-pv 50Gi RWX Retain Bound default/fss-pvc 162m
Podの作成
Podを作成してPVをマウントします。
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: nginx
name: nginx
spec:
containers:
- image: nginx
name: nginx
resources: {}
volumeMounts:
- mountPath: /fss-test
name: fss-test
volumes:
- name: fss-test
persistentVolumeClaim:
claimName: fss-pvc
readOnly: false
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
$ kubectl apply -f pod.yaml
pod/nginx created
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 9s
確認します。
$ kubectl exec -it nginx -- mount | grep fss-test
10.0.10.174:/FileSystem-20230111-0418-01 on /fss-test type nfs (rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=10.0.10.174,mountvers=3,mountport=2048,mountproto=udp,local_lock=none,addr=10.0.10.174)
マウントされてますね。
$ kubectl exec -it nginx -- df -h | grep fss-test
10.0.10.174:/FileSystem-20230111-0418-01 8.0E 0 8.0E 0% /fss-test
PVCでrequestした50GBではなく、FSSの上限の8EBとして認識されています。
マニュアルに以下の記載があります。
requests: storage:要素はPVCのマニフェスト・ファイルに存在する必要があり、その値はPVのマニフェスト・ファイルのcapacity: storage:要素に指定された値と一致する必要があります。それ以外に、requests: storage:要素の値は無視されます。
requestは形式的に書かないといけないけど、その値に意味はないようです。
ファイルを作成して、書き込みができることを確認します。
$ kubectl exec -it nginx -- touch /fss-test/testfile
$ kubectl exec -it nginx -- ls /fss-test/
testfile
AccessModeをRWXにしてますので、別Podから同じPVにアクセスできるか確認します。
Volumeの設定が同じ別のPodを作成しました。
$ kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx 1/1 Running 0 18m
redis 1/1 Running 0 10s
マウントできて、別Podで作成したファイルを参照できることを確認します。
$ kubectl exec -it redis -- df -h | grep fss-test
10.0.10.174:/FileSystem-20230111-0418-01 8.0E 0 8.0E 0% /fss-test
$ kubectl exec -it redis -- ls /fss-test
testfile
書き込みもできることを確認します。
$ kubectl exec -it redis -- touch /fss-test/testfile2
$ kubectl exec -it nginx -- ls /fss-test
testfile testfile2

