写点什么

本地 Kind 体验 TiDB Operator 最小实践

  • 2022 年 7 月 11 日
  • 本文字数:5889 字

    阅读完需:约 19 分钟

作者: 边城元元原文来源:https://tidb.net/blog/7843271b

本地 Kind 体验 TiDB Operator 最小实践

一、背景

​ 本地 TiDB 测试环境(基于 k8s)按照说明文档操作了几次都没有成功安装 TiDB 集群,对我这样的新新手还是有些难度,今天把部署成功的路径记录下来!

二、准备环境

系统:基于 centos7.3 pure 的虚拟机配置:2c,4GIP:192.168.31.236 (虚拟机 IP )k8s:kind 本地模拟 k8s 集群 TiDB:v5.4.0

2.1 使用 kind 创建 Kubernetes 集群

目前比较通用的方式是使用 [kind](https://kind.sigs.k8s.io/) 部署本地测试 Kubernetes 集群。kind 适用于使用 Docker 容器作为集群节点运行本地 Kubernetes 集群。

2.1.1 部署前准备环境

请确保满足以下要求


2.1.2 创建集群

kind create cluster


这个过程有点慢(需要下载 1 个多 G 的镜像)



检查集群是否创建成功:


[root@tidb-k3s bin]# kubectl cluster-infoKubernetes control plane is running at https://127.0.0.1:44141CoreDNS is running at https://127.0.0.1:44141/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy
To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.
复制代码


Kubernetes 集群部署完成,现在就可以开始部署 TiDB Operator 了!

2.2 部署 TiDB Operator

2.2.1 安装 TiDB Operator CRDs

1、raw.githubusercontent.com 国内不能直接访问,需要设置 host


https://ipaddress.com/website/raw.githubusercontent.com# 通过这个链接查看服务器 ip


vim /etc/hosts
185.199.108.133 raw.githubusercontent.com185.199.109.133 raw.githubusercontent.com185.199.110.133 raw.githubusercontent.com185.199.111.133 raw.githubusercontent.com

复制代码


2、安装 CRD 到集群中


# 下载crd.yamlcurl -L https://raw.githubusercontent.com/pingcap/tidb-operator/v1.3.2/manifests/crd.yaml -o crd.yaml# 创建 crdkubectl create -f crd.yaml# 删除 crd# kubectl delete  -f crd.yaml

# 查看crdkubectl get crd
[root@tidb-k3s k8s]# kubectl get crdNAME CREATED ATbackups.pingcap.com 2022-04-06T23:15:51Zbackupschedules.pingcap.com 2022-04-06T23:15:51Zdmclusters.pingcap.com 2022-04-06T23:15:51Zrestores.pingcap.com 2022-04-06T23:15:52Ztidbclusterautoscalers.pingcap.com 2022-04-06T23:15:52Ztidbclusters.pingcap.com 2022-04-06T23:15:54Ztidbinitializers.pingcap.com 2022-04-06T23:15:58Ztidbmonitors.pingcap.com 2022-04-06T23:15:59Ztidbngmonitorings.pingcap.com 2022-04-06T23:16:01Z
复制代码
2.2.2 安装 TiDB Operator

1、安装 helm


# helmcurl -L https://get.helm.sh/helm-v3.8.0-linux-amd64.tar.gz -o helm-v3.8.0-linux-amd64.tar.gztar -zxvf helm-v3.8.0-linux-amd64.tar.gzmv ./linux-amd64/helm /usr/local/bin/helmchmod +x /usr/local/bin/helm
# helm version[root@tidb-k3s k8s]# helm versionversion.BuildInfo{Version:"v3.8.0", GitCommit:"d14138609b01886f544b2025f5000351c9eb092e", GitTreeState:"clean", GoVersion:"go1.17.5"}
复制代码


2、添加 PingCAP 仓库


helm repo add pingcap https://charts.pingcap.org/
#helm repo list[root@tidb-k3s k8s]# helm repo listNAME URL pingcap https://charts.pingcap.org/
复制代码


3、为 TiDB Operator 创建一个命名空间


kubectl create namespace tidb-admin
复制代码


4、安装 TiDB Operator


helm install --namespace tidb-admin tidb-operator pingcap/tidb-operator --version v1.3.2

复制代码



注意:安装 tidb-operator 如果出现下面的提示:


Error: INSTALLATION FAILED: cannot re-use a name that is still in use


# 重新创建namespacehelm ls --all-namespaceskubectl delete namespace tidb-adminkubectl create namespace tidb-admin

复制代码


5、检查 TiDB Operator 组件是否正常运行


watch  kubectl get pods --namespace tidb-admin -l app.kubernetes.io/instance=tidb-operator
复制代码



当所有的 pods 都处于 Running 状态时,继续下一步部署 tidb 集群。


注意:如果所有的 pod 都一直处于 pending,需要检查虚拟机的 cpu 和内存是不是够用 2 核 4G 以上即可。

三、部署 tidb cluster 和监控

3.1 部署 tidb-cluster 集群

3.1.1 下载 tidb-cluster.yaml
# 下载tidb-cluster.yamlcurl -L https://raw.githubusercontent.com/pingcap/tidb-operator/master/examples/basic/tidb-cluster.yaml -o tidb-cluster-basic.yaml

复制代码
3.1.2 创建 tidb 集群命名空间
kubectl create namespace tidb-cluster
复制代码
3.1.3 部署 tidb-cluster 集群
# 使用上面下载的集群拓扑tidb-cluster-basic.yamlkubectl -n tidb-cluster apply -f ./tidb-cluster-basic.yaml
# 立即提示 created[root@tidb-k3s k8s]# kubectl -n tidb-cluster apply -f ./tidb-cluster-basic.yamltidbcluster.pingcap.com/basic created
复制代码
3.1.4 观察 pod 创建
# 观察pod创建watch kubectl get pod -n tidb-cluster
复制代码


1、先创建 discoery 和 pd



2、创建完 pd 才开始创建 tikv



3、tikv 创建完之后开始创建 tidb-server


3.1.5 对外暴露端口 14000
# 获取 tidb-cluster 命名空间中的服务列表 4000端口是否准备完毕kubectl get svc -n tidb-cluster
# 使用端口转发 监听0.0.0.0:14000 转发到tidb-server的4000kubectl port-forward --address 0.0.0.0 -n tidb-cluster svc/basic-tidb 14000:4000 > pf14000.out &
# 查看监听端口netstat -tpln
# 如果端口 14000 已经被占用,可以更换一个空闲端口。命令会在后台运行,并将输出转发到文件 pf14000.out。
复制代码


3.1.6 连接 TiDB-server

1、使用 mysql 客户端连接(其他 client 也可以)


# 此处的 192.168.31.236 为虚拟机的ip,如果要使用127.0.0.1可以设置本机端口转发到虚拟机# 保留注释,以便使用hintmysql --comments -h 192.168.31.236 -P 14000 -u root
#提示Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 179Server version: 5.7.25-TiDB-v5.4.0 TiDB Server (Apache License 2.0) Community Edition, MySQL 5.7 compatiblemysql>
复制代码


2、使用测试 sql


mysql> use test;mysql> create table hello_world (id int unsigned not null auto_increment primary key, v varchar(32));
mysql> select * from information_schema.tikv_region_status where db_name=database() and table_name='hello_world'\G
# 查看版本号mysql> select tidb_version()\G
# 查询 TiKV 存储状态mysql> select * from information_schema.tikv_store_status\G
# 查看集群基本信息mysql> select * from information_schema.cluster_info\G
复制代码


3.2 部署监控

3.2.1 下载 tidb-monitor.yaml
curl -L https://raw.githubusercontent.com/pingcap/tidb-operator/master/examples/basic/tidb-monitor.yaml -o tidb-monitor-basic.yaml
复制代码
3.2.2 部署监控节点
kubectl -n tidb-cluster apply -f ./tidb-monitor-basic.yaml
复制代码
3.2.3 观察监控 pod 创建
watch kubectl get pod -n tidb-cluster
复制代码



获取服务列表 kubectl get svc -n tidb-cluster


# 获取 tidb-cluster 命名空间中的服务列表 3[root@tidb-k3s k8s]# kubectl get svc -n tidb-clusterNAME                     TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)               AGEbasic-discovery          ClusterIP   10.96.206.145   <none>        10261/TCP,10262/TCP   61mbasic-grafana            ClusterIP   10.96.190.13    <none>        3000/TCP              22mbasic-monitor-reloader   ClusterIP   10.96.16.223    <none>        9089/TCP              22mbasic-pd                 ClusterIP   10.96.19.73     <none>        2379/TCP              61mbasic-pd-peer            ClusterIP   None            <none>        2380/TCP,2379/TCP     61mbasic-prometheus         ClusterIP   10.96.109.172   <none>        9090/TCP              22mbasic-tidb               ClusterIP   10.96.37.140    <none>        4000/TCP,10080/TCP    47mbasic-tidb-peer          ClusterIP   None            <none>        10080/TCP             47mbasic-tikv-peer          ClusterIP   None            <none>        20160/TCP             58m
复制代码
3.2.4 对外暴露端口 2379,3000
kubectl port-forward --address 0.0.0.0 -n tidb-cluster svc/basic-grafana 3000:3000 > pf3000.out &kubectl port-forward --address 0.0.0.0 -n tidb-cluster svc/basic-pd 2379:2379 > pf2379.out &
#注意:这里要加上 --address 0.0.0.0,否则 外网无法访问
复制代码
3.2.5 测试 Dashboard

http://192.168.31.236:2379/dashboard/root=


3.2.5.1 概况



3.2.5.2 TopSql





1、安装 NgMonitoring


cat << EOF | kubectl apply -n tidb-cluster -f -apiVersion: pingcap.com/v1alpha1kind: TidbNGMonitoringmetadata:  name: main-cluster-monitoringspec:  clusters:  - name: basic    namespace: tidb-cluster
ngMonitoring: requests: storage: 1Gi version: v5.4.0 # storageClassName: default baseImage: pingcap/ng-monitoring EOF
# 提示# tidbngmonitoring.pingcap.com/main-cluster-monitoring created
复制代码


2、等待 pod 安装成功进入 running 状态



3、安装成功后 ,刷新 dashboard。


1)、打开设置(topSQL)http://192.168.31.236:2379/dashboard/#/topsql



               ![image.png](https://tidb-blog.oss-cn-beijing.aliyuncs.com/media/image-1649302608115.png)
复制代码


4、点击保存后,过几分钟 topsql 将会有数据。


3.2.6 测试 grafana

http://192.168.31.236:3000/admin=admin


四、扩容与缩容

1、进行扩容操作,可将某个组件的 replicas调大。扩容操作会按照 Pod 编号由小到大增加组件 Pod,直到 Pod 数量与 replicas 值相等。2、进行缩容操作,可将某个组件的 replicas调小。缩容操作会按照 Pod 编号由大到小删除组件 Pod,直到 Pod 数量与 replicas 值相等。

3、查看集群水平扩缩容状态

watch kubectl -n ${namespace} get pod -o wide

提示:1、PD 和 TiDB 通常需要 10 到 30 秒左右的时间进行扩容或者缩容。2、TiKV 组件由于涉及到数据搬迁,通常需要 3 到 5 分钟来进行扩容或者缩容。

4.1 水平扩容 2 个 tidb,最终实现 3 个 tidb

按需修改 TiDB 集群组件的 replicas 值。例如,执行以下命令可将 PD 的 replicas 值设置为 3:


# kubectl get tidbcluster ${cluster_name} -n ${namespace} -oyaml# # 查看kubectl get tidbcluster basic -n tidb-cluster -o yaml
# kubectl patch -n ${namespace} tc ${cluster_name} --type merge --patch '{"spec":{"pd":{"replicas":3}}}'# 设置 replicas为3 (即扩容2个tidb)kubectl patch -n tidb-cluster tc basic --type merge --patch '{"spec":{"tidb":{"replicas":3}}}'
复制代码




4.2 水平扩容 2 个 pd,2 个 tikv 最终实现 333

kubectl patch -n tidb-cluster tc basic --type merge --patch '{"spec":{"pd":{"replicas":3}}}'kubectl patch -n tidb-cluster tc basic --type merge --patch '{"spec":{"tikv":{"replicas":3}}}'
# 查看pod创建情况kubectl get pod -n tidb-cluster
[root@tidb-k3s k8s]# kubectl get pod -n tidb-cluster NAME READY STATUS RESTARTS AGEbasic-discovery-55fd6db97f-k48xf 1/1 Running 0 147mbasic-monitor-0 4/4 Running 0 108mbasic-pd-0 1/1 Running 0 147mbasic-pd-1 1/1 Running 2 15mbasic-pd-2 1/1 Running 0 14mbasic-tidb-0 2/2 Running 0 133mbasic-tidb-1 2/2 Running 0 23mbasic-tidb-2 2/2 Running 0 23mbasic-tikv-0 1/1 Running 0 144mbasic-tikv-1 1/1 Running 1 (3m12s ago) 12mmain-cluster-monitoring-ng-monitoring-0 1/1 Running 0 75m
复制代码


我这里在创建 basci-tikv-2 的时候较慢(受限于内存和 cpu)。

4.3 水平缩容 2 个 tidb、2 个 tikv,2 个 pd

# 缩容kubectl patch -n tidb-cluster tc basic --type merge --patch '{"spec":{"pd":{"replicas":1}}}'kubectl patch -n tidb-cluster tc basic --type merge --patch '{"spec":{"tikv":{"replicas":1}}}'kubectl patch -n tidb-cluster tc basic --type merge --patch '{"spec":{"tidb":{"replicas":1}}}'
# 查看pod创建情况watch kubectl get pod -n tidb-cluster

复制代码

4.4 垂直扩缩容

通过增加或减少 Pod 的资源限制,来达到集群扩缩容的目的。垂直扩缩容本质上是 Pod 滚动升级的过程。


提示:垂直扩缩容和扩缩容其他组件整理不做演示,请参考 https://docs.pingcap.com/zh/tidb-in-kubernetes/stable/scale-a-tidb-cluster

五、升级集群

5.1 升级 TiDB 集群


5.1.1 在 TidbCluster CR 中,修改待升级集群的各组件的镜像配置:


# kubectl edit tc ${cluster_name} -n ${namespace}
kubectl edit tc basic -n tidb-cluster#一般修改 `spec.version` 即可。
复制代码


5.1.2 查看升级进度


watch kubectl -n tidb-cluster get pod -o wide
复制代码


当所有 Pod 都重建完毕进入 Running 状态后,升级完成。

总结与思考

总结

1、安装完成不易,在此记录心路历程。感谢 tidb 官网、感谢 tidber!


2、TiDB Operator 的其他功能需要更多的探索学习!

思考

未来 ALL in TIdb,使用 k8s 还是裸机 tiup 的方式,这个疑问后续继续探索。

谢谢!

发布于: 刚刚阅读数: 2
用户头像

TiDB 社区官网:https://tidb.net/ 2021.12.15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
本地Kind体验TiDB Operator最小实践_实践案例_TiDB 社区干货传送门_InfoQ写作社区