1 - 配置ALUA特性

ALUA(Asymmetric Logical Unit Access,非对称逻辑单元访问),是一种多目标器端口访问模型。在多路径状态下,ALUA标准提供了一种将卷的Active/Passive模型呈现给主机的方式。同时还提供了端口的可访问状态切换接口,可用来实现卷工作控制器切换等。例如,卷在一个控制器故障时,可以将该控制器的端口置为Unavailable,支持ALUA的主机多路径软件收到该状态后,会将I/O切换到另一端控制器。

1.1 - 通过Helm配置ALUA特性

1.1.1 - 配置华为企业存储后端的ALUA参数

华为企业存储针对ALUA的配置请参考产品对应的主机连通性指南文档说明。

针对不同的操作系统,ALUA配置可能有所不同。进入华为技术支持,在搜索输入框中输入“主机连通性指南”,单击搜索。在搜索结果中,选择对应操作系统的主机连通性指南。结合实际需要根据指南的说明进行ALUA配置。华为CSI将在华为存储上对该主机的启动器应用您设置的配置项。

已经发放的Pod的节点不会主动更改ALUA信息,需要通过在该节点重新发放Pod才会变更主机ALUA配置。

OceanStor V5系列和OceanStor Dorado V3系列存储后端的ALUA参数

华为CSI支持的OceanStor V5系列和OceanStor Dorado V3系列存储的ALUA参数见表 华为CSI支持的OceanStor V5系列和OceanStor Dorado V3系列存储的ALUA参数说明

表 1 华为CSI支持的OceanStor V5系列和OceanStor Dorado V3系列存储的ALUA参数说明

参数名

参数描述

备注

HostName

主机名规则。必填,可使用正则表达式。

主机名通常使用 cat /etc/hostname 可获取。支持正则表达式方式匹配,如当HostName=“*”时,该条配置对任意主机名的主机生效。可参考《正则表达式》

当计算节点的主机名可已匹配多条ALUA配置选项,会根据匹配的精确度进行排序,使用第一条ALUA配置选项。排序规则见ALUA配置项匹配主机名的规则

MULTIPATHTYPE

多路径类型。必填,取值为:

  • 0:不使用第三方多路径
  • 1:使用第三方多路径

--

FAILOVERMODE

启动器的切换模式。条件必选,取值为:

  • 0:旧版本ALUA
  • 1:通用ALUA
  • 2:不使用ALUA
  • 3:特殊模式ALUA

当使用第三方多路径时该参数才需要指定。请参考连通性指南的说明,配置启动器的切换模式。

SPECIALMODETYPE

启动器的特殊模式类型。条件必选,取值为:

  • 0:特殊模式0
  • 1:特殊模式1
  • 2:特殊模式2
  • 3:特殊模式3

当启动器的切换模式为“特殊模式ALUA”时该参数才需要指定。请参考连通性指南的说明,配置启动器的特殊模式类型。

PATHTYPE

启动器的路径类型。条件必选,取值为:

  • 0:优选路径
  • 1:非优选路径

当使用第三方多路径时该参数才需要指定。请参考连通性指南的说明,配置启动器的路径类型。

以OceanStor 18500 V5存储对接Red Hat操作系统为例,主机连通性指南见《华为SAN存储在Red Hat系统下的主机连通性指南》

如下ALUA设置示例,是非双活存储场景下,OceanStor 18500 V5存储的Red Hat操作系统的连通性指南的推荐设置。本例中假设Kubernetes集群中计算节点“myhost01”的操作系统是RHEL 5.x,其他计算节点操作系统均为RHEL 7.x。根据推荐,RHEL 5.x的切换模式应该为“不使用ALUA”,RHEL 7.x的切换模式应该为“通用ALUA”。

storage: oceanstor-san
name: oceanstor-iscsi-155
urls:
  - https://192.168.129.155:8088
  - https://192.168.129.156:8088
pools:
  - StoragePool001
parameters:
  protocol: iscsi
  portals:
    - 192.168.128.120
    - 192.168.128.121
  ALUA:
    ^myhost01$:
      MULTIPATHTYPE: 1
      FAILOVERMODE: 2
      PATHTYPE: 0
    "*":
      MULTIPATHTYPE: 1
      FAILOVERMODE: 1
      PATHTYPE: 0

OceanStor和OceanStor Dorado系列存储后端的ALUA参数

