因為我們還沒跟 Persistent Volume 串接起來,要透過 OpenStack 提供的 Cinder CSI Plugin 讓 K8s 可以動態建立 PV。
Cinder CSI Plugin 是 K8s 對於 OpenStack 所寫的擴充套件,可以用來動態建立 PV,讓 PVC 可以自動 Mount 上去。
接下來就一步一步完成。
這裡就仿照 Day 20 所寫的 Application Credentials 去建立,名稱就寫 Cinder CSI K8s,角色就選擇 member。

建立完成以後,就點擊 下載 clouds.yaml,等一下會使用到裡面的內容。

這裡我們先來把 Kubernetes 官方提供的 OpenStack 相關套件 Repo 加入進去:
helm repo add cpo https://kubernetes.github.io/cloud-provider-openstack
helm repo update
然後把 cpo/openstack-cinder-csi 的 Values 預設內容變成檔案:
helm show values cpo/openstack-cinder-csi > values.yaml # 把 openstack-cinder-csi Chart 的預設值變成檔案
接下來就來把參數編輯上去
vim values.yaml
基本上上面的內容不需要做任何變動,往 .secret 欄位看

這裡可以填寫下載的 clouds.yaml 內容,可以照下面的參考網址做參數對應:https://github.com/kubernetes/cloud-provider-openstack/blob/master/docs/openstack-cloud-controller-manager/using-openstack-cloud-controller-manager.md#global
下面就給個範例設定那幾行的內容:
secret:
enabled: true
create: true
filename: cloud.conf
name: cinder-csi-cloud-config
data:
cloud.conf: |-
[Global]
auth-url="" # OpenStack Auth URL
application-credential-id="" # Credential ID
application-credential-secret="" # Credential Secret
region=RegionOne
建立完成後,就安裝進去吧,官方文件是建議安裝在 kube-system 的 Namespace 裡面,那這裡就照這方向進行:
helm install --namespace kube-system cinder-csi cpo/openstack-cinder-csi -f values.yaml

安裝成功就會說使用 StorageClass 這兩個 csi-cinder-sc-retain 跟 csi-cinder-sc-delete 這就可以使用 PV。
這裡就可以建立 PVC:
# 1. Save as `example-pvc.yaml`
# 2. In bash, `kubectl apply -f example-pvc.yaml`
# 3. If you want to remove, `kubectl delete -f example-pvc.yaml`
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: csi-pvc-cinderplugin
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
storageClassName: csi-cinder-sc-delete
---
apiVersion: v1
kind: Pod
metadata:
name: nginx
spec:
containers:
- image: nginx
imagePullPolicy: IfNotPresent
name: nginx
ports:
- containerPort: 80
protocol: TCP
volumeMounts:
- mountPath: /var/lib/www/html
name: csi-data-cinderplugin
volumes:
- name: csi-data-cinderplugin
persistentVolumeClaim:
claimName: csi-pvc-cinderplugin
readOnly: false
用 apply 套用設定:
kubectl apply -f example-pvc.yaml
稍等再檢查一下 PV 跟 PVC,就會發現他們已經 Bound 了

OpenStack 雲硬碟上也會有掛載硬碟到 VM 上

接下來就刪除它:
kubectl delete -f example-pvc.yaml
刪除後沒隔多久 PV 就會消失了,那是因為 StorageClass 選了 csi-cinder-sc-delete,遇到 PVC 被刪除,PV 就會跟著移除。

那重要資料需要保留怎麼辦?其實就只要把 StorageClass 改為 csi-cinder-sc-retain,遇到 PVC 被刪除,PV 也不會跟著被刪除。
cinder-csi-plugin 雖然最後有時測上去有成功,但是 liveness 一直自己回應 HTTP 500,還會斷線,但 PVC 這樣測試下來目前都沒有碰到問題,甚至我也用 Service 測試連線了,也都是回傳 OK,沒有跳出錯誤。

基本儲存也具備,那我們就可以來建立監控服務了!
本系列內容也會同步貼到我的 Blog https://blog.yangjerry.tw 歡迎來我的 Blog 點一下 RSS 追蹤,那我們就下一篇文章見啦!