はじめに
OCIのKubernetesサービス OKE(Container Engine for Kubernetes )のPV(Persistent Volume)として、File Storage Service(FSS)をDynamic Provisioningで使用する場合の設定方法を確認します。
使用するOKE環境はこちらです。
$ kubectl get node
NAME STATUS ROLES AGE VERSION
10.0.10.211 Ready node 110d v1.24.1
事前準備
IAMポリシーの設定
マニュアルに記載のある二つのIAMポリシーを設定します。
ALLOW any-user to manage file-family in compartment <compartment-name> where request.principal.type = 'cluster'
ALLOW any-user to use virtual-network-family in compartment <compartment-name> where request.principal.type = 'cluster'
なお、使用している環境の制約上、今回は動的グループで同様に設定しています。
転送中のデータを暗号化する際の設定
セキュリティリスト設定
マニュアルに記載のある2つのルールを設定します。
- 選択したソースIPアドレスまたはCIDRブロックのすべてのポートから、またはすべてのソースから、2051の宛先ポート範囲へのTCPトラフィックを許可するステートフル・イングレス・ルール。
- 2051のソース・ポート範囲からのTCPトラフィックを許可するステートフル・エグレス・ルール。選択した宛先IPアドレスまたはCIDRブロックのすべてのポート、またはすべての宛先のいずれか。
oci-fss-utilsパッケージのインストール
各Workerノードにoci-fss-utilsパッケージをインストールします。
Workerノードがプライベートサブネットにあるため、パブリックサブネットのBastionサーバを経由して、パッケージをインストールします。
パッケージはここからダウンロードします。
[opc@uk-bastion ~]$ ls -l
total 208
-rw-r--r--. 1 opc opc 210184 Jan 12 07:18 oci-fss-utils-3.0-3.el7.x86_64.rpm
drwxrwxr-x. 2 opc opc 36 Jan 12 07:08 ssh-key
[opc@uk-bastion ~]$ scp -i ssh-key/ssh-key-2021-09-12.key oci-fss-utils-3.0-3.el7.x86_64.rpm opc@10.0.10.211:/home/opc
oci-fss-utils-3.0-3.el7.x86_64.rpm 100% 205KB 73.1MB/s 00:00
worker$ sudo yum localinstall oci-fss-utils-3.0-3.el7.x86_64.rpm
読み込んだプラグイン:langpacks, ulninfo
oci-fss-utils-3.0-3.el7.x86_64.rpm を調べています: oci-fss-utils-3.0-3.el7.x86_64
oci-fss-utils-3.0-3.el7.x86_64.rpm をインストール済みとして設定しています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ oci-fss-utils.x86_64 0:3.0-3.el7 を インストール
--> 依存性解決を終了しました。
ol7_MySQL80/x86_64
・・・
インストール:
oci-fss-utils.x86_64 0:3.0-3.el7
完了しました!
PVの利用
StorageClassの設定
Provisionerとしてfss.csi.oraclecloud.com
を指定して、StorageClassを作成します。
$ kubectl get csiDriver fss.csi.oraclecloud.com
NAME ATTACHREQUIRED PODINFOONMOUNT STORAGECAPACITY TOKENREQUESTS REQUIRESREPUBLISH MODES AGE
fss.csi.oraclecloud.com false false false <unset> false Persistent 110d
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
name: fss-storage-class
provisioner: fss.csi.oraclecloud.com
parameters:
availabilityDomain: TGjA:UK-LONDON-1-AD-2
mountTargetOcid: ocid1.mounttarget.oc1.uk_london_1.aaaaxxxxxxxxxxxxxxxxxxxxiljt
compartmentOcid: ocid1.compartment.oc1..aaaaaaxxxxxxxxxxxxxxxxxxiy5a
# kmsKeyOcid: <key-ocid>
exportPath: /fss-pvtest
# exportOptions: [{<options-in-json-format>}]
encryptInTransit: "true"
$ kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
fss-storage-class fss.csi.oraclecloud.com Delete Immediate false 39s
oci oracle.com/oci Delete Immediate false 110d
oci-bv (default) blockvolume.csi.oraclecloud.com Delete WaitForFirstConsumer true 110d
PVCの設定
作成したStorageClassを指定してPVCを作成します。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: fss-dynamic-claim
spec:
accessModes:
- ReadWriteMany
storageClassName: "fss-storage-class"
resources:
requests:
storage: 50Gi
$ kubectl apply -f fss-dyn-claim.yaml
persistentvolumeclaim/fss-dynamic-claim created
確認します。
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
fss-dynamic-claim Bound csi-fss-2c40d771-974b-470b-992f-517f3e8ae71b 50Gi RWX fss-storage-class 38s
fss-pvc Bound fss-pv 50Gi RWX 41h
$ kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
csi-fss-2c40d771-974b-470b-992f-517f3e8ae71b 50Gi RWX Delete Bound default/fss-dynamic-claim fss-storage-class 2m38s
fss-pv 50Gi RWX Retain Bound default/fss-pvc 44h
PVCだけでなくPVもデプロイされていますね。
OCIコンソールでもファイルシステムが作成されていることが確認できます。
Podの作成
作成したPVCを指定してPodを作成します。
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: nginx-dynamic
name: nginx-dynamic
spec:
containers:
- image: nginx
name: nginx-dynamic
resources: {}
volumeMounts:
- mountPath: /fss-test
name: fss-test
volumes:
- name: fss-test
persistentVolumeClaim:
claimName: fss-dynamic-claim
readOnly: false
dnsPolicy: ClusterFirst
restartPolicy: Always
status: {}
$ kubectl apply -f nginx-dynamic.yaml
pod/nginx-dynamic created
$ kubectl get pod nginx-dynamic
NAME READY STATUS RESTARTS AGE
nginx-dynamic 1/1 Running 0 50s
確認します。
$ kubectl exec -it nginx-dynamic -- mount |grep fss-test
192.168.2.2:/fss-pvtest on /fss-test type nfs (rw,relatime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,port=2049,timeo=600,retrans=2,sec=sys,mountaddr=192.168.2.2,mountvers=3,mountport=2048,mountproto=tcp,local_lock=none,addr=192.168.2.2)
$ kubectl exec -it nginx-dynamic -- df -h |grep fss-test
192.168.2.2:/fss-pvtest 8.0E 0 8.0E 0% /fss-test
$ kubectl exec -it nginx-dynamic -- touch /fss-test/testfile
$ kubectl exec -it nginx-dynamic -- ls -l /fss-test
total 0
-rw-r--r--. 1 root root 0 Jan 13 01:47 testfile
マウントされていること、書き込みができることがわかります。