这是本节的多页打印视图。 点击此处打印.

返回本页常规视图.

配置存储拓扑感知

在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"}]
    

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参数说明