# Tidb Cloud 创建集群工作流程

![left](./student-guide/diagram/TiDBCloudCreateClusterWorkflow_aa_001_20220524.png)

------------------------------------------------------------
这是一个非常复杂的过程。在本入门类中，我们不会详细介绍每个组件。

作为 TIDB 云解决方案一部分的部分组件包括：


基本连接到集群场景
用户 — 使用 UI 连接到集群

    -用于创建集群的 API 将集群记录 (metaDB) 写入源代码（表结构） 
    -当工作程序定期扫描到需要创建的集群时，启动集群创建逻辑（源代码） 
    -Worker 调用 Infra API 创建新网络或复制现有网络（取决于平台层多租户隔离逻辑）（源代码） 
    -网络就绪后，Worker 调用 Infra API 创建集群并等待集群就绪（源代码） 
    -集群就绪后，工作线程执行业务层初始化操作，例如设置用户给出的初始密码（源代码） 
    -用户端的 UA（浏览器）将轮询集群状态。用户发现集群已准备就绪后，使用 API 返回的连接字符串连接到 TiDB集群（源代码） 

核心：职责：Central 将通过 grpc 将 TiDB 相关产品的生命周期管理权交给核心服务，核心服务负责管理 TiDB集群、BR、照明、cdc、复制、模型及其他 DBaaS 核心实体。 

    -核心服务是一项剥离身份和计费等平台业务逻辑的服务，专注于运营 TiDB 产品。负责中央部门对 Infra 提供的产品的理解。 

metaDB 职责：平台后端数据库，用于存储云平台的主要业务数据，运行在 Prod 环境的 TiDB集群上。 

    -Worker 职责：平台的后台异步逻辑工作线程从元数据库的任务队列中读取任务，并逐步消化队列。目前，与 Infra API 相关的写入逻辑通常是在平台端写入元数据库，然后由工作线程同步到 Infra API。 
    相关代码：https://github.com/tidbcloud/dbaas/blob/7b11c7c9c55cbad9d762d7eaf622386d0c643786/central/worker/manager.go#L51-L52 

    -InfraAPI 职责：Infra API Server 为专用层基础设施提供商、开发层/共享层的 aws 共享提供商/共享提供商提供基于 kube-apiserver + etcd 的 CRD 存储 
    相关代码：https://github.com/tidbcloud/infra-cd/blob/main/apiserver.ts 目前 Pulumi 通过部署 

    -基础设施提供商职责：提供Dedicated Tier 的主要生命周期管理，主要用于园丁系统下的集群管理，包括网络、集群、备份、还原、导入、NetworkPeer和其他控制器 
    相关代码：https://github.com/tidbcloud/infra-api/blob/main/cmd/infra-provider/main.go 

跨板提供商-aws
职责：Crossplane 的 AWS 提供商实现，负责管理 AWS 相关资源的 CRD。 
相关代码：https://github.com/tidbcloud/provider-aws 

Gardner Gardener 控制飞机
职责：Gardener 的控制方，Gardener 是一组用于创建用户使用的 Kubernetes 集群的托管服务，包括 
园丁 APIserver：提供园丁 API 
ETCD：园丁 APIserver 的存储 
调度器：将一组 k8s 集群分派到相应的种子（Region） 
回购：https://github.com/tidbcloud/gardener 

园丁特工
职责：园丁的数据平面，每组种子集群运行一组园丁特工。当 Gardener 控制平面将一组 k8s 集群调度到当前种子时，园丁代理将负责创建这组 k8s 集群（TiDB K8S 控制平面）的 VPC、节点和控制平面 

TiDB K8s TiDB Kubernetes 集群：

机器控制器管理器
职责：调用 Cloud API，管理 k8s 集群中的虚拟机 
回购：https://github.com/tidbcloud/machine-controller-manager 

云控制器管理器
职责：Kubernetes 负责控制平面中云交互的组件、调用 Cloud API、管理云盘和 Cloud k8s 集群 LB 
回购：https://github.com/kubernetes/kubernetes 

agg prometheus
职责：通过指标导出器和 TiDB Prometheus VPC 的 VPN（普罗米修斯拉普罗米修斯称为 Federate）收集 TiDB 在 TiDB VPC 中暴露的指标，然后推送到 Thanos。同时，普罗米修斯还会计算一些报警规则，并将警报推送到警报管理器； 
风险点：事实上，agg prometheus 是多余的（因为每个端点的指标收集点可以自行将指标推送到中央 Thanos，而无需经过一层中继），这源于 Gardener 架构的继承，将来可以重构删除，减少复杂性，并提高指标链接的稳定性； 


配置服务云职责：配置服务目前是 GitOps 的核心组件。职责包括： 
    -提供当前 Tidb/pd/tikV/tiFlash/ticdc/br/Lightning 应该使用的外部镜像（控制组件版本）和配置。例如，基础设施提供商在创建集群时会请求配置服务； 
    -巡查所有集群，并将当前映像/配置与预期值不匹配的集群升级为新的映像/配置； 
    回购：https://github.com/tidbcloud/config-service 
附加说明：config-service目前仅适用于专用集群，不支持配置在线更新。计划在 DBaaS 上的 TiDB 配置管理中进行改进 

TiDB 
