请问用k8s的方式启动tikv时可以给tikv打标签吗,具体如何配置?

背景:一个主机上有多快磁盘,为避免 k8s 扩容/缩容到同一个物理机上造成多数副本失效(默认3副本),k8s中的反亲和性不太适合同一套 k8s 中多个namespace的场景,所以想到了可以使用给 tikv 打标签的方式,但是在使用 tiup 部署时必须指定 host(对k8s来说就是 pod 名),所有有两个问题:

  1. pod 名称可否自定义
  2. 如何给pod指定标签

确认一下,你是用tiup在k8s上部署的么?有木有尝试 TiDB Operator?参考:https://docs.pingcap.com/zh/tidb-in-kubernetes/stable,1.1开始支持为 tidb-operator chart 配置 nodeSelector、亲和力和容忍度 #855

使用的是 TiDB Operator 的方式部署的集群,nodeSelector 参数可以解决同 namespace 扩缩容到不同主机,但能否解决不同 namespace 是否能复用同一套 k8s 集群,打个比方:

一共有12个主机,编号分别为 h1-12,一套 k8s集群,两套 namespace 分别对应 A 业务 和 B 业务,如果配置了亲和性
业务 A 对应 h1-6 再扩容就会向 h7 上扩容
由于配置了亲和性 业务 B 是否会继续使用 h1-7 的主机资源,这个不确定哈

我的理解,为亲和性所设置的标签跟命名空间是没关系的,你的想法可以尝试测试一下。

嗯嗯,还有一个点我一直想不明白
方式一、给 tikv 打标签的方式是根据 pd与kv 节点存储元信息来调度 region
方式二、k8s 的方式是通过亲和性的方式来线性扩展

方式一和方式二最主要的区别就是 同一个主机上是否能同时放两个 store
方式一:可以
方式二:不可以,只能线性扩展

1.pod名称建好后,不能修改
2.pod标签kubectl lables -n tidb-admin pod xxx xx=xx

  1. pod 名称通常为 {cluster-name}-{type}-{ordinal} ,比如 basic-pd-0; 若跨 k8s 部署会额外附带 clusterDomain,相关代码可以参考 这里
  2. 「如何给pod指定标签」需要先明确需求
    2.1 TiDB 服务高可用 用于 k8s 调度, nodeSelector 后续 k8s 会废弃,可以直接用 affinity 替代
    2.2 数据的高可用 是 tidb 层面数据的调度,是给 tikv store 打 label,这里文档没有写的可以额外使用 storeLabels