暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

在K8S上初始化TiDB 集群并访问

IT那活儿 2022-12-05
867
点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!

初始化TIDB集群

1.1 创建secret类型账号
1)执行tidb数据库root密码
echo -n ‘oracle’ |base64
2)配置tidb-secret.yaml
apiVersion: v1
kind: Secret
metadata:
  namespace: tidb-cluster
  name: tidb-secret
type: Opaque
data:
  root:4oCYb3JhY2xl4oCZ

3)应用tidb-secret.yaml并查看
kubectl apply -f tidb-secret.yaml -n tidb-cluster

kubectlget secret -n tidb-cluster

可以看到tidb-secret已创建。

1.2 初始化TIDB数据库

1)创建初始化tidb-init.yaml

---
apiVersion: pingcap.com/v1alpha1
kind: TidbInitializer
metadata:
  name: tidb-init
  namespace:tidb-cluster
spec:
  image:tnir/mysqlclient
  #imagePullPolicy:IfNotPresent
  cluster:
    namespace:tidb-cluster
    name:detailed-tidb
  initSql: |-
    create database app;
  passwordSecret: tidb-secret

2)下载镜像并上传至内网应用
docker pull tnir/mysqlclient:latest
docker save -o mysqlclient-latest.tar tnir/mysqlclient:latest
docker load -i mysqlclient-latest.tar

3)应用yaml并查看
kubectl apply -f tidb-init.yaml

kubectl get pods -n tidb-cluster

初始完后,pod状态会变成Completed。


访问TIDB数据库

--访问

1) 查看对外暴露端口

kubectl get svc -n tidb-cluster
2) 使用mysql客户端进行访问,密码为tidb-secret.yaml创建的密码
mysql -uroot -p -h10.96.200.242 -P4000
可以看到通过初始化创建app库正常存在。

至此K8S+TIDB搭建完成。


踩坑点

tidb-cluster.yaml默认参数无法完成初始化。

1)现象

使用tidb-cluster.yaml中默认使用的tidb参数,初始化时,docker下查看pod报错如下:
info: failedto connectto detailed-tidb:4000,sleep 1 second then retry
info: failedto connectto detailed-tidb:4000,sleep 1 second then retry
info: failedto connectto detailed-tidb:4000,sleep 1 second then retry

kubectl查看pod日志,报错如下:
Errorfrom server (BadRequest): container “mysql-client” in 
pod “k8s-staging-local-pv-tidb-initializer-6p8gg”is 
waitingto start: PodInitializing

而K8S用describe查看的日志,完全不显示报错,一直处于Init:0/1状态:
Events:
Type Reason Age From Message
Normal Scheduled48s default-scheduler Successfully assigned k8s-staging-local-pv/k8s-staging-local-pv-tidb-initializer-6p8gg to node-101359-dskbper6.kscn
Normal Pulled47s kubelet Container image “tnir/mysqlclient” already present on machine
Normal Created47s kubelet Created container wait
Normal Started47s kubelet Started container wait

2)解决

在tidb-cluster.yaml中,tidb.service设置ClusterIP、Nodeport或者Load Balancer,再重新初始化,则正常。


本文作者阮飞鹏(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论