1 - 开启PVC变更特性

当前华为CSI安装时默认关闭PVC变更特性,如需要使用该特性,请按照以下步骤开启。

1.1 - 使用Helm开启PVC变更特性

前提条件

  • 已使用Helm安装华为CSI。
  • 要求华为CSI v4.5.0及以上版本。

操作步骤

  1. 使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。

  2. 执行以下命令检查PVC变更特性是否开启。

    其中helm-huawei-csi为安装时指定的Helm Chart名称,huawei-csi为安装时指定的Helm Chart命名空间。组件包路径请参考表 软件包组件描述

    helm get values helm-huawei-csi -n huawei-csi -a | grep volumeModify -A 1
    

    命令结果示例如下:

    • 若回显内容为“enabled: true”,则表示特性开启,可跳过后续步骤。
    • 若回显内容为“enabled: false”,请按照后续步骤开启PVC变更特性。
    volumeModify:
      enabled: false
    
  3. 进入/helm/esdk目录,执行命令,配置卷变更CRD。

    # kubectl apply -f ./crds/volume-modify/
    customresourcedefinition.apiextensions.k8s.io/volumemodifyclaims.xuanwu.huawei.io configured
    customresourcedefinition.apiextensions.k8s.io/volumemodifycontents.xuanwu.huawei.io configured
    

    如回显中存在“Warning: resource customresourcedefinitions/volumemodifycontents.xuanwu.huawei.io is missing the kubectl.kubernetes.io/last-applied-configuration…”提示,可忽略该提示。该提示出现原因是由于Helm安装应用时使用的是kubectl create命令而不是kubectl apply命令。

  4. 执行以下命令,获取原有服务配置文件。

    helm get values helm-huawei-csi -n huawei-csi -a > ./update-values.yaml
    
  5. 执行vi update-values.yaml命令打开4中获取的文件,修改以下配置。修改完成后,按Esc,并输入**:wq!**,保存修改。

    csiExtender:
      volumeModify:    
        enabled: true
    
  6. 执行以下命令更新华为CSI服务。

    helm upgrade helm-huawei-csi ./ -n huawei-csi  -f ./update-values.yaml
    
  7. 执行命令检查服务是否启动。

    kubectl get pod -n huawei-csi
    

    命令结果示例如下,其中huawei-csi为华为CSI部署命名空间。

    NAME                                     READY     STATUS    RESTARTS   AGE
    huawei-csi-controller-6dfcc4b79f-9vjtq   10/10     Running   0          24m
    huawei-csi-node-tqs87                    3/3       Running   0          20m
    

1.2 - 手动方式开启PVC变更特性

前提条件

已使用手动方式安装华为CSI。

操作步骤

  1. 使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。

  2. 进入manual/esdk工作目录下,执行以下命令,配置卷变更CRD。

    kubectl apply -f ./crds/volume-modify/
    
  3. 执行以下命令。组件包路径请参考表 软件包组件描述

    kubectl apply -f ./deploy/huawei-csi-controller-extender.yaml
    
  4. 执行命令检查服务是否启动。

    kubectl get pod -n huawei-csi
    

    命令结果示例如下,其中huawei-csi为华为CSI部署命名空间。

    NAME                                     READY     STATUS    RESTARTS   AGE
    huawei-csi-controller-6dfcc4b79f-9vjtq   10/10     Running   0          24m
    huawei-csi-node-tqs87                    3/3       Running   0          24m
    

2 - 配置PVC变更

PVC变更特性使用CRD实现,当前资源说明如下。

表 1 资源说明

NAME

APIVERSION

NAMESPACED

KIND

volumemodifyclaims

xuanwu.huawei.io/v1

false

VolumeModifyClaim

volumemodifycontents

xuanwu.huawei.io/v1

false

VolumeModifyContent

  • VolumeModifyClaim资源支持创建/删除/查询,不支持更新。
  • VolumeModifyContent资源仅支持查询,用于展示单个PVC变更详情,请勿手动创建/删除/修改。
  • VolumeModifyContent资源被VolumeModifyClaim管理,请勿手动管理VolumeModifyContent资源。

2.1 - 创建PVC变更

前提条件

