📣

TiDB Cloud Serverless 现已更名为
TiDB Cloud Starter
!体验不变,名字焕新。
立即试用 →

在 Kubernetes 上部署 TiDB 集群

本文介绍如何在 Kubernetes 环境中部署 TiDB 集群。

前提条件

配置 TiDB 集群

TiDB 集群包含以下组件,每个组件由对应的 Custom Resource Definition (CRD) 进行管理:

组件名称CRD 名称
PDPDGroup
TiKVTiKVGroup
TiDBTiDBGroup
TiProxy(可选)TiProxyGroup
TiFlash(可选)TiFlashGroup
TiCDC(可选)TiCDCGroup

在下面的步骤中,你将通过 Cluster CRD 定义一个 TiDB 集群,然后在各组件的 CRD 配置中,通过指定以下 cluster.name 字段将其关联到该集群。

spec: cluster: name: <cluster>

在部署 TiDB 集群之前,你需要为每个组件准备对应的 YAML 配置文件,以下是部分配置示例:

设置组件版本

通过 version 字段指定组件版本:

spec: template: spec: version: v8.5.2

如需使用非官方镜像,可通过 image 字段指定:

spec: template: spec: version: v8.5.2 image: gcr.io/xxx/tidb

如果要使用的版本不符合语义化版本 (Semantic Version) 格式,也可通过 image 字段指定:

spec: template: spec: version: v8.5.2 image: gcr.io/xxx/tidb:dev

配置资源

通过 spec.resources 字段配置组件所需的资源:

spec: resources: cpu: "4" memory: 8Gi

配置组件参数

通过 spec.config 字段设置组件的 config.toml 参数:

spec: config: | [log] level = warn

配置存储卷

通过 spec.volumes 为组件配置挂载的存储卷 (volume):

spec: template: spec: volumes: - name: test mounts: - mountPath: "/test" storage: 100Gi

部分组件支持使用 type 字段指定特定用途的 volume。此时,config.toml 中的相关配置也会自动更新,例如:

apiVersion: core.pingcap.com/v1alpha1 kind: TiKVGroup ... spec: template: spec: volumes: - name: data mounts: # data is for TiKV's data dir - type: data storage: 100Gi

此外,volume 支持指定 StorageClassVolumeAttributeClass。详情参考存储卷配置

配置调度策略

通过 spec.schedulePolicies 字段将组件均匀分布到不同节点:

spec: schedulePolicies: - type: EvenlySpread evenlySpread: topologies: - topology: topology.kubernetes.io/zone: us-west-2a - topology: topology.kubernetes.io/zone: us-west-2b - topology: topology.kubernetes.io/zone: us-west-2c

如需为拓扑设置权重,可设置 weight 字段:

spec: schedulePolicies: - type: EvenlySpread evenlySpread: topologies: - weight: 2 topology: topology.kubernetes.io/zone: us-west-2a - topology: topology.kubernetes.io/zone: us-west-2b

你还可以使用 Overlay 配置以下调度选项:

部署 TiDB 集群

在准备好 TiDB 集群各组件的 YAML 配置文件后,按照以下步骤部署 TiDB 集群:

  1. 创建命名空间 Namespace:

    kubectl create namespace db
  2. 部署 TiDB 集群:

    方法一:各个组件分别部署(以部署一个包含 PD、TiKV 和 TiDB 组件的 TiDB 集群为例)

      Cluster CRD 的示例配置如下:

      apiVersion: core.pingcap.com/v1alpha1 kind: Cluster metadata: name: basic namespace: db spec: {}

      创建 Cluster

      kubectl apply -f cluster.yaml --server-side

      PD 组件的示例配置如下:

      apiVersion: core.pingcap.com/v1alpha1 kind: PDGroup metadata: name: pd namespace: db spec: cluster: name: basic replicas: 3 template: metadata: annotations: author: pingcap spec: version: v8.5.2 volumes: - name: data mounts: - type: data storage: 20Gi

      创建 PD 组件:

      kubectl apply -f pd.yaml --server-side

      TiKV 组件的示例配置如下:

      apiVersion: core.pingcap.com/v1alpha1 kind: TiKVGroup metadata: name: tikv namespace: db spec: cluster: name: basic replicas: 3 template: metadata: annotations: author: pingcap spec: version: v8.5.2 volumes: - name: data mounts: - type: data storage: 100Gi

      创建 TiKV 组件:

      kubectl apply -f tikv.yaml --server-side

      TiDB 组件的示例配置如下:

      apiVersion: core.pingcap.com/v1alpha1 kind: TiDBGroup metadata: name: tidb namespace: db spec: cluster: name: basic replicas: 2 template: metadata: annotations: author: pingcap spec: version: v8.5.2

      创建 TiDB 组件:

      kubectl apply -f tidb.yaml --server-side

      方法二:将以上各组件的 YAML 文件保存在本地目录中,然后使用以下命令一次性部署 TiDB 集群

      kubectl apply -f ./<directory> --server-side
    • 查看 TiDB 集群各组件的运行状态:

      kubectl get cluster -n db kubectl get group -n db

    文档内容是否有帮助?