概要
IBMCloud上のRedhat Openshift環境にてPV(PersistentVolume:外部ストレージ)としてICOSオブジェクトストレージを利用する方法をまとめました。
以下の3つのステップで記載します。
- IBM Cloud Object Storage のセットアップ [Link]
- IBM Cloud Object Storage プラグインのインストール [Link]
- アプリへのオブジェクト・ストレージの追加 <- この記事の範囲 (part3)
(参考) IBMCloud Docs - アプリへのオブジェクト・ストレージの追加
前提条件
- 事前に概要に記載している以下の2ステップが完了していること
アプリへのオブジェクトストレージ追加手順
1. PVC構成ファイル準備、PVC作成
- 永続ボリューム請求 (PVC) を定義した構成ファイルを作成
- 以下のpvc.ymlファイルを作成
- PVC名は"nginx-pvc"とした
- cosとの接続では"cos-write-access-test"をシークレットに指定する(part1記事で用意したSecret)
- 容量は1GBとしています
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: nginx-pvc
namespace: default # Enter the namespace where you want to create the PVC. The PVC must be created in the same namespace where you created the Kubernetes secret for your service credentials and where you want to run your pod.
annotations:
ibm.io/auto-create-bucket: "true"
ibm.io/auto-delete-bucket: "true"
ibm.io/bucket: ""
ibm.io/object-path: ""
ibm.io/quota-limit: "true" # Disable or enable a quota limit for your PVC. To use this annotation you must specify the -set quotaLimit=true option during installation.
ibm.io/endpoint: "https://control.cloud-object-storage.cloud.ibm.com/v2/endpoints"
ibm.io/tls-cipher-suite: "default"
ibm.io/secret-name: "cos-write-access-test" # The name of your Kubernetes secret that you created.
ibm.io/secret-namespace: "default" # By default, the COS plug-in searches for your secret in the same namespace where you create the PVC. If you created your secret in a namespace other than the namespace where you want to create your PVC, enter the namespace where you created your secret.
# ibm.io/add-mount-param: "<option-1>,<option-2>" # s3fs mount options
# ibm.io/access-policy-allowed-ips: "XX.XXX.XX.XXX, XX.XX.XX.XXX, XX.XX.XX.XX" # A csv of allow listed IPs.
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: ibmc-s3fs-standard-cross-region
- クラスター内にPVCを作成する
% oc apply -f pvc.yml
persistentvolumeclaim/nginx-pvc created
%
- PVCが作成されたことを確認
% oc get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
nginx-pvc Bound pvc-4df5d9e3-eee4-478b-8f27-bc5c2970c69c 1Gi RWO ibmc-s3fs-standard-cross-region 1d
%
2. Deploymentファイルの準備(Nginx)
- 今回はNginxを利用したICOS接続を実施する
- 以下のDeployment Yamlファイルを準備する
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
labels:
app: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: jp.icr.io/xxxx-cr/nginx:latest ## 自身のContainerRegistryを参照してください。
ports:
- containerPort: 80 ## 外部向け通信ポートを80としている
volumeMounts:
- name: storage
mountPath: "/usr/share/nginx/html" ## nginxのhtmlファイル参照フォルダをI
volumes:
- name: storage
persistentVolumeClaim:
claimName: nginx-pvc ##先ほどの手順で指定したPVC名を指定する
3.デプロイメントの実行
- deploy.ymlをapplyする
% oc apply -f deploy.yml
deployment.apps/nginx-deployment created
%
- PVが正常にマウントされたことを確認
% oc describe deployment nginx
Name: nginx-deployment
Namespace: default
CreationTimestamp: Sun, 16 Jun 2024 20:53:47 +0900
Labels: app=nginx
Annotations: deployment.kubernetes.io/revision: 1
Selector: app=nginx
Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable
StrategyType: RollingUpdate
MinReadySeconds: 0
RollingUpdateStrategy: 25% max unavailable, 25% max surge
Pod Template:
Labels: app=nginx
Containers:
nginx:
Image: jp.icr.io/xxxx-cr/nginx:latest
Port: 80/TCP
Host Port: 0/TCP
Environment: <none>
Mounts:
/usr/share/nginx/html from storage (rw)
Volumes:
storage:
Type: PersistentVolumeClaim (a reference to a PersistentVolumeClaim in the same namespace)
ClaimName: nginx-pvc
ReadOnly: false
Conditions:
Type Status Reason
---- ------ ------
Available True MinimumReplicasAvailable
Progressing True NewReplicaSetAvailable
OldReplicaSets: <none>
NewReplicaSet: nginx-deployment-7f9cd899d (1/1 replicas created)
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal ScalingReplicaSet 2m1s deployment-controller Scaled up replica set nginx-deployment-7f9cd899d to 1
%
- Descriptionから、/usr/share/nginx/htmlフォルダが無事Mountされていることが確認できます