待变更PVC关联的存储后端已经组成双活存储后端,若未组成双活存储后端,请参考手动更新存储后端章节配置。

2.1.1 - 准备PVC变更文件

PVC变更文件说明

PVC变更文件样例模板为/examples/volumemodifyclaim.yaml,具体配置项如下表所示:

表 1 参数说明

参数

描述

必选参数

默认值

备注

apiVersion

API组,string类型

xuanwu.huawei.io/v1

固定填写xuanwu.huawei.io/v1

kind

资源的类型,string类型

VolumeModifyClaim

固定填写VolumeModifyClaim

metadata.name

集群资源对象的名称,string类型

-

名称必须满足DNS 子域名的命名规则,支持数字、小写字母、中划线(-)和点(.)的组合,并且必须以小写字母数字字符开头和结尾,最大长度不超过63个字符

spec.source.kind

数据源类型,string类型

StorageClass

仅支持设置为:StorageClass

spec.source.name

数据源名称,string类型

-

仅支持设置StorageClass名称

spec.parameters.hyperMetro

是否将普通卷变更为双活卷。当前取值仅支持"true"。

-

仅支持主站点普通存储卷变更为双活存储卷。

spec.parameters.metroPairSyncSpeed

双活Pair同步速率。支持配置为1~4。

可选值:

  • 1:低
  • 2:中
  • 3:高
  • 4:最高

-

当且仅当spec.parameters.hyperMetro为"true"时生效。

注意:

  • 未配置该参数时,双活Pair存储速率由存储决定。
  • 最高速率同步时可能导致主机时延增大。

  • spec.source.kind和spec.source.name用于指定卷变更范围,例如配置为StorageClass和对应名称时,将会变更使用目标StorageClass发放的所有的处于Bound状态的PVC。
  • 当所有关联的PVC完成变更后,华为CSI会替换原有的StorageClass,并增加VolumeModifyClaim的spec.parameters参数,使得PVC满足StorageClass定义。

典型场景配置请参考如下示例:

变更普通卷为双活卷

配置变更普通卷为双活卷示例如下:

apiVersion: xuanwu.huawei.io/v1
kind: VolumeModifyClaim
metadata:
  name: myvmc
spec:
  source:
    kind: StorageClass
    name: mysc
  parameters:
    hyperMetro: "true"

2.1.2 - 创建PVC变更资源

本章节介绍如何基于已配置的PVC变更文件创建PVC变更资源。

  • 仅支持双活AA模式。
  • 如果变更场景为普通卷变更为双活卷,则仅支持变更主站点端存储卷。
  • 创建PVC变更资源期间,请勿使用华为CSI管理PVC。
  • 不支持对同一个PVC创建多个VolumeModifyClaim资源,若存在对目标PVC的多次变更,请在单次变更完成之后再执行。

操作步骤

  1. 使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。

  2. 执行以下命令,创建PVC变更。

    kubectl create -f volumemodifyclaim.yaml 
    
  3. 参考查询PVC变更查询创建结果。

2.2 - 查询PVC变更

本章节介绍如何使用Kubectl查询PVC变更状态,当前华为CSI通过CRD提供以下API。

查询VolumeModifyClaim

使用kubectl查询VolumeModifyClaim步骤如下。

  1. 使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。

  2. 执行以下命令,查询PVC变更。其中 vmc-name 为VolumeModifyClaim资源名称。

    kubectl get volumemodifyclaims <vmc-name> -owide
    

    命令结果示例如下:

    NAME    STATUS      READY   SOURCEKIND     SOURCENAME   STARTEDAT              COMPLETEDAT            AGE
    myvmc   Completed   1/1     StorageClass   mysc         2024-06-06T03:19:13Z   2024-06-06T03:19:16Z   2m2s
    

    表 1 回显说明

    名称

    说明

    NAME

    VolumeModifyClaim资源名称。

    STATUS

    VolumeModifyClaim资源状态,可取值如下:

    • Pending:初始状态。
    • Creating:VolumeModifyClaim完成基本校验,且服务端已经接收变更任务,但是该任务还未执行完成。
    • Completed:所有关联的PVC均完成变更。
    • Rollback:关联的PVC部分完成变更时,用户执行了删除PVC变更操作。
    • Deleting:关联的PVC全部完成变更时,用户执行了删除PVC变更操作。

    READY

    完成变更PVC数量/全部待变更PVC数量。

    SOURCEKIND

    数据源类型,例如StorageClass。

    SOURCENAME

    数据源名称,例如StorageClass名称。

    STARTEDAT

    变更开始时间,指服务端接收该任务并开始处理的时间戳。

    COMPLETEDAT

    变更完成时间,指所有关联的PVC均完成变更后的时时间戳,仅STATUS为Completed时,存在该值。

    AGE

    VolumeModifyClaim从创建至当前的存活时间。

