如何在kubernetes环境下使用label进行副本调度

【附件】:

2 个赞

我研究的也不深,但我理解文中说的是kubectl edit tc ${cluster_name} -n ${namespace}
执行之后,配置文件中的这个地方:
image
然后修改k8s节点的label,没太看明白你找的这几个地方,希望能帮到你。

你想要的是不是这

https://docs.pingcap.com/zh/tidb/stable/schedule-replicas-by-topology-labels/

operator里 可以配置config

k8s上节点亲和性和标签不都应该在k8s层面上看么?楼主切进容器里面查,能查到么?能给我解解惑么?

他是要给tikv 打标签 然后 说的应该是region副本的调度

我理解错了,不好意思,:grinning:

这个我理解是直接修改 TidbCluster CR 中的 spec.pd.config 和 spec.tikv.config ? 这样子是生效的么。

刚开始接触 operator,了解不多:joy:

好的 这块我比较了解,可以解决你这个问题,知乎现在就是使用这个功能进行副本调度的。首先我想知道您是什么依据判断没有打上 label 的。我这边推荐的查看方式是使用 pd-ctl 里面的 store 命令来确认所有 store 的 label。可以提供一下上面方式返回的结果么

@ssnijik 请问你的问题被解决了么

实际上 operator 会根据 pd config 里面的 location-labels & tikv.Storelabels 来通过 tikv api 来给 tikv 配置 label, 不是通过配置文件的方式去进行配置的, 所以配置文件里面可能看不到你想看到的差异,通过 pd api 里面的 store 列表的方式可以看到这种方式设置进去的 label, operator会不断的判断 tikv 是否和 node 上面的 label 一致,如果不一致就会更新 :thinking:

收到,配置看着没啥问题,store 也确实没打上 label,能提供一下 operator 的日志么

no permission for nodes, skip creating node lister 我怀疑是因为这个,没有 node 的权限,所以拿不到对应的值

:thinking: 能确认一下 role 的权限范围么

看了一下代码,

如果不是 clusterScoped 的情况下会根据 ClusterPermissionNode 来判断是否有节点权限,我们现在的情况看来是没有节点权限的,如果没有节点权限就不会初始化 nodeLister 如果没有 node listener set_store_labels_for_tikv 函数会直接返回
也就是说如果不是 clusterScoped 的 tidb-operator, 那么需要配置 --cluster-permission-node=“true”

1 个赞

@DanielZhangQD 应该是这个样子吧 :thinking:

而且看你集群状态,感觉是在滚动重启,可以先等状态稳定一下再看看:thinking:

@ssnijik @L3T 不好意思,这几天没看邮件。

  1. 从 tidb-controller-manager log 看确实没有权限,如果是部署的 namespace scoped TiDB Operator, 需要https://github.com/pingcap/tidb-operator/blob/master/charts/tidb-operator/values.yaml#L52 设置为 true,否则不会获取 node 信息,也就没法从 node 上获取 label 打到 tikv 上
  2. 具体要获取哪些 label,是根据 PD 配置的 location-labels, 比如 location-labels = [“topology.kubernetes.io/zone”, “kubernetes.io/hostname”] ,那所有的节点上都得打上对应的 label,然后 TiDB Operator 才会从 Node 上获取对应的 Label 设置到 TiKV 上

感谢 @L3T 帮忙解答

感觉这个还挺像的,一直在尝试 evict leader


迁 leader,更新 partition 就是在滚动重启