乐趣区

关于数据库:TiDB-Operator-源码阅读-一-序

随着 TiDB Operator 社区的壮大,越来越多的开发者参加到了 TiDB Operator 的开发中。目前,TiDB Operator 的开发门槛比拟高,须要开发者对 TiDB Operator 的代码进行具体浏览之后能力理解到我的项目的全貌。有鉴于此,咱们心愿系统性地介绍一下 TiDB Operator 的代码细节,为刚入门的开发者提供领导,提供一份长期的查阅手册。通过这一系列文章,咱们心愿能扫清 TiDB Operator 了解的阻碍,让更多的创意在社区中萌生。

TiDB Operator 的利用场景和能力定位

理解 TiDB Operator 解决的利用场景和专一的定位,有助于大家理解 TiDB Operator 代码的性能边界。

上图是 TiDB Operator 的架构。其中,TidbCluster、TidbMonitor、TidbInitializer、Backup、Restore、BackupSchedule、TidbClusterAutoScaler 是由 CRD(CustomResourceDefinition)定义的自定义资源。这些 CRD 别离形容以下信息:

  • TidbCluster 用于形容用户冀望的 TiDB 集群
  • TidbMonitor 用于形容用户冀望的 TiDB 集群监控组件
  • TidbInitializer 用于形容用户冀望的 TiDB 集群初始化 Job
  • Backup 用于形容用户冀望的 TiDB 集群备份 Job
  • Restore 用于形容用户冀望的 TiDB 集群复原 Job
  • BackupSchedule 用于形容用户冀望的 TiDB 集群周期性备份 Job
  • TidbClusterAutoScaler 用于形容用户冀望的 TiDB 集群主动伸缩规定

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

  • tidb-controller-manager 是一组 Kubernetes 上的自定义控制器。这些控制器会一直比照 TidbCluster 对象中记录的冀望状态与 TiDB 集群的理论状态,并调整 Kubernetes 中的资源以驱动 TiDB 集群满足冀望状态,并依据其余 CR 实现相应的管制逻辑。
  • tidb-scheduler 是一个 Kubernetes 调度器扩大,它为 Kubernetes 调度器注入了 TiDB 集群拓扑特有的调度逻辑。
  • tidb-admission-webhook 是一个 Kubernetes 动静准入控制器,实现 Pod、StatefulSet 等相干资源的批改、验证与运维。

TiDB 在 Kubernetes 上运行,借助了 Deployment,Statefulset,Service,PVC,ConfigMap 等 Kubernetes 原生的资源定义,通过对这些资源的配合应用来运维 TiDB。在 TiDB Operator 的帮忙下,用户只须要形容 TiDB 集群的规格,如版本,实例数量等,而不须要思考如何应用 Kubernetes 的资源。用户能够应用 YAML 部署 Tidbcluster CR 和 TidbMonitor CR,TiDB Operator 会依据这些 CR 对象的配置要求,驱动 Kubernetes 内相应的资源满足用户的冀望,最初在满足用户要求的状态下使得 TiDB 失常运行,对外提供失常服务。

TiDB Operator 是从什么角度给用户的运维操作带来了简化的呢? 举例来说,用户须要 3 个 PD 实例,但从配置角度,第一个 PD 实例须要初始化,第二个和第三个 PD 实例则须要退出刚初始化的实例,这样启动参数为 –initial-cluster 和 –join,这个配置就能够由 TiDB Operator 主动生成。

同时,运维中须要通过滚动更新实现 PD 在线降级,如果手工操作,既繁琐,又难以保障降级过程中不影响在线 PD 业务,在 Kubernetes 中须要应用 Statefulsets 的 UpdateStrategy.Partition 选项管制滚动更新的进度,联合对 PD 服务的监控一一更新 PD 实例。TiDB Operator 则能够通过 PD API 主动迁徙 Leader 并监控更新后的 Pod 是否能失常服务,自动化在线滚动更新流程。这些操作如果通过手动实现,既繁琐又极易出错,而咱们将这些 TiDB 的运维逻辑编排进 TiDB Operator,帮忙用户简化 TiDB 运维流程。

从实现上看,TiDB Operator 须要具备与两个零碎交互的能力:一个是与 Kubernetes 交互,使 Kubernetes 侧的资源配置和操作可能满足 TiDB 失常运行的需要;另一个是 TiDB 组件的 API,即 Operator 须要从 PD 获取到集群外部的状态变动,实现 Kubernetes 这一侧相应的资源管理,也要可能依据用户需要调用 TiDB 集群的 API 来实现运维操作。许多小伙伴在已有的 Kubernetes 运维零碎上集成 TiDB 运维能力时,心愿取得一种从 TiDB 零碎的视角与这两个零碎交互的运维能力,TiDB Operator 便很好的实现了这一工作。

通过这一系列文档,咱们也心愿能帮你理解到 TiDB Operator 中的技术细节,不便你将 TiDB Operator 整合进你的业务零碎。

内容概要

咱们心愿在源码浏览系列文章中探讨以下内容:

  • TiDB Operator 简介 – 探讨 TiDB Operator 须要解决的问题;
  • Operator 模式 – 探讨 TiDB Operator 的代码入口,运行逻辑,Reconcile 循环的触发;
  • TiDB Operator 的组件 Reconcile Loop 设计 – 探讨 TiDB 组件的 Reconcile

Loop 的通用设计,并介绍可能的拓展点;

  • TiDB Operator 的 Feature 设计 – 探讨备份、Auto-Scaling,、Webhook、Advanced Statefulset、TiDB Scheduler、监控等个性的设计与实现;
  • TiDB Operator 的品质治理 – 探讨 TiDB Operator 的质量保证措施,如单元测试、E2E 测试。

读者能够播种什么

咱们心愿在以下场景对你提供帮忙:

  1. 帮忙你“知其然,且知其所以然”,理解性能背地的实现,扫清对 TiDB Operator 的认知盲区,增进你的应用体验;
  2. 在你心愿为社区奉献新的性能时,咱们心愿能帮你找到钻研相干问题的入口,理解要批改或新增的性能在哪些地方能够着手切入,实现你的需要;
  3. 在你心愿将 TiDB Operator 集成到本人的以 Kubernetes 为根底的运维零碎时,咱们心愿通过介绍咱们怎么治理 Kubernetes 资源,怎么与 TiDB 交互,不便你将 TiDB Operator 接入零碎;
  4. 学习 Operator 框架时,TiDB Operator 是很好的范本。目前 Kubernetes 社区有 Kubebuilder、Operator framework 等 Operator 框架,也有 controller-runtime 等封装较好的 controller 运行时,这些实现办法实质上都是利用 Kubernetes 已有的模块来封装简单的运维逻辑。理解 TiDB Operator 的运行逻辑,能够帮你把握基于 Declaritive API,借助 Kubernetes 的优良实现设计更弱小且更易于实现的资源管理零碎。

小结

这篇文章中,咱们次要探讨了 TiDB Operator 须要解决的问题以及接下来系列文章的布局。在接下来的系列文章中,咱们会深刻到 TiDB Operator 代码设计之中,介绍 TiDB Operator 的代码构造、TiDB Operator 的运行逻辑、TiDB Operator 的性能实现细节、TiDB Operator 的品质治理,以及 TiDB Operator 在 Kubernetes 的 Operator 模式下的编写的教训。欢送你通过 #sig-k8s 或 pingcap/tidb-operator 与 TiDB Operator 社区交换互动。

退出移动版