华为CSI支持的OceanStor和OceanStor Dorado系列存储的ALUA参数见表 OceanStor和OceanStor Dorado系列存储的ALUA参数说明

OceanStor和OceanStor Dorado系列存储在默认情况下启动器主机访问模式即为“均衡模式”,因此不建议对OceanStor和OceanStor Dorado系列存储配置ALUA参数。

表 2 OceanStor和OceanStor Dorado系列存储的ALUA参数说明

参数名

参数描述

备注

HostName

主机名规则。必填,可使用正则表达式。

主机名通常使用 cat /etc/hostname 可获取。支持正则表达式方式匹配,如当HostName=“*”时,该条配置对任意主机名的主机生效。可参考《正则表达式》

当计算节点的主机名可已匹配多条ALUA配置选项,会根据匹配的精确度进行排序,使用第一条ALUA配置选项。排序规则见ALUA配置项匹配主机名的规则

accessMode

主机访问模式。必填,取值为:

  • 0:均衡模式
  • 1:非对称模式

非双活场景下建议使用均衡模式。当前华为CSI未支持SAN双活场景,请谨慎使用非对称模式。

hyperMetroPathOptimized

双活场景下,主机在当前阵列的路径是否优选。取值为:

  • 1:是
  • 0:否

当主机访问模式设置为非对称模式时,才需要配置该参数。

当前华为CSI未支持SAN双活场景,请谨慎使用非对称模式。

以OceanStor Dorado 18500存储对接Red Hat操作系统为例,主机连通性指南见《OceanStor Dorado & OceanStor在Red Hat下的主机连通性指南》

如下ALUA设置示例,是非双活存储场景下,OceanStor Dorado 18500存储的Red Hat操作系统的连通性指南的推荐设置。

storage: "oceanstor-san"
name: "dorado-iscsi-155"
urls:
  - "https://192.168.129.155:8088"
  - "https://192.168.129.156:8088"
pools:
  - "StoragePool001"
parameters:
  protocol: "iscsi"
  portals:
    - "192.168.128.120"
    - "192.168.128.121"
  ALUA:
    "*":
      accessMode: 0

ALUA配置项匹配主机名的规则

  • 如果设置的主机名规则精确匹配的业务节点主机名,则使用该主机名规则对应的ALUA配置项。

    如配置项1中主机名规则为“*”,配置项2中的主机名规则为“^myhost01$”。当计算节点的主机名是“myhost01”时,精确匹配配置项2,华为CSI将使用配置项2中的配置应用到存储侧。

  • 如果设置的主机名规则无法精确匹配的业务节点主机名,则直接使用正则匹配到的第一条ALUA配置项。

    如配置项1中主机名规则为“myhost0[0-9]”,配置项2中的主机名规则为“myhost0[5-9]”,配置项1的优先级高于配置项2。当计算节点的主机名是“myhost06”时,两个配置项均可以匹配,此时华为CSI将使用配置项1中的配置应用到存储侧。

1.1.2 - 配置分布式存储后端的ALUA参数

华为分布式存储针对ALUA的配置请参考产品对应的主机连通性指南文档说明。

针对不同的操作系统,ALUA配置可能有所不同。进入华为技术支持,在搜索输入框中输入“主机连通性指南”,单击搜索。在搜索结果中,选择对应操作系统的主机连通性指南。结合实际需要根据指南的说明进行ALUA配置。华为CSI将在华为存储上对该主机的启动器应用您设置的配置项。

已经发放的Pod的节点不会主动更改ALUA信息,需要通过在该节点重新发放Pod才会变更主机ALUA配置。 分布式存储非双活场景,存储系统自身为Active/Active模式,选择“启用ALUA”没有实际意义,建议选择存储默认的“禁用ALUA”。因此不建议对分布式存储配置ALUA参数。

华为CSI支持的分布式存储的ALUA参数见表 分布式存储ALUA参数说明

表 1 分布式存储ALUA参数说明

参数名

参数描述

备注

HostName

HostName的值为worker节点的主机名,如HostName1、HostName2。

主机名通常使用 cat /etc/hostname 可获取。支持正则表达式方式匹配,如当HostName=“*”时,该条配置对任意主机名的主机生效。可参考《正则表达式》

当计算节点的主机名可已匹配多条ALUA配置选项,会根据匹配的精确度进行排序,使用第一条ALUA配置选项。排序规则见ALUA配置项匹配主机名的规则

switchoverMode

