在 Kubernetes 上部署 TiDB 集群
本文介绍如何在 Kubernetes 环境中部署 TiDB 集群。
前提条件
- TiDB Operator 部署完成。
配置 TiDB 集群
TiDB 集群包含以下组件,每个组件由对应的 Custom Resource Definition (CRD) 进行管理:
组件名称 | CRD 名称 |
---|---|
PD | PDGroup |
TiKV | TiKVGroup |
TiDB | TiDBGroup |
TiProxy(可选) | TiProxyGroup |
TiFlash(可选) | TiFlashGroup |
TiCDC(可选) | TiCDCGroup |
在下面的步骤中,你将通过 Cluster
CRD 定义一个 TiDB 集群,然后在各组件的 CRD 配置中,通过指定以下 cluster.name
字段将其关联到该集群。
spec:
cluster:
name: <cluster>
在部署 TiDB 集群之前,你需要为每个组件准备对应的 YAML 配置文件,以下是部分配置示例:
- PD 组件:
pd.yaml
- TiKV 组件:
tikv.yaml
- TiDB 组件:
tidb.yaml
- TiFlash 组件:
tiflash.yaml
- TiProxy 组件:
tiproxy.yaml
- TiCDC 组件:
ticdc.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 支持指定 StorageClass 和 VolumeAttributeClass。详情参考存储卷配置。
配置调度策略
通过 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 集群:
创建命名空间 Namespace:
kubectl create namespace db部署 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-sidePD 组件的示例配置如下:
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-sideTiKV 组件的示例配置如下:
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-sideTiDB 组件的示例配置如下:
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