FlexVolume2CSI CLIを使用して、FlexVolumeで管理される永続ボリュームクレーム (PVC) および永続ボリューム (PV) を、Container Storage Interface (CSI) インラインボリュームで管理されるPVCおよびPVに一括変換できます。 このトピックでは、FlexVolume2CSIを使用してYAMLファイルをバッチ変換する方法について説明します。
仕組み
FlexVolume2CSIを使用して、クラスターまたは指定された名前空間内のすべてまたは指定されたボリュームまたはワークロードリソースを一覧表示できます。 次に、FlexVolume2CSIを使用して、FlexVolumeで管理されているYAMLファイルをCSIで管理されているYAMLファイルに変換し、展開しやすいようにYAMLファイルを追加します。
FlexVolume2CSIを使用して、標準のApsara File Storage NAS (NAS) 、Object Storage Service (OSS) 、およびディスクボリューム、またはワークロードのインラインボリュームのみのPVおよびPVCを変換できます。 FlexVolume2CSI for CSIによって生成されたYAMLファイルをボリュームのプロビジョニングに使用する前に確認することを推奨します。
ステップ1: FlexVolume2CSIのインストール
次のコマンドを実行してFlexVolume2CSIをインストールします。
FlexVolume2CSIはMacOSおよびLinuxをサポートします。
curl https://ack-csiplugin.oss-cn-hangzhou.aliyuncs.com/flexvolume2csi/get-translator.sh | bash
次のコマンドを実行して、FlexVolume2CSIがインストールされていることを確認します。
flexvolume2csi version
想定される出力:
flexvolume2csi: v2.0.0+f87c834 BuildDate: 2025-01-06T03:49:37Z GitCommit: f87c83459b8407668a04f7e7434cc51439c87508 GitTreeState: clean GoVersion: go1.23.3 Compiler: gc Platform: darwin/arm64
出力は、FlexVolume2CSIがインストールされていることを示します。
ステップ2: 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.
パラメーター
説明
クラスターId
FlexVolumeを使用するクラスターのID。
クベコンフィグの道
FlexVolumeを使用するクラスターのkubeconfigファイルのパス。 デフォルトは ~/.kube/configです。
ステップ3: クラスタ内のFlexVolumeによって管理されるPVおよびPVCをCSIによって管理されるPVおよびPVCに変換する
オプションパラメーター
次のコマンドを実行して、FlexVolume2CSIのオプションパラメーターを照会します。
flexvolume2csi translate help
想定される出力:
flexvolume2csi source add [-n namespace] [-c pvc] [-o outputfile] [-p prefix] [-s suffix] [-b backupfile] [-t storageclass]
Usage:
flexvolume2csi translate [-n namespace] [-c pvc] [-o outputfile] [-p prefix] [-s suffix] [-b backupfile] [-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:
-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によって管理されるPVCおよびPVのYAMLファイルのパス。 デフォルトでは、ファイル名は |
-b | FlexVolumeによって管理される元のPVCおよびPVのバックアップYAMLファイルのパス。 デフォルトでは、ファイル名は |
-n | 名前空間の名前。 名前空間を指定した場合、指定された名前空間内のPVおよびPVCのみが変換されます。 デフォルトでは、すべての名前空間のPVとPVCが変換されます。 |
-c | PVCの名前。 PVCを指定した場合、指定されたPVCとPVのみが変換されます。 このパラメーターは、 |
-p | CSIによって管理されるPVCおよびPVのプレフィックス。 デフォルトでは、プレフィックスは指定されません。 たとえば、FlexVolumeによって管理されるPVCの名前がpvc-testで、プレフィックスがcsiの場合、CSIによって管理されるPVCの名前はcsi-pvc-testです。 |
-s | CSIによって管理されるPVCおよびPVの接尾辞。 デフォルトでは、サフィックスは指定されません。 たとえば、FlexVolumeによって管理されるPVCの名前がpvc-testで、サフィックスが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" #Replace the value with the actual mount target. 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にバインドされていることを確認します。
kubectl get pvc | grep pvc-nas
想定される出力:
pvc-nas Bound pv-nas 5Gi RWO nas 10s
次のコマンドを実行して、FlexVolume2CSIを使用してクラスター内のPVとPVCを変換します。
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が変換されることを示す。
(オプション) ステップ4: インラインFlexVolumeボリュームを使用してワークロードに対応するCSI YAMLファイルを生成する
以前のバージョンのKubernetesを実行するACKマネージドクラスターとACKサーバーレスクラスターを使用すると、FlexVolumeボリュームをインラインモードでクラスターのワークロードにマウントできます。 このようなワークロードがクラスターで実行されている場合は、YAMLファイルを変換する必要があります。
インラインマウント方式では、対応するPVCおよびPVリソースは必要ありません。 次の内容は、インラインモードでFlexVolumeをマウントするステートフルアプリケーションのYAMLファイルです。
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: nginx
spec:
serviceName: nginx
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
volumeMounts:
- name: test
mountPath: /data
ports:
- containerPort: 80
volumes:
- name: test
flexVolume:
driver: "alicloud/disk"
fsType: "ext4"
options:
volumeId: "d-bp1f3b5d0b0a8e7e6f****"
volumeClaimTemplates:
- metadata:
name: disk-ssd
spec:
accessModes: [ "ReadWriteOnce" ]
storageClassName: "alicloud-disk-ssd"
resources:
requests:
storage: 20Gi
testという名前のボリュームは、インラインモードでマウントされるFlexVolumeボリュームです。
volumeClaimTemplatesのボリュームは、動的モードのコントローラを使用して、関連するPVCおよびPVリソースを自動的に作成します。 このようにして生成されたPVC及びPVリソースは、ステップ3において、CSIによって管理されるPVC及びPVに変換することができる。
コントローラを使用してCSIのPVCおよびPVリソースを再作成する場合は、関連するFlexVolumeのPVCおよびPVリソースを削除し、volumeClaimTemplatesのstorageClassNameフィールドの値をCSIが管理するストレージクラスに変更できます。 削除する前に、データが不要になったことを確認してください。
変換
インラインモードでマウントされたFlexVolumeボリュームが変換される場合:
指定されたvolumeIdがないボリュームは、インラインモードでエフェメラルボリュームに変換されます。
他のタイプのボリュームは、独立したPVC及びPVの形態のCSIボリュームに変換される。 生成されたCSI YAMLファイルには、PV、PVC、および元のワークロードリソースが含まれます。
オプションパラメーター
次のコマンドを実行して、FlexVolume2CSIのオプションパラメーターを照会します。
flexvolume2csi inline-translate help
想定される出力:
flexvolume2csi source add [-n namespace] [-k kind] [-i item] [-f inputfile] [-o outputfile] [-b backupfile] [-t storageclass] [-c capacity]
Usage:
flexvolume2csi inline-translate [-n namespace] [-k kind] [-i item] [-f inputfile] [-o outputfile] [-b backupfile] [-t storageclass] [-c capacity] [flags]
Examples:
# Translate inline FlexVolume Volumes for ALL kinds of workloads (like StatefulSets, Deployments ...) in all namespaces
# Note1: Pods will not be translated when Kind of workload is not specified, please use "-k pod" if need.
# Note2: VolumeClaimTemplates will not be translated for StatefulSets, please modified the field \"storageClassName\" by hand.
flexvolume2csi inline-translate -o output.txt
# Translate inline FlexVolume Volumes for ALL kinds of workloads (like StatefulSets, Deployments ...) in default namespace
flexvolume2csi inline-translate -n default -o output.txt
# Translate inline FlexVolume Volumes for StatefulSets in default namespace
flexvolume2csi inline-translate -n default -k sts -o output.txt
# Translate inline FlexVolume Volumes for StatefulSets test-sts in default namespace
flexvolume2csi inline-translate -n default -k sts -i test-sts -o output.txt
# Translate inline FlexVolume Volumes for every Item in the input file with "---\n" to separate items
flexvolume2csi inline-translate -i input.txt -o output.txt
}
Flags:
-b, --backupfile string path to backup (FlexVolume) file (default "./backupfile.txt")
-c, --capacity string change capacity
-h, --help help for inline-translate
-f, --inputfile string path to input (FlexVolume) file
-i, --item string specified item name
-n, --namespace string specified namespace
-o, --outputfile string path to output (CSI) file (default "./outputfile.txt")
-t, --storageclass string change storageclass name
-k, --sts string specified kind for workloads
オプションパラメーター | 説明 |
-o | CSIによって管理されるPVCおよびPVのYAMLファイルのパス。 デフォルトでは、ファイル名は |
-b | FlexVolumeによって管理されるワークロードのバックアップYAMLファイルのパス。 デフォルトでは、ファイル名は |
-n | 名前空間の名前。 名前空間を指定した場合、指定された名前空間のFlexVolumeによって管理されるボリュームを使用するワークフローのみが変換されます。 デフォルトでは、すべての名前空間のワークロードが変換されます。 |
-k | StatefulSetやDeploymentなどのワークロードの種類。 FlexVolumeボリュームにマウントされた指定されたタイプのワークロードのみが処理されます。 デフォルトでは、すべてのタイプのワークロードが処理されます。 |
-i | ワークロードの名前。 指定されたワークロードのみが処理されます。 このパラメーターは、 |
-f | 指定されたYAMLファイルアドレスからワークロードリソースを読み取り、変換します。 クラスターからワークロードがリストされなくなりました。 |
手順
指定されたvolumeId
を持たないディスクをエフェメラルボリュームに変換する
次の内容を使用して、FlexVolumeを使用するクラスターにワークロードを作成します。
apiVersion: apps/v1 kind: Deployment metadata: name: nginx spec: selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 volumeMounts: - name: test mountPath: /data ports: - containerPort: 80 volumes: - name: test flexVolume: driver: "alicloud/disk" fsType: "ext4" options: volumeSize: "20"
次のコマンドを実行して、FlexVolume2CSI CLIを使用し、デプロイされたワークロードを変換します。
flexvolume2csi inline-translate -k deploy -n default -i nginx
次のコマンドを実行して、CSIが管理するPVおよびPVCのYAMLファイルのコンテンツを印刷します。
cat ./outputfile.yaml
想定される出力:
--- apiVersion: apps/v1 kind: Deployment metadata: name: nginx namespace: default spec: progressDeadlineSeconds: 600 replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: app: nginx strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: labels: app: nginx spec: containers: - image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 imagePullPolicy: IfNotPresent name: nginx ports: - containerPort: 80 protocol: TCP resources: {} terminationMessagePath: /dev/termination-log terminationMessagePolicy: File volumeMounts: - mountPath: /data name: test dnsPolicy: ClusterFirst restartPolicy: Always schedulerName: default-scheduler securityContext: {} terminationGracePeriodSeconds: 30 volumes: - ephemeral: volumeClaimTemplate: metadata: spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi name: test
ご覧のとおり、インラインFlexVolumeボリュームは対応するエフェメラルボリュームに変換されます。
生成されたYAMLコンテンツを一時ボリュームに変換するときに、必要に応じて生成されたYAMLファイルを調整します。
一時ストレージクラスを一時パラメーターで指定する必要があります。
volumes: - ephemeral: volumeClaimTemplate: metadata: spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi storageClassName: ephemeral-disk
上記の変更は、変換中に-tおよび-cパラメーターを指定することによっても実装でき、すべてのリソースに有効になります。
flexvolume2csi inline-translate -k deploy -n default -i nginx -t ephemeral-disk
他のタイプのボリュームをCSIボリュームに変換
この例では、-f
パラメーターを使用して、変換する必要があるYAMLコンテンツを指定します。
この手順の最初に示したステートフルアプリケーションのYAMLファイルをdisk-static-sts.yamlファイルとして保存します。
次のコマンドを実行して、FlexVolume2CSI CLIを使用して、ファイルに記載されているステートフルアプリケーションを変換します。
flexvolume2csi inline-translate -f disk-static-sts.yaml
次のコマンドを実行して、変換されたステートフルアプリケーションのYAMLファイルを表示します。
cat ./outputfile.txt
想定される出力:
--- apiVersion: v1 kind: PersistentVolume metadata: name: d-bp1f3b5d0b0a8e7e6f**** spec: accessModes: - ReadWriteOnce claimRef: kind: PersistentVolumeClaim name: sts-nginx-test namespace: default csi: driver: diskplugin.csi.alibabacloud.com fsType: ext4 volumeAttributes: volumeId: d-bp1f3b5d0b0a8e7e6f**** volumeHandle: d-bp1f3b5d0b0a8e7e6f**** persistentVolumeReclaimPolicy: Delete --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: sts-nginx-test namespace: default spec: accessModes: - ReadWriteOnce resources: {} volumeName: d-bp1f3b5d0b0a8e7e6f**** --- apiVersion: apps/v1 kind: StatefulSet metadata: name: nginx namespace: default spec: replicas: 1 selector: matchLabels: app: nginx serviceName: nginx template: metadata: labels: app: nginx spec: containers: - image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 name: nginx ports: - containerPort: 80 resources: {} volumeMounts: - mountPath: /data name: test volumes: - name: test persistentVolumeClaim: claimName: sts-nginx-test updateStrategy: {} volumeClaimTemplates: - metadata: name: disk-ssd spec: accessModes: [ "ReadWriteOnce" ] storageClassName: "alicloud-disk-ssd" resources: requests: storage: 20Gi
FlexVolumeによって管理されるインラインボリュームは、CSIによって管理されるPVCおよびPVに変換されます。 ステートフル・アプリケーションに対応するボリューム・タイプは、CSIによって管理されるPVCを指す。 また、volumeClaimTemplatesの内容は変更されません。
生成されたYAMLファイルをCSIが管理するストレージクラスに変換するときに、必要に応じて生成されたYAMLファイルを調整します。
CSIが管理するPVCおよびPVに必要なストレージ容量 (20Giなど) を宣言します。
--- apiVersion: v1 kind: PersistentVolume metadata: name: d-bp1f3b5d0b0a8e7e6f**** spec: accessModes: - ReadWriteOnce capacity: storage: 20Gi claimRef: kind: PersistentVolumeClaim name: sts-nginx-test namespace: default csi: driver: diskplugin.csi.alibabacloud.com fsType: ext4 volumeAttributes: volumeId: d-bp1f3b5d0b0a8e7e6f**** volumeHandle: d-bp1f3b5d0b0a8e7e6f**** persistentVolumeReclaimPolicy: Delete --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: sts-nginx-test namespace: default spec: accessModes: - ReadWriteOnce resources: requests: storage: 20Gi volumeName: d-bp1f3b5d0b0a8e7e6f****
volumeClaimTemplatesで指定したストレージクラスを、CSIが管理するストレージクラスに変更する必要があります。 フィールドの値を直接変更できます。
上記の変更は、変換中に-tおよび-cパラメーターを指定することによっても実装でき、すべてのリソースに有効になります。
flexvolume2csi inline-translate -f disk-static-sts.yaml -t <csi-storageclass> -c "20Gi"