切换模式。必选,取值为:

  • Disable_alua:禁用ALUA
  • Enable_alua:启用ALUA

非双活场景,存储系统自身为Active/Active模式,选择“启用ALUA”没有实际意义,建议选择“禁用ALUA”。当前华为CSI未支持SAN双活场景,请谨慎启用ALUA。

pathType

路径类型。条件必选,取值为:

  • optimal_path:优选路径
  • non_optimal_path:非优选路径

切换模式为启动ALUA时需要设置该选项。

ALUA配置项匹配主机名的规则

  • 如果设置的主机名规则精确匹配的业务节点主机名,则使用该主机名规则对应的ALUA配置项。

    如配置项1中主机名规则为“*”,配置项2中的主机名规则为“^myhost01$”。当计算节点的主机名是“myhost01”时,精确匹配配置项2,华为CSI将使用配置项2中的配置应用到存储侧。

  • 如果设置的主机名规则无法精确匹配的业务节点主机名,则直接使用正则匹配到的第一条ALUA配置项。

    如配置项1中主机名规则为“myhost0[0-9]”,配置项2中的主机名规则为“myhost0[5-9]”,配置项1的优先级高于配置项2。当计算节点的主机名是“myhost06”时,两个配置项均可以匹配,此时华为CSI将使用配置项1中的配置应用到存储侧。

2 - 配置存储拓扑感知

在Kubernetes集群中,可以根据节点的拓扑标签以及存储后端支持的拓扑能力调度和发放资源。

前提条件

需要在集群中的worker节点完成拓扑的标签配置,标签配置方法如下:

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

  2. 执行以下命令,查看当前集群中的worker节点信息。

    kubectl get node
    

    命令结果示例如下:

    NAME     STATUS   ROLES                      AGE   VERSION
    node01   Ready    controlplane,etcd,worker   42d   v1.22.3
    node02   Ready    worker                     42d   v1.22.3
    node03   Ready    worker                     42d   v1.22.3
    
  3. 执行以下命令,给worker节点配置拓扑标签。其中 nodename 为worker节点名称, keyvalue 参数说明请参考表 参数说明

    kubectl label node <nodename> <key>=<value>
    

    表 1 参数说明

    参数名

    参数描述

    备注

    <key>

    拓扑标签的唯一标识。

    可支持配置:zone,region,protocol.<protocol>

    其中<protocol>可支持配置iscsi, nfs, fc, roce。

    <value>

    拓扑标签的参数值。

    “key”如果是“zone”“region”“value”值为自定义参数。

    “key”如果是protocol.<protocol>“value”值固定为“csi.huawei.com”

    • 拓扑标签必须以topology.kubernetes.io开头。拓扑标签示例:
    • 示例1:topology.kubernetes.io/region=China-west
    • 示例2:topology.kubernetes.io/zone=ChengDu
    • 示例3:topology.kubernetes.io/protocol.iscsi=csi.huawei.com
    • 示例4:topology.kubernetes.io/protocol.fc=csi.huawei.com
    • 同一节点上拓扑标签中同一个key只能支持一个value值。
    • 如果同一节点上拓扑标签中同时配置多个protocol,配置StorageClass时,StorageClass只需要满足其中一个protocol即可。
    • 如果同一节点上拓扑标签中同时配置region和zone,配置StorageClass时,StorageClass需要满足全部筛选条件。
  4. 执行命令, 查看当前集群中所有worker节点的标签信息。

    kubectl get nodes -o=jsonpath='{range .items[*]}[{.metadata.name}, {.metadata.labels}]{"\n"}{end}' | grep --color "topology.kubernetes.io"
    

    命令结果示例如下:

    [node01,"beta.kubernetes.io/arch":"amd64","beta.kubernetes.io/os":"linux","kubernetes.io/arch":"amd64","kubernetes.io/hostname":"node01","kubernetes.io/os":"linux","node-role.kubernetes.io/controlplane":"true","node-role.kubernetes.io/etcd":"true","node-role.kubernetes.io/worker":"true","topology.kubernetes.io/zone":"ChengDu"}]
    

2.1 - 通过Helm配置存储拓扑感知

