配置存储拓扑感知

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