Flexvolume2CSI命令列工具可以幫您批量轉換Flexvolume叢集中PVC和PV的YAML,協助您更便捷地由Flexvolume叢集切換至CSI叢集。本文介紹如何在Flexvolume叢集中使用Flexvolume2CSI命令列工具批量轉換YAML。
實現原理
Flexvolume2CSI工具將列出叢集內所有或指定命名空間內的所有或指定的PVC、以及PVC對應的PV對象,將標準Flexvolume的PV、PVC相關的Labels、Flexvolume欄位內容轉譯為對應CSI的PV、PVC內容,並將YAML列印至檔案中,以便部署。
轉換處理僅支援處理相對標準的NAS、OSS、阿里雲雲端硬碟類型的PV和PVC,建議您在部署前再次檢查產生CSI的PV和PVC的YAML。
步驟一:安裝Flexvolume2CSI命令列工具
執行以下命令,安裝Flexvolume2CSI。
支援macOS和Linux系統安裝。
curl https://ack-csiplugin.oss-cn-hangzhou.aliyuncs.com/flexvolume2csi/get-translator.sh | bash
執行以下命令,驗證Flexvolume2CSI是否安裝成功。
flexvolume2csi version
預期輸出:
flexvolume2csi: v1.0.2+b1de5bd BuildDate: 2024-04-09T07:20:26Z GitCommit: b1de5bdce11b4b59ddce38d91d868b5f35a431c1 GitTreeState: clean GoVersion: go1.18.4 Compiler: gc Platform: darwin/arm64
預期輸出表明,Flexvolume2CSI命令列工具已安裝成功。
步驟二:為Flexvolume2CSI配置叢集資訊
執行以下命令,配置Flexvolume2CSI的叢集資訊。
flexvolume2csi configure
預期輸出:
Configuring profile 'default' ... Default Cluster Id (ClusterId of ACK Flexvolume Cluster) [c4869a2f603ca4e74****************]: Default Kubeconfig Path (default is ~/.kube/config) []: Saving profile[default] ... Done.
參數
說明
Cluster Id
Flexvolume叢集的Cluster ID。
Kubeconfig Path
Flexvolume叢集的KubeConfig路徑,預設為~/.kube/config。
步驟三:產生Flexvolume叢集中PV和PVC對應的CSI YAML檔案
選擇性參數
執行以下命令,查詢Flexvolume2CSI支援的可選配置項。
flexvolume2csi translate help
預期輸出:
flexvolume2csi source add [-n namespace] [-c pvc] [-o outputfile] [-p prefix] [-s suffix] [-b backupfile] [-a apiversion] [-t storageclass]
Usage:
flexvolume2csi translate [-n namespace] [-c pvc] [-o outputfile] [-p prefix] [-s suffix] [-b backupfile] [-a apiversion] [-t storageclass] [flags]
Examples:
# Translate PVCs and related PVs in all namespaces
flexvolume2csi translate -o output.txt
# Translate PVCs and related PVs in default namespace
flexvolume2csi translate -n default -o output.txt
# Translate PVC test-pvc and related PV in default namespace
flexvolume2csi translate -n default -p test-pvc -o output.txt
Flags:
-a, --apiversion string change pv/pvc apiversion (default "v1")
-b, --backupfile string path to backup (flexvolume) file (default "./backupfile.txt")
-h, --help help for translate
-n, --namespace string specified namespace
-o, --outputfile string path to output (CSI) file (default "./outputfile.txt")
-p, --prefix string change pv/pvc name to prefix-xxx
-c, --pvc string specified pvc
-t, --storageclass string change storageclass name
-s, --suffix string change pv/pvc name to xxx-suffix
選擇性參數 | 說明 |
-o | 產生的CSI的PV和PVC的YAML檔案地址,預設為當前路徑下的 |
-b | 備份原Flexvolume的PV和PVC的YAML檔案地址,預設為當前路徑下的 |
-n | 指定命名空間名稱,僅處理該命名空間下的PV和PVC,預設為所有命名空間。 |
-c | 指定PVC名稱,僅處理該PVC及其對應的PV,需要配合 |
-p | 產生的CSI的PV和PVC名稱的統一首碼,預設無首碼。 如原Flexvolume的PVC名稱為pvc-test,加上-p csi後,CSI對應的PVC名稱為csi-pvc-test。 |
-s | 產生的CSI的PV和PVC名稱的統一尾碼,預設無尾碼。 如原Flexvolume的pvc名稱為pvc-test,加上-s csi後,CSI對應的PVC名稱為pvc-test-csi。 |
操作樣本
使用以下內容,在Flexvolume叢集中建立pv.yaml檔案。
apiVersion: v1 kind: PersistentVolume metadata: name: pv-nas spec: capacity: storage: 5Gi storageClassName: nas accessModes: - ReadWriteMany flexVolume: driver: "alicloud/nas" options: server: "0cd8b4a576-u****.cn-hangzhou.nas.aliyuncs.com" #替換為您隱藏檔的掛載點地址。 path: "/k8s" vers: "3" options: "nolock,tcp,noresvport"
執行以下命令,在Flexvolume叢集中部署樣本PV。
kubectl apply -f pv.yaml
使用以下內容,在Flexvolume叢集中建立pvc.yaml檔案。
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-nas spec: accessModes: - ReadWriteMany storageClassName: nas resources: requests: storage: 5Gi
執行以下命令,在Flexvolume叢集中部署樣本PVC。
kubectl apply -f pvc.yaml
執行以下命令,確認PV和PVC處於Bound狀態。
kubectl get pvc | grep pvc-nas
預期輸出:
pvc-nas Bound pv-nas 5Gi RWO nas 10s
執行以下命令,使用Flexvolume2CSI命令列工具,轉換叢集內的所有PV和PVC的YAML檔案。
flexvolume2csi translate
執行以下命令,查看輸出的CSI的PV和PVC的YAML檔案。
cat ./outputfile.yaml
預期輸出:
--- apiVersion: v1 kind: PersistentVolume metadata: labels: alicloud-pvname: pv-nas name: pv-nas spec: accessModes: - ReadWriteMany capacity: storage: 5Gi csi: driver: nasplugin.csi.alibabacloud.com volumeAttributes: path: /k8s server: 0cd8b4a576-u****.cn-hangzhou.nas.aliyuncs.com volumeHandle: pv-nas mountOptions: - nolock,tcp,noresvport - vers=3 persistentVolumeReclaimPolicy: Retain storageClassName: nas volumeMode: Filesystem --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-nas namespace: default spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-nas storageClassName: nas volumeMode: Filesystem volumeName: pv-nas
預期輸出表明,已成功產生PV和PVC對應的CSI YAML檔案。