在 Kubernetes 上部署 DM

    • TiDB Operator 完成。

    注意

    要求 TiDB Operator 版本 >= 1.2.0。

    通过配置 DMCluster CR 来配置 DM 集群。参考 DMCluster 和 API 文档(示例和 API 文档请切换到当前使用的 TiDB Operator 版本)完成 DMCluster CR (Custom Resource)。

    通过更改 CR 中的 metadata.name 来配置集群名称。

    正常情况下,集群内的各组件应该使用相同版本,所以一般建议配置 spec.<master/worker>.baseImage + spec.version 即可。如果需要为不同的组件配置不同的版本,则可以配置 spec.<master/worker>.version

    相关参数的格式如下:

    • spec.version,格式为 imageTag,例如 v6.5.0
    • spec.<master/worker>.baseImage,格式为 imageName,例如 pingcap/dm

    TiDB Operator 仅支持部署 DM 2.0 及更新版本。

    DM-master 配置

    可以通过 DMCluster CR 的 spec.master.config 来配置 DM-master 配置参数。完整的 DM-master 配置参数,参考。

    DM-worker 配置

    可以通过 DMCluster CR 的 spec.worker.config 来配置 DM-worker 配置参数。完整的 DM-worker 配置参数,参考。

    1. apiVersion: pingcap.com/v1alpha1
    2. kind: DMCluster
    3. metadata:
    4. name: ${dm_cluster_name}
    5. spec:
    6. ...
    7. worker:
    8. baseImage: pingcap/dm
    9. maxFailoverCount: 0
    10. replicas: 1
    11. storageSize: "100Gi"
    12. requests:
    13. cpu: 1
    14. keepalive-ttl = 15

    配置 topologySpreadConstraints 可以实现同一组件的不同实例在拓扑上的均匀分布。具体配置方法请参阅 。

    如需使用 topologySpreadConstraints,需要满足以下条件:

    • Kubernetes 集群使用 default-scheduler,而不是 tidb-scheduler。详情可以参考 tidb-scheduler 与 default-scheduler
    • Kubernetes 集群开启 EvenPodsSpread feature gate。如果 Kubernetes 版本低于 v1.16 或集群未开启 EvenPodsSpread feature gate,topologySpreadConstraints 的配置将不会生效。

    topologySpreadConstraints 可以设置在整个集群级别 () 来配置所有组件或者设置在组件级别 (例如 spec.tidb.topologySpreadConstraints) 来配置特定的组件。

    以下是一个配置示例:

    1. topologySpreadConstrains:
    2. - topologyKey: kubernetes.io/hostname
    3. - topologyKey: topology.kubernetes.io/zone

    该配置能让同一组件的不同实例均匀分布在不同 zone 和节点上。

    当前 topologySpreadConstraints 仅支持 topologyKey 配置。在 Pod spec 中,上述示例配置会自动展开成如下配置:

    1. kubectl apply -f ${dm_cluster_name}.yaml -n ${namespace}

    如果服务器没有外网,需要按下述步骤在有外网的机器上将 DM 集群用到的 Docker 镜像下载下来并上传到服务器上,然后使用 docker load 将 Docker 镜像安装到服务器上:

    1. 部署一套 DM 集群会用到下面这些 Docker 镜像(假设 DM 集群的版本是 v6.5.0):

      1. pingcap/dm:v6.5.0
    2. 通过下面的命令将所有这些镜像下载下来:

    3. 将这些 Docker 镜像上传到服务器上,并执行 docker load 将这些 Docker 镜像安装到服务器上:

      1. docker load -i dm-v6.5.0.tar

    部署 DM 集群完成后,通过下面命令查看 Pod 状态:

    1. kubectl get po -n ${namespace} -l app.kubernetes.io/instance=${dm_cluster_name}

    单个 Kubernetes 集群中可以利用 TiDB Operator 部署管理多套 DM 集群,重复以上步骤并将 ${dm_cluster_name} 替换成不同名字即可。不同集群既可以在相同 namespace 中,也可以在不同 namespace 中,可根据实际需求进行选择。

    在 Kubernetes 集群的 Pod 内访问 DM-master 时,使用 DM-master service 域名 ${cluster_name}-dm-master.${namespace} 即可。

    若需要在集群外访问,则需将 DM-master 服务端口暴露出去。在 DMCluster CR 中,通过 spec.master.service 字段进行配置:

    更多服务暴露方式可参考 。

    • 如果你需要在 Kubernetes 上使用 DM 迁移 MySQL 数据到 TiDB 集群,请参考。