[FAQ] K8s 如何异构 TiKV-server

场景

  • TiKV-server 需要更换磁盘类型
  • TiKV-server 扩容不同磁盘类型

参考文档

模拟步骤

  • 添加不同种类的storageclass

    • 查看当前 pv 配置,只有 local-storage 类型的磁盘

kubectl get pv

  • bind mount 方式挂载磁盘(所有节点执行)

for i in $(seq 1 10); do

sudo mkdir -p /home/vol${i} /mnt/disks/${DISK_UUID}_vol${i}

sudo mount --bind /home/vol${i} /mnt/disks/${DISK_UUID}_vol${i}

done

for i in $(seq 1 10); do

echo /home/vol${i} /mnt/disks/${DISK_UUID}_vol${i} none bind 0 0 sudo tee -a /etc/fstab

done

  • 修改配置 /etc/kubernetes/local-volume-provisioner.yaml

使用 diff 查看配置前后不同项

  • 更改配置 kubectl apply -f /etc/kubernetes/local-volume-provisioner.yaml

  • 查看 pv 已经添加成功

  • 异构 TiKV-server

    • 查看已有集群信息

kubectl get tc -n cluster-name-ryl

kubectl get pod -n cluster-name-ryl

  • 创建异构 TiKV-Server
    • 新建 cluster-tikv.yaml 文件(tidboperator-ryl-new 为异构集群名称tidboperator-ryl 为待加入集群名称)

[root@m4136 ryl]# cat cluster-tikv.yaml (格式显示无缩进,请查看图片)

apiVersion: pingcap.com/v1alpha1

kind: TidbCluster

metadata:

name: tidboperator-ryl-new

spec:

configUpdateStrategy: RollingUpdate

version: v4.0.9

timezone: UTC

pvReclaimPolicy: Delete

discovery: {}

cluster:

name: tidboperator-ryl

tikv:

baseImage: pingcap/tikv

replicas: 1

if storageClassName is not set, the default Storage Class of the Kubernetes cluster will be used

storageClassName: nvme-storage

requests:

storage: “1Gi”

config: {}

  • 执行命令 kubectl create -f cluster-tikv.yaml -n cluster-name-ryl

  • 查看结果

[root@m4136 ryl]# kubectl get pod -n cluster-name-ryl

[root@m4136 ryl]# kubectl get service -n cluster-name-ryl

备注

  • 如果是原 TiKV-server 更换磁盘类型,需要扩缩容两次,把原来的 storageclass 改为需要的。