操作步骤

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

  2. 进入Helm工程的目录下,如果无法找到之前的Helm工程,则将组件包中的helm目录拷贝到master节点的任意目录下,组件包路径请参考表 软件包组件描述

  3. 进入后端服务配置目录/examples/backend/下,备份backend.yaml文件

    cp backend.yaml backend.yaml.bak
    
  4. 执行vi backend.yaml命令打开文件,按需求配置拓扑感知,示例如下所示。修改完成后,按Esc,并输入 :wq!,保存修改。

    storage: "oceanstor-san"
    name: "dorado-iscsi-155"
    namespace: "huawei-csi"
    urls:
      - "https://192.168.129.155:8088"
    pools:
      - "StoragePool001"
    parameters:
      protocol: "iscsi"
      portals:
        - "10.10.30.20"
        - "10.10.30.21"
    supportedTopologies:
      - { "topology.kubernetes.io/region": "China-west", "topology.kubernetes.io/zone": "ChengDu" }
      - { "topology.kubernetes.io/region": "China-south","topology.kubernetes.io/zone": "ShenZhen" }
    maxClientThreads: "30"
    
  5. 执行以下命令删除待修改存储后端,其中“dorado-iscsi-155”为存储后端名称。

    oceanctl delete backend dorado-iscsi-155 -n huawei-csi
    
  6. 执行以下命令创建存储后端。

    oceanctl create backend -f ../examples/backend/backend.yaml -i yaml
    

    根据命令提示输入存储用户名和密码。

    Please enter this backend user name:admin
    Please enter this backend password:
    
  7. 执行vi StorageClass.yaml命令,修改yaml文件。按IInsert进入编辑状态,在yaml文件下增加相关参数,详细参数说明请参见表 参数说明。修改完成后,按Esc,并输入 :wq! ,保存修改。

    在StorageClass.yaml文件中添加以下配置项。拓扑

    • 示例1: 在StorageClass中配置zone和region信息

      kind: StorageClass
      apiVersion: storage.k8s.io/v1
      metadata:
        name: example-storageclass
      provisioner: csi.huawei.com
      parameters:
        volumeType: lun
        allocType: thin
      volumeBindingMode: WaitForFirstConsumer
      allowedTopologies:
      - matchLabelExpressions:
        - key: topology.kubernetes.io/zone
          values:
          - ChengDu
        - key: topology.kubernetes.io/region
          values:
          - China-west
      
    • 示例2: 在StorageClass中配置协议信息

      kind: StorageClass
      apiVersion: storage.k8s.io/v1
      metadata:
        name: protocol-example-storageclass
      provisioner: csi.huawei.com
      parameters:
        volumeType: lun
        allocType: thin
      volumeBindingMode: WaitForFirstConsumer
      allowedTopologies:
      - matchLabelExpressions:
        - key: topology.kubernetes.io/protocol.iscsi
          values:
          - csi.huawei.com
      

    表 1 参数说明

    参数名

    参数描述

    备注

    volumeBindingMode

    PersistentVolume绑定方式,用于控制何时进行PersistentVolume动态资源调配和绑定。

    可配置“WaitForFirstConsumer”“Immediate”

    “WaitForFirstConsumer”:表示延迟PersistentVolume的绑定和调配,直到创建使用PVC的Pod。

    “Immediate”:表示创建PVC后,立即发生PersistentVolume绑定和调配。

    allowedTopologies.matchLabelExpressions

    拓扑信息标签,用于过滤CSI后端和Kubernetes节点。如果匹配失败,会导致PVC或Pod无法创建。

    配置时需要同时按照固定格式配置“key”“value”.

    “key”:可支持配置“topology.kubernetes.io/zone”“topology.kubernetes.io/region”

    topology.kubernetes.io/protocol.<protocol>, 其中<protocol>为协议类型, 例如:iscsi, fc, nfs等。

    “value”

    “key”如果是“topology.kubernetes.io/zone”“topology.kubernetes.io/region”“value”值需要和前提条件中设置的拓扑标签保持一致。

    “key”如果是topology.kubernetes.io/protocol.<protocol>“value”值固定为“csi.huawei.com”

  8. 执行以下命令,基于该yaml文件创建StorageClass。

    kubectl create -f StorgeClass.yaml
    
  9. 使用该StorageClass创建具有拓扑能力的PVC,详细操作请参考动态卷供应PVC参数说明

3 - PVC变更

本章节介绍如何使用华为CSI完成PVC变更。

3.1 - 开启PVC变更特性

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

3.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
    

3.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
    

3.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资源。

3.2.1 - 创建PVC变更

前提条件

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

3.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"

3.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变更查询创建结果。

3.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

3.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变更资源查询删除结果。