全部產品
Search
文件中心

Container Service for Kubernetes:使用Flexvolume2CSI命令列工具批量轉換YAML

更新時間:Jun 19, 2024

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命令列工具

  1. 執行以下命令,安裝Flexvolume2CSI。

    支援macOS和Linux系統安裝。

    curl https://ack-csiplugin.oss-cn-hangzhou.aliyuncs.com/flexvolume2csi/get-translator.sh | bash
  2. 執行以下命令,驗證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配置叢集資訊

  1. 執行以下命令,配置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檔案地址,預設為當前路徑下的outputfile.txt。傳空值時列印至標準輸出。

-b

備份原Flexvolume的PV和PVC的YAML檔案地址,預設為當前路徑下的backupfile.txt。傳空值時不備份。

-n

指定命名空間名稱,僅處理該命名空間下的PV和PVC,預設為所有命名空間。

-c

指定PVC名稱,僅處理該PVC及其對應的PV,需要配合-n參數使用。預設為選中命名空間的所有PV和PVC。

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

操作樣本

  1. 使用以下內容,在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"
  2. 執行以下命令,在Flexvolume叢集中部署樣本PV。

    kubectl apply -f pv.yaml
  3. 使用以下內容,在Flexvolume叢集中建立pvc.yaml檔案。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-nas
    spec:
      accessModes:
        - ReadWriteMany
      storageClassName: nas
      resources:
        requests:
          storage: 5Gi
  4. 執行以下命令,在Flexvolume叢集中部署樣本PVC。

    kubectl apply -f pvc.yaml
  5. 執行以下命令,確認PV和PVC處於Bound狀態。

    kubectl get pvc | grep pvc-nas

    預期輸出:

    pvc-nas   Bound    pv-nas   5Gi       RWO            nas       10s
  6. 執行以下命令,使用Flexvolume2CSI命令列工具,轉換叢集內的所有PV和PVC的YAML檔案。

    flexvolume2csi translate 
  7. 執行以下命令,查看輸出的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檔案。

相關文檔