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文件。