FlexVolume2CSI コマンドラインインターフェイス (CLI) を使用すると、FlexVolume クラスターでインラインストレージを使用するボリュームとワークロードの YAML ファイルをバッチ変換できます。このプロセスにより、FlexVolume クラスターから Container Storage Interface (CSI) クラスターへの移行が簡素化されます。このトピックでは、FlexVolume2CSI CLI を使用してこのバッチ変換を実行する方法について説明します。
仕組み
FlexVolume2CSI ツールは、クラスターまたは指定された名前空間内のすべてまたは指定されたボリュームまたはワークロードのリソースをリストします。標準の FlexVolume フィールドの内容を対応する CSI フォーマットに変換し、結果の YAML をデプロイ用のファイルに出力します。
この変換は、NAS、OSS、または Alibaba Cloud ディスクを使用する標準の PersistentVolume (PV)、PersistentVolumeClaim (PVC)、またはワークロードのインラインボリュームのみをサポートします。CSI リソースをデプロイする前に、生成された YAML ファイルを検証する必要があります。
ステップ 1: 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。
Kubeconfig パス
FlexVolume クラスターの kubeconfig ファイルのパス。デフォルトのパスは ~/.kube/config です。
ステップ 3: FlexVolume PV および PVC 用の CSI YAML ファイルを生成する
オプションパラメーター
次のコマンドを実行して、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:
# すべての名前空間で PVC と関連する PV を変換する
flexvolume2csi translate -o output.txt
# default 名前空間で PVC と関連する PV を変換する
flexvolume2csi translate -n default -o output.txt
# default 名前空間で PVC test-pvc と関連する PV を変換する
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 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 CLI を使用してクラスター内のすべての PV と PVC の YAML ファイルを変換します。
重要FlexVolume PVC および PV リソースは、
kubectl applyなどのコマンドを実行して CSI タイプに変換することはできません。それらを再デプロイする必要があります。詳細については、「FlexVolume から CSI への移行」のシナリオドキュメントをご参照ください。csi-compatible-controller コンポーネントを使用して FlexVolume と CSI PVC および PV リソースを一時的に共存させるには、
-pまたは-sパラメーターを使用してリソース名の競合を回避します。flexvolume2csi translate -s csi次のコマンドを実行して、PV と PVC の出力 CSI YAML ファイルを表示します。
cat ./outputfile.yaml期待される出力:
--- apiVersion: v1 kind: PersistentVolume metadata: labels: alicloud-pvname: pv-nas-csi name: pv-nas-csi 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-csi mountOptions: - nolock,tcp,noresvport - vers=3 persistentVolumeReclaimPolicy: Retain storageClassName: nas volumeMode: Filesystem --- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-nas-csi namespace: default spec: accessModes: - ReadWriteMany resources: requests: storage: 5Gi selector: matchLabels: alicloud-pvname: pv-nas-csi storageClassName: nas volumeMode: Filesystem volumeName: pv-nas-csiこの出力は、PV と PVC の CSI YAML ファイルが正常に生成されたことを示します。
(オプション) ステップ 4: インライン FlexVolume ボリュームを持つワークロード用の CSI YAML ファイルを生成する
以前のバージョンの ACK マネージドクラスター および Serverless Kubernetes クラスター は、インラインモードを使用してワークロードに 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 に変換できます。
コントローラーを使用して CSI PVC および PV リソースを再作成する場合は、対応する FlexVolume PVC および PV リソースを削除できます。リソースを削除する前に、データが不要になったことを確認してください。次に、volumeClaimTemplates の storageClassName フィールドの値を CSI StorageClass に変更します。
変換ターゲット
インラインモードでマウントされた FlexVolume ボリュームを変換する場合:
volumeId が指定されていないディスクボリュームは、インラインの エフェメラルボリューム に変換されます。
他のタイプのボリュームは、独立した PV および PVC として 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:
# すべての名前空間のすべての種類のワークロード (StatefulSet、Deployment など) のインライン FlexVolume ボリュームを変換する
# 注1: ワークロードの種類が指定されていない場合、Pod は変換されません。必要に応じて "-k pod" を使用してください。
# 注2: StatefulSet の VolumeClaimTemplates は変換されません。手動で \"storageClassName\" フィールドを変更してください。
flexvolume2csi inline-translate -o output.txt
# default 名前空間のすべての種類のワークロード (StatefulSet、Deployment など) のインライン FlexVolume ボリュームを変換する
flexvolume2csi inline-translate -n default -o output.txt
# default 名前空間の StatefulSet のインライン FlexVolume ボリュームを変換する
flexvolume2csi inline-translate -n default -k sts -o output.txt
# default 名前空間の StatefulSet test-sts のインライン FlexVolume ボリュームを変換する
flexvolume2csi inline-translate -n default -k sts -i test-sts -o output.txt
# "---\n" で項目を区切って、入力ファイル内のすべての項目のインライン FlexVolume ボリュームを変換する
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 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 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 コンテンツを調整します。エフェメラルボリュームに変換する場合、通常は次のように変更する必要があります。
ephemeral でエフェメラル StorageClass を指定します。調整後:
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 StorageClass に変換する場合、通常は次のように変更する必要があります。
CSI PVC および PV に必要なストレージ容量を宣言します。20 GiB が必要であると仮定します。調整後:
--- 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 で指定された StorageClass は CSI クラスに変更する必要があります。フィールドの値を直接変更できます。
変換中に -t および -c パラメーターを指定してこれらの変更を行うこともできます。これらのパラメーターはすべてのリソースに有効です。
flexvolume2csi inline-translate -f disk-static-sts.yaml -t <csi-storageclass> -c "20Gi"
ステップ 5: 生成された CSI YAML を確認してデプロイする
FlexVolume2CSI は YAML ファイルを生成するだけです。YAML の内容が正しいことを確認した後、手動でクラスターにデプロイする必要があります。詳細については、「FlexVolume から CSI への移行」のシナリオドキュメントをご参照ください。
PVC と PV のリソース名の競合を避けるために、デプロイには kubectl create -f コマンドを使用します。