在Kubernetes集群中,可以根据节点的拓扑标签以及存储后端支持的拓扑能力调度和发放资源。
前提条件
需要在集群中的worker节点完成拓扑的标签配置,标签配置方法如下:
使用远程访问工具(以PuTTY为例),通过管理IP地址,登录Kubernetes集群的任意master节点。
执行以下命令,查看当前集群中的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
执行以下命令,给worker节点配置拓扑标签。其中 nodename 为worker节点名称, key 和 value 参数说明请参考表 参数说明。
kubectl label node <nodename> <key>=<value>
表 1 参数说明
- 拓扑标签必须以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需要满足全部筛选条件。
执行命令, 查看当前集群中所有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"}]