VolumeModifyClaim支持使用kubectl查看Events信息,当VolumeModifyClaim无法满足创建要求,或者创建过程中出现错误时,服务端将记录Events信息。参考命令如下:

kubectl describe volumemodifyclaims local-to-hypermetro 

查询VolumeModifyContent

VolumeModifyContent由VolumeModifyClaim资源创建,记录了单个PVC的变更详情,使用kubectl查询VolumeModifyContent步骤如下。

  1. 使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。

  2. 执行命令,查询PVC变更。其中myvmc-uid为VolumeModifyContent资源名称。

    kubectl get volumemodifycontents myvmc-uid  -owide
    

    命令结果示例如下:

    NAME         STATUS      MODIFYCLAIMNAME     SOURCEVOLUME   STARTEDAT              COMPLETEDAT            AGE
    myvmc-uid    Completed   myvmc               default/mypvc  2024-06-06T03:19:07Z   2024-06-06T03:19:09Z   36m
    

    表 2 回显说明

    名称

    说明

    NAME

    VolumeModifyContent资源名称,格式为:VolumeModifyClaim名称-关联PVC的UID。

    STATUS

    VolumeModifyContent资源状态,可取值如下:

    • Pending:初始状态。
    • Creating:VolumeModifyContent完成基本校验,且服务端已经接收变更任务,但是该任务还未执行完成。
    • Completed:关联的PVC完成变更。
    • Rollback:正在回滚PVC变更。

    MODIFYCLAIMNAME

    关联的VolumeModifyClaim名称。

    SOURCEVOLUME

    关联的PVC信息,格式为:命名空间名称/PVC名称。

    STARTEDAT

    PVC变更开始时间,指服务端接收该任务并开始处理的时间戳。

    COMPLETEDAT

    PVC变更完成时间,指所有关联的PVC均完成变更后的时时间戳,仅STATUS为Completed时,存在该值。

    AGE

    即VolumeModifyContent从创建至当前的存活时间。

VolumeModifyContent支持使用kubectl查看Events信息,当VolumeModifyContent无法满足创建要求,或者变更PVC出现错误时,服务端将记录Events信息。参考命令如下:

kubectl describe volumemodifycontents myvmc-uid

2.3 - 删除PVC变更

  • 当VolumeModifyClaim的STATUS值为Creating时,删除VolumeModifyClaim资源,将会在存储侧删除此次变更创建的资源,然后移除集群资源。在删除后,如果继续使用原有的StorageClass进行PVC管理,需要将关联的存储后端恢复为非双活存储后端。
  • 当VolumeModifyClaim的STATUS值为Pending或Completed时,删除VolumeModifyClaim资源,仅会移除集群资源,不会和存储交互,即不会在存储侧删除变更创建的资源。
  • VolumeModifyContent被VolumeModifyClaim管理,请勿手动管理VolumeModifyContent资源。
  • 若待变更PVC中已有部分PVC满足变更要求,当批量变更失败时,会移除掉所有PVC的变更,导致已满足变更条件的PVC不再满足。
  • 若待变更PVC已经在存储侧被手动管理,则可能导致变更失败。使用变更特性时,请勿手动管理存储卷。

当前章节介绍如何使用kubectl删除PVC变更,基于步骤如下。

操作步骤

  1. 使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。

  2. 执行以下命令,删除PVC变更。其中 vmc-name 为VolumeModifyClaim资源名称。

    kubectl delete volumemodifyclaims <vmc-name>
    
  3. 参考创建PVC变更资源查询删除结果。