TiDB Operator 简介

TiDB Operator 是 Kubernetes 上的 TiDB 集群自动运维系统,提供包括部署、升级、扩缩容、备份恢复、配置变更的 TiDB 全生命周期管理。借助 TiDB Operator,TiDB 可以无缝运行在公有云或私有部署的 Kubernetes 集群上。

注意:

每个 Kubernetes 集群中只能部署一个 TiDB Operator。

TiDB Operator 与适用的 TiDB 版本的对应关系如下:

TiDB Operator 版本 适用的 TiDB 版本
v1.0 v2.1, v3.0
v1.1 v3.0, v3.1, v4.0
dev v3.0, v3.1, v4.0, dev

TiDB Operator 整体架构

TiDB Operator Overview

其中,TidbClusterTidbMonitorTidbInitializerBackupRestoreBackupScheduleTidbClusterAutoScaler 是由 CRD(CustomResourceDefinition)定义的自定义资源:

  • TidbCluster 用于描述用户期望的 TiDB 集群
  • TidbMonitor 用于描述用户期望的 TiDB 集群监控组件
  • TidbInitializer 用于描述用户期望的 TiDB 集群初始化 Job
  • Backup 用于描述用户期望的 TiDB 集群备份
  • Restore 用于描述用户期望的 TiDB 集群恢复
  • BackupSchedule 用于描述用户期望的 TiDB 集群周期性备份
  • TidbClusterAutoScaler 用于描述用户期望的 TiDB 集群自动伸缩

TiDB 集群的编排和调度逻辑则由下列组件负责:

  • tidb-controller-manager 是一组 Kubernetes 上的自定义控制器。这些控制器会不断对比 TidbCluster 对象中记录的期望状态与 TiDB 集群的实际状态,并调整 Kubernetes 中的资源以驱动 TiDB 集群满足期望状态,并根据其他 CR 完成相应的控制逻辑;
  • tidb-scheduler 是一个 Kubernetes 调度器扩展,它为 Kubernetes 调度器注入 TiDB 集群特有的调度逻辑。
  • tidb-admission-webhook 是一个 Kubernetes 动态准入控制器,完成 Pod、StatefulSet 等相关资源的修改、验证与运维。

此外,TiDB Operator 还提供了命令行接口 tkctl 用于运维集群和诊断集群问题。

TiDB Operator Control Flow

上图是 TiDB Operator 的控制流程解析。从 TiDB Operator v1.1 开始,TiDB 集群、监控、初始化、备份等组件,都通过 CR 进行部署、管理。整体的控制流程如下:

  1. 用户通过 kubectl 创建 TidbCluster 和其他 CR 对象,比如 TidbMonitor 等;
  2. TiDB Operator 会 watch TidbCluster 以及其它相关对象,基于集群的实际状态不断调整 PD、TiKV、TiDB 或者 Monitor 等组件的 StatefulSetDeploymentService 等对象;
  3. Kubernetes 的原生控制器根据 StatefulSetDeploymentJob 等对象创建更新或删除对应的 Pod
  4. PD、TiKV、TiDB 的 Pod 声明中会指定使用 tidb-scheduler 调度器,tidb-scheduler 会在调度对应 Pod 时应用 TiDB 的特定调度逻辑。

基于上述的声明式控制流程,TiDB Operator 能够自动进行集群节点健康检查和故障恢复。部署、升级、扩缩容等操作也可以通过修改 TidbCluster 对象声明“一键”完成。

使用 TiDB Operator 管理 TiDB 集群

TiDB Operator 提供了多种方式来部署 Kubernetes 上的 TiDB 集群:

在任何环境上部署前,都可以参考 TiDB 集群配置来自定义 TiDB 配置。

部署完成后,你可以参考下面的文档进行 Kubernetes 上 TiDB 集群的使用和运维:

当集群出现问题需要进行诊断时,你可以:

Kubernetes 上的 TiDB 提供了专用的命令行工具 tkctl 用于集群管理和辅助诊断,同时,在 Kubernetes 上,TiDB 的部分生态工具的使用方法也有所不同,你可以:

最后,当 TiDB Operator 发布新版本时,你可以参考升级 TiDB Operator 进行